573 lines
18 KiB
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);
|
|
|
|
|
|
|