Files
sternwarte/sternwarte/DB4js.php

573 lines
18 KiB
PHP

<?php
# Hier werden die Anfragen vom Javascript verarbeitet und die
# Datenbank bedient
include 'config_stern.php';
include 'phpmailer/dosendmail.php';
// Holen der Einträge in der anmelde-Datenbank für den selektierten Tag
// Parameter
// $fid -> so viele Einträge ab jetzt holen <<<???
// Retunrn:
// Array mit den Einträgen
function getAnmeldungen($fid)
{
global $db;
$erg = array();
$sql_stmt = "SELECT * FROM anmeldungen WHERE fid='$fid'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// Holen der Daten aller oder eine einzelnen BEOs
//
// Parameter:
// $id ID des zu holenden BEOs, undefined -> alle holen
// $og true: nur die, die Führung machen, sonst alle
// Return:
// Array mit allen BEOs
function getBEOs($id, $og, $what)
{
global $db;
if ($id != 'all') {
$sql_stmt = "SELECT $what FROM beos where id='$id' order by name";
} else {
if($og == 'true') {
$sql_stmt = "SELECT $what FROM beos where gruppe !='' order by name";
} else {
$sql_stmt = "SELECT $what FROM beos order by name";
}
}
$erg = array();
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
function getOneBEO($kurz, $what)
{
global $db;
$sql_stmt = "SELECT $what FROM beos where kürzel='$kurz'";
$erg = array();
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data ;
// while ($row = mysqli_fetch_assoc($result)) {
// foreach($row as $key => $value) {
// $entry[$key] = $value;
// }
// $erg[] = $entry;
// }
// return $erg;
}
function updateOneBEOpw($data)
{
global $db;
$sql_stmt = "UPDATE beos SET pw='$data[pw]' where kürzel='$data[kurz]'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
// Daten eines Teilnehmers abholen
// Parameter:
// $id: Teilnehmer - ID
// Return:
// Dict mit allen Daten des Teilnehmers
function getTeilnehmer($seed,$isid,$withdate)
{
global $db;
$today = date('Ymd');
$erg = array();
$entry = array();
if ($seed == -1) {
$sql_stmt = "SELECT email, fid, id, anzahl FROM anmeldungen WHERE email != '-'";
} else if($isid) {
$sql_stmt = "SELECT * FROM anmeldungen WHERE id='$seed'";
} else {
if ($withdate) {
$sql_stmt = "SELECT * FROM anmeldungen WHERE email='$seed' AND fdatum >= '$today'";
} else {
$sql_stmt = "SELECT * FROM anmeldungen WHERE email='$seed'";
}
}
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// Daten aller Teilnehmer ab eines Führungsdatumns abholen
// Parameter:
// $fid: Führungsdatum, ab dem die Info geholt wirdTeilnehmer - ID
// Return:
// Dict mit allen Daten des Teilnehmers
function getAllTeilnehmer($fdatum)
{
global $db;
$erg = array();
$entry = array();
$sql_stmt = "SELECT * FROM anmeldungen WHERE fdatum>='$fdatum' ORDER BY fid ASC";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// die Daten der Führungen in dem Bereich start - end
// in ein Array als ISO8601 holen
// Parameter
// $start -> ab diesem Datum
// $end -> bis zu diesem Datum
// Retunrn:
// Array mit den Daten in ISO8601
function getFuehrungen($start, $end) {
global $db;
$erg = array();
$sql_sel = "SELECT * FROM fdatum1 where datum >= '$start' AND datum <= '$end' ORDER BY datum ASC";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// die Daten der nächsten $soviel Führungen in ein Array holen
// Parameter
// $soviel -> so viele Einträge ab jetzt holen
// Retunrn:
// Array mit allen Werten aus der Table
function getNextFuehrungen($soviel, $fid) {
global $db;
$erg = array();
$datum_heute = date("Ymd",strtotime("-1 days"));
if ($fid != 0) {
$sql_sel = "SELECT id, wtag, datum, uhrzeit FROM fdatum where id >= $fid order by datum ASC LIMIT $soviel";
} else {
$sql_sel = "SELECT id, wtag, datum, uhrzeit FROM fdatum where datum >='$datum_heute' order by datum ASC LIMIT $soviel";
}
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_row($result)) {
$entry = array();
$entry['fid'] = $row[0];
$entry['weekday'] = $row[1];
$entry['date'] = $row[2];
$entry['time'] = $row[3];
$erg[] = $entry;
}
return $erg;
}
function updateTeilnehmer_fdate($id, $fdatum, $fid) {
global $db;
$sql_stmt = "UPDATE anmeldungen SET fdatum=$fdatum,fid=$fid where id=$id";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
function updateentries($nr,$val,$field)
{
global $db;
$result = false;
for ($i = 0; $i < count($nr); $i++) {
$sql_stmt = "UPDATE anmeldungen SET $field=$val[0] where id=$nr[$i]";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
}
return $result;
}
function delCalentry($id) {
global $db;
$sql_stmt = "DELETE FROM kalender WHERE id='$id'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
function deleteEntry($id) {
global $db;
$sql_stmt = "DELETE FROM anmeldungen WHERE id='$id'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
// Zählen, wieviele Personen zu einem Führungstermin angemeldet sind
// Parameter:
// $fid -> id des Führungsdatum
// Return: Anzahl der Personen
function getCountsPerDate($fid) {
global $db;
$sql_stmt = "SELECT SUM(anzahl) AS count FROM anmeldungen WHERE fid='$fid'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data['count'] ;
}
// Zählen, wieviele Personen zu einem Führungstermin angemeldet sind
// Parameter:
// $date -> Datum der Führung (YYYMDD)
// Return: Anzahl der Personen
function getCountsPerDatefromDate($date) {
global $db;
$sql_stmt = "SELECT SUM(anzahl) AS count FROM anmeldungen WHERE fdatum='$date'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data['count'];
}
// aus dem Datum (yyyymmdd) die fid aus der Tabelle holen
function getfid($datum) {
global $db;
$sql_stmt = "SELECT * FROM fdatum1 WHERE datum >= $datum LIMIT 1";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data;
}
// aus der fdatum-Tabelle die Details zur übergeben ID holen
function getOneDate($id) {
global $db;
$sql_stmt = "SELECT * FROM fdatum1 WHERE id='$id'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data;
}
function insertteilnehmer($data) {
global $db;
$name = $data['name'];
$vorname = $data['vorname'];
$strasse = $data['strasse'];
$plz = intval($data['plz']);
$stadt = $data['stadt'];
$telefon = $data['telefon'];
$email = $data['email'];
$anzahl = intval($data['anzahl']);
$remarks = $data['remarks'];
$fid = intval($data['fid']);
$sql_stmt = "INSERT INTO anmeldungen (name,vorname,strasse,plz,stadt,telefon,email,anzahl,remarks,fid,angemeldet) " .
"VALUES ('$name','$vorname','$strasse','$plz','$stadt','$telefon','$email','$anzahl','$remarks','$fid', CURDATE())";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
function updateteilnehmer($data, $id) {
global $db;
$name = $data['name'];
$vorname = $data['vorname'];
$strasse = $data['strasse'];
$plz = $data['plz'];
$stadt = $data['stadt'];
$telefon = $data['telefon'];
$email = $data['email'];
$anzahl = $data['anzahl'];
$remarks = $data['remarks'];
$fid = $data['fid'];
$sql_stmt = "UPDATE anmeldungen SET " .
"name='$name', vorname='$vorname', strasse='$strasse', plz='$plz', stadt='$stadt', " .
"telefon='$telefon', anzahl='$anzahl', remarks='$remarks', angemeldet=CURDATE() WHERE id='$id'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
// Email raussenden
function sendConfirmation($subject, $to, $body) {
mb_internal_encoding('UTF-8');
$subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');
$absender = "noreply@sternwarte-welzheim.de";
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=utf-8";
$headers[] = "From: {$absender}";
$headers[] = "X-Mailer: PHP/" . phpversion();
$headers[] = "Reply-To: {$absender}";
mail($to, $subject, $body, implode("\r\n", $headers),"-f noreply@sternwarte-welzheim.de");
}
// Email raussenden
function sendInfoMail($subject, $to, $body) {
mb_internal_encoding('UTF-8');
$subject = mb_encode_mimeheader($subject, 'UTF-8', 'Q');
$absender = "noreply@sternwarte-welzheim.de";
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/html; charset=utf-8";
$headers[] = "From: {$absender}";
$headers[] = "X-Mailer: PHP/" . phpversion();
$headers[] = "Reply-To: {$absender}";
mail($to, $subject, $body, implode("\r\n", $headers),"-f noreply@sternwarte-welzheim.de");
}
// Führungsdaten eintragen (für kalender)
function putFdates($data) {
global $db;
foreach ($data as $d) {
$start = $d['start'];
$grp = $d['group'];
$sql_stmt = "INSERT IGNORE INTO fdates (dateTime, grp)" .
"VALUES ('$start','$grp')";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
}
return $result;
}
// die Daten der Führungen (fdatum) in dem Bereich start - end
// in ein Array als ISO8601 holen
// Parameter
// $start -> ab diesem Datum
// $end -> bis zu diesem Datum
// Return:
// Array mit den Daten
function getFdates($start, $end) {
global $db;
$erg = array();
$s = date('Ymd', strtotime($start));
$e = date('Ymd', strtotime($end));
$sql_sel = "SELECT * FROM fdatum1 where datum >= '$s' AND datum <= '$e'";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_row($result)) {
$entry = array();
$entry['start'] = $row[2];
$entry['uhr'] = substr($row[3],0,2);
$entry['title'] = $row[5];
$entry['count'] = getCountsPerDatefromDate($row[2]);
$erg[] = $entry;
}
return $erg;
}
function putCalEntry($data) {
global $db;
$t = $data['title'];
$d = $data['description'];
$dt = $data['start'];
$e = $data['end'];
$sql_stmt = "INSERT INTO kalender (start, end, title, description)" .
"VALUES ('$dt', '$e', '$t', '$d')";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
function getCalEntries($start, $end) {
global $db;
$erg = array();
$s = date('Ymd', strtotime($start));
$e = date('Ymd', strtotime($end));
$sql_sel = "SELECT * FROM kalender where start >= '$s' AND start <= '$e'";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
function updateCount($date, $anzahl) {
global $db;
$sql_stmt = "UPDATE fdatum1 SET count=count-$anzahl WHERE datum=$date AND count >0";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
function getOneRecordTermin($termin) {
global $db;
$erg = array();
$sql_sel = "SELECT * FROM SoFue2 WHERE DATE(wtermin)='$termin' AND status=2";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
$_POST = json_decode(file_get_contents('php://input'), true);
$erg = "";
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$cmd = $_POST["cmd"];
/*
$x = "[";
foreach ($_POST as $key => $value) {
if(gettype($value) == "array") {
$value = $value[0];
}
$x = $x . $key . " => " . $value . ",";
}
$x = $x . "]";
*/
switch ($cmd) {
case 'GET_ANMELD':
$erg = getAnmeldungen($_POST['id']);
break;
case 'GET_TEILN':
$erg = getTeilnehmer($_POST['id'], true, false);
break;
case 'GET_DATES':
$erg = getNextFuehrungen($_POST['anzahl'], $_POST['fid']);
break;
case 'UPDATE':
$erg = "Nix gut";
if ((count($_POST['ids']) != 0) and (count($_POST['values']) != 0)) {
$rows = $_POST['ids'];
$values = $_POST['values'];
$erg = updateEntries($rows, $values, $_POST['field']);
}
break;
case 'UPDATETLNFD':
$erg = updateTeilnehmer_fdate($_POST['id'], $_POST['fdatum'], $_POST['fid']);
break;
case 'DELETE_ENTRY':
$erg = deleteEntry($_POST['id']);
break;
case 'GET_COUNTS':
$erg = getCountsPerDate($_POST['id']);
break;
case 'GET_COUNTS_DATE':
$erg = getCountsPerDatefromDate($_POST['date']);
break;
case 'GET_TEILN_EMAIL':
$erg = getTeilnehmer($_POST['mail'], false, false);
break;
case 'GET_DATE_BY_EMAIL':
$erg = getTeilnehmer($_POST['mail'], false, true);
break;
case 'GET_ONE_DATE':
$erg = getOneDate($_POST['fid']);
break;
case 'GET_ALLTEILN':
$erg = getAllTeilnehmer($_POST['fdatum']);
break;
case 'SEND_MAIL':
$erg = sendConfirmation($_POST['subject'], $_POST['to'], $_POST['body']);
break;
case 'SEND_INFO_MAIL':
$erg = sendInfoMail($_POST['subject'], $_POST['to'], $_POST['body']);
break;
case 'SEND_MAIL_HTML':
$absender = "noreply@sternwarte-welzheim.de";
$erg = sendmail($_POST['subject'], $absender, $_POST['body_txt'], [], [], $_POST['to'], $_POST['body_html']);
// function sendmail($subject, $from, $body_txt, $cc=[], $bcc=[], $to=[], $body_html="") {
break;
case 'INSERT_TLN':
$erg = insertTeilnehmer($_POST['data']);
break;
case 'UPDATE_TLN':
$erg = updateTeilnehmer($_POST['data'], $_POST['id']);
break;
case 'DELETE_TLN':
$erg = deleteEntry($_POST['id']);
break;
case 'UPDATECOUNT':
$erg = updateCount($_POST['date'], $_POST['anzahl']);
break;
case 'GET_ALL_EMAILS':
$erg = getTeilnehmer(-1, true, false);
break;
case 'GET_FUEHRUNGEN':
$erg = getFuehrungen($_POST['start'], $_POST['end']);
break;
case 'PUT_FDATES':
$erg = putFdates($_POST['data']);
break;
case 'GET_FDATES':
$erg = getFdates($_POST['start'], $_POST['end']);
break;
case 'GET_BEOS':
if ( isset($_POST['what'])) {
$erg = getBEOs($_POST['id'], $_POST['onlyguides'], $_POST['what']);
} else {
$erg = getBEOs($_POST['id'], $_POST['onlyguides'], '*');
}
break;
case 'GET_ONEBEO':
$erg = getOneBEO($_POST['kurz'], $_POST['what']);
break;
case 'UPDATE_ONEBEOPW':
$erg = updateOneBEOpw($_POST['data']);
break;
case 'PUT_CALENTRY':
$erg = putCalEntry($_POST['data']);
break;
case 'GET_CALENTRIES':
$erg = getCalEntries($_POST['start'], $_POST['end']);
break;
case 'DEL_CALENTRY':
$erg = delCalentry($_POST['id']);
break;
case 'GET_FID':
$erg = getfid($_POST['fdatum']);
break;
case 'GET_MAINT':
include 'maintenance.php';
$erg = $maint;
break;
case 'GET_ONETERMIN':
$erg = getOneRecordTermin($_POST["termin"]);
break;
default:
$erg = ['error' => 'Unknown POST-Command', 'cmd' => $cmd, 'params' => $x];
}
} else {
/*
$x = "[";
foreach ($_GET as $key => $value) {
$x = $x . $key . " => " . $value . ",";
}
$x = $x . "]";
*/
$cmd = $_GET['cmd'];
switch ($cmd) {
case 'GET_FDATES':
$erg = getFdates($_GET['start'], $_GET['end']);
break;
default:
$erg = ['error' => 'Unknown GET-Command', 'params' => $x];
}
}
// header("Content-type: text/json;charset=utf-8");
echo json_encode($erg);