<?php
# Hier werden die Anfragen vom Javascript verarbeitet und die
# Datenbank bedient

$db = null;

//include '../../dbaseconf.php';
include '../../../config_stern.php';
include '../../../phpmailer/dosendmail.php';

$table = 'SoFue2';


function getFromDbase($db, $query, $single) {
    $result = mysqli_query($db,$query)  or die (mysqli_error($db));
    $erg = array();
    if(mysqli_num_rows($result)) {
        while($row = mysqli_fetch_assoc($result)) {
            $erg[] = $row;
        }
    }
    if($single == true) {
        return ($erg[0]);
    } else {
        return($erg);
    }
}

function cudDbase($db, $query) {
    return(mysqli_query($db,$query) or die (mysqli_error($db)));
}

// Ein Record holen mit der ID $id holen nd kompleet übermitteln
function getOneRecord($db,$id)  {
	global $table;

	$query = "select * from $table where id = $id";
	return(getFromDbase($db,$query,true));
}

// Ein Record holen mit dem Wunschtermin als Auswahl
function getOneRecordTermin($db,$termin)  {
    global $table;
    
    $query = "select * from $table where DATE(wtermin) = '$termin' and status = 2";
    return(getFromDbase($db,$query,true));
}

// Alle Records mit übergebener WHERE-clause übergeben, sortiert in aufsteigender 
// Zeitfolge (Führungstermine als Zeitfolge)
// Es werden maximal $cout Records übergeben
function getRecords($db, $st, $termin, $anz, $pagnbr) {
	global $table;
	
	$response = new stdClass();
	$ergs = array();

	$lastdate = new DateTime();
	$lastdate = $lastdate->sub(new DateInterval('P9M'));
    $lastdate = $lastdate->format('Y-m-d');
    if($st == 4) {
	    $where ="where stattgefunden = 1 and deleted = 0 ";
	} else {
    	$where = "where status = '$st' and deleted = 0";
    	if ($termin == 'neu') {
    	    $where = $where . " and wtermin >= now()";
    	}
	}
	
	// Anzahl der Records holen
	$query = "select count(*) as count from $table $where ";
	$row = getFromDbase($db,$query,true);
	$count = $row['count'];
    
	// Anzahl der Seiten ausrechnen
	$totalpages = ceil($count/$anz);
	// Falls die angeforderte Seit > als die ANzahl der Seiten ist, die letzte Seite übergeben
	if($pagnbr > $totalpages) $pagnbr = $totalpages;
	// Start-Record berechnen
	$start = $anz * ($pagnbr-1);
	if($start <0) {
	    $start = 0;
	}
	$where = $where . " and DATE(wtermin) >= '$lastdate'";
    $query = "select * from $table $where order by wtermin desc limit $start,$anz";    
	$rows = getFromDbase($db, $query, false);
		
	$response->page = $pagnbr;
	$response->total = $totalpages;								// Es wird immer 1 Page übergeben
	$cnt = 0;
	foreach($rows as $row) {
		$response->rows[$cnt]['id'] = $row['id'];
		$response->rows[$cnt]['cell'] = $row;
		$cnt++;
	}
	$response->records = $count;
	return ($response);
}

# string substr ( string $string , int $start [, int $length ] )
# Beo-Daten holen
function  getBeos($db, $what, $cond) {
    $retur = array();
    if($cond == "") {
        $query = "select $what from beos order by $what";
    } else {
        $a = strpos($cond,'empty');
        if ( $a !== false) {
            $b = substr($cond,0,$a);
            $query = "select $what from beos where $b '' order by $what";
        } else {
            $query = "select $what from beos where $cond order by $what";
        }
    }
#    echo $query;
    $rows = getFromDbase($db, $query, false);
    foreach($rows as $row) {
        $retur[] = $row[$what];
    }
    return ($retur);
}

# Statistikdaten für das laufende (oder ein altes) Jahr holen und übergeben
# Ausgaben: JSON:
# { year: 2018, 
#       data:[ 
#           { month: 1, angefragt: 10, zugesagt: 7,  abgesagt: 3, stattgefunden: 6 },
#           { month: 2, angefragt: 8,  zugesagt: 6,  abgesagt: 2, stattgefunden: 5 },
#           { month: 3, angefragt: 23, zugesagt: 20, abgesagt: 3, stattgefunden: 15 },
#           ...
#           { month: 12, angefragt: 34, zugesagt: 22, abgesagt: 12, stattgefunden: 10 },
function getStatistik($db, $year) {
    
}


# Daten eines BEO holen, mit Name als Suchkriterium
function getOneBEO($db, $name) {
    $query = "select * from beos where name = '$name'";
    return getFromDbase($db, $query, true);
}
    
function updateEntry($db, $post) {     
	global $table;
	$oldinhalt = getOneRecord($db, $post['id']);        
	$data = "mitarbeiter='" . $post['mitarbeiter'] .
	   "', status='" . $post['status'] . 
	   "', bemerkung='" . $post['bemerkung'] .
	   "', wtermin='" . $post['wtermin'] .
	   "', atermin='" . $post['atermin'] .
	   "', allwett=''" . 
	   ", erledigt_datum='" . $post['erledigt_datum'] . "'";
	$id = $post['id'];
    $query = "update $table set $data where id='$id'";
    $ret = cudDbase($db, $query);
    $newinhalt = getOneRecord($db, $post['id']);
    $ma = $post['mitarbeiter'];
    $oldTermin = $oldinhalt['wtermin'];
    return $ret;
}

function updateAfter($db,$post) {
    global $table;
    $oldinhalt = getOneRecord($db, $post['id']);
    $data = "stattgefunden='" . $post['stattgefunden'] .
    "', anzahl_echt='" . $post['besucher'] .
    "', remarks='" . $post['remark'] .
    "', bezahlt='" . $post['bezahlt'] . "'";
    // if (!empty($post['wtermin'])) {
    //     $data .= ", wtermin='" . $post['wtermin'] . "'";
    //     $ma = $oldInhalt['mitarbeiter'];
    //     sendMailTo($ma, $oldinhalt, $post['wtermin'], "Wunsch");
    // }
    if (!empty($post['status'])) {
        $data .= ", status='" . $post['status'] . "'";
    }
    $id = $post['id'];
    $query = "update $table set $data where id='$id'";
    $ret = cudDbase($db, $query);
    return($ret);
}

function deleteEntry($db, $id) {
	global $table;
	$query = "update $table  set deleted=true where id='$id'";
    return cudDbase($db, $query);
}

function getDBdata() {
    global $host, $dbase, $user, $pass;

	$erg =  "HOST: >" . $host . "<&nbsp;&nbsp;&nbsp;Dbase: >" . $dbase . "<&nbsp;&nbsp;&nbsp;user/pass: >" . $user . "/" . $pass . "<";
	return $erg;
}


function findBeoVorname($who) {
    global $db;
    $names = explode(",",$who);
    $erg = getbeos($db,'vorname',"name='".$names[0]."'");
    return ($erg[0]);
}

function findBeoEmail($who) {
    global $db;
    $names = explode(",",$who);
    $erg = getbeos($db,'email_1',"name='".$names[0]."'");
    return ($erg[0]);
}


function wterminstr($t) {
    $tage = array(
        "So",
        "Mo",
        "Di",
        "Mi",
        "Do",
        "Fr",
        "Sa"
    );
    $dati = strtotime($t);
    $dt = $tage[date("w",$dati)] . ", " . date('d.m.Y H:i',$dati);
    return $dt;
}
function sendMail2Beo($ma, $termin) {
    $dt = wterminstr($termin);
    $body = "Hallo " . findBeoVorname($ma) .",
 
    vielen Dank für die Bereitschaft, die Sonderführung am {$dt} zu übernehmen.
    Bitte den Termin nicht vergessen und bitte ggf. auch das Teammitglied, das die
    Führung mitmacht, informieren. 
    
    Der Termin wurde in den Sternwartenkalender eingetragen.
    
    Die Kontaktdaten sind auf der Sonderführungsseite ( https://sternwarte-welzheim.de/intern/sofue/sofue.php ) zu finden.
    
    Viele Grüße
    Reinhard

    Diese Meldung wurde automatisch erzeugt. Es kann nicht geantwortet werden.";
    
    $betreff = "Vereinbarte Sonderführung am " .$dt;
    $absender   = "noreply@sternwarte-welzheim.de";
    sendmail($betreff, $absender, $body, [], ['rexfue@gmail.com'], [findBeoEmail($ma)]);
}

function sendMailZusage($to, $mitarbeiter, $termin) {
    $dt = wterminstr($termin);
    $betreff    = "ZUSAGE - Sternwartenführung am {$dt} Uhr";
    $absender   = "anmeldung@sternwarte-welzheim.de";
    $ge1 = ($mitarbeiter['gender'] == 'm') ? "unser ehrenamtlicher Mitarbeiter, Herr" : "unsere ehrenamtliche Mitarbeiterin, Frau";
    $ge2 = ($mitarbeiter['gender'] == 'm') ? "ihn" : "sie";
    $ge3 = ($mitarbeiter['gender'] == 'm') ? "Herrn" : "Frau";
    $body = "
    Guten Tag,
    
    für Ihren Wunschtermin, {$dt} Uhr, hat sich {$ge1} {$mitarbeiter['vorname']} {$mitarbeiter['name']} bereit erklärt, 
    die Sonderführung zu übernehmen. Sie erreichen {$ge2} über die e-mail-Adresse: {$mitarbeiter['email_1']}

    Um nähere Besuchsmodalitäten zu klären, bitten wir Sie, mit {$ge3} {$mitarbeiter['name']} Kontakt aufzunehmen.

    Wir bitten Sie, die Spende in Höhe von €50.00 auf unten aufgeführtes Konto zu überweisen oder in bar zur Führung mitzubringen.

    Gesellschaft zur Förderung des Planetariums Stuttgart und der Sternwarte Welzheim e.V.
    BANKVERBINDUNG: Deutsche Bank AG Stuttgart
    IBAN DE18 6007 0070 0122 0383 00
    BIC: DEUTDESSXXX


    Mit sternfreundlichen Grüßen
    Reinhard X. Fürst
    Sternwarte Welzheim
    ";
    sendmail($betreff, $absender, $body, [$mitarbeiter['email_1']], ['rexfue@gmail.com'], [$to]);
}

function sendMail2Liste($to, $erg) {
    $betreff    = "Anfrage Sonderführung am {$erg['wtermin']}";
    $absender   = "sonderfuehrung@sternwarte-welzheim.de";
    $body = "
    Liebe BEOs,
    
    wer kann folgende Sonderführung übernehmen?

    Viele Grüße
    Reinhard
    
    ---------------------------------------------------------------------------------------------------";

     $body = $body . "
    Name, Vorname: " . $erg['name'] . " " . $erg['vorname'] . "
    Verein / Organisation : " . $erg['verein'] . "
    Wunsch - Termin: " . $erg['wtermin'] . "
    Teilnehmerzahl ca.: " . $erg['anzahl'] . " 

    Weitere Fragen oder Mitteilungen: " . $erg['mitteilung'] . " 
    Spendenbescheinigung: " . $erg['spende'] . "
    ---------------------------------------------------------------------------------------------------";
    sendmail($betreff, $absender, $body, [], [], [$to]);
}

// Sonderführung in den Kalender eintragen
function put2kalender($db, $data, $termin, $ma) {
    $start = substr($termin,0,16);
    $title = "WK, SF " . $data['name'] . ", " . $ma;
    $sql = "INSERT into kalender (start, end, title, description) VALUES ('" . $start . "', DATE_ADD('" . $start . "',INTERVAL 2 HOUR), '" . $title . "', '')";
    $erg = cudDbase($db, $sql);
    $mist = 23;
}


// Hier gehts dann los:
// Alle Paramater aus dem Ajax-Call auslesen
// Mögliche Aufrufe:
/*
 * cmd=GET param=ID id=5					bringt das eine Record mit ID=5
 * cmd=GET param=STATUS staus=offen			bringt ALLE records mit stautus='offen' in zeitlich absteigender Reihenfoleg
 */

$erg = "";
$cmd = $_POST["cmd"];

/*
$x = "# ";
foreach ($_POST as $key => $value) {
    $x = $x . $key . "  " . $value . "\n";
}
$x = $x . '# ';
echo $x;
*/

switch ($cmd) {
	case 'GET_ONE':
    			$erg = getOneRecord($db, $_POST["id"]);
			break;
	case 'GET_ONETERMIN':
	    $erg = getOneRecordTermin($db, $_POST["termin"]);
	    break;
	case 'GET_MANY':		
			$st = $_POST['status'];
			$anzahl = $_POST['rows'];
			$page = $_POST['page'];
			$termin = $_POST['termin'];
			$erg = getRecords($db,$st, $termin ,$anzahl,$page);
			break;
	case 'GET_BEOS':
	       $erg = getBeos($db,$_POST['what'],$_POST['cond']);
//	       echo '#' . $erg ;
	       break;
	case 'GET_ONEBEO':
	    $erg = getOneBEO($db,$_POST['name']);
	    //	       echo '#' . $erg ;
	    break;
	    #	case GET_FUEH:
#			$erg = getFuehrung_findet_statt($db);
#			break;
	case 'GET_STAT':
#	    $erg = getStatistik($db,$_POST['year']);
	    break;
	case 'UPDATE':
		  $erg = updateEntry($db, $_POST);
		  break;
	case 'UPDATEAFTER':
	    $erg = updateAfter($db, $_POST);
	    break;
	case 'DELETE':
		  $erg = deleteEntry($db, $_POST['id']);
		  break;
    case 'SENDMAILZUSAGE':
//        function sendMailZusage($to, $mitarbeiter, $termin) {
        $erg = getOneRecord($db, $_POST["id"]);
        $names = explode(",",$_POST['mitarbeiter']);
        $ma = getOneBEO($db, $names[0]);
        sendMailZusage($erg['email'], $ma, $_POST['termin']);
        break;  
	case 'SENDMAIL2BEO':
//        function sendMail2Beo($ma, $termin) {
	    sendMail2beo($_POST['ma'], $_POST['termin']);
	    break;
    case 'SENDMAIL2LISTE':
        $erg = getOneRecord($db, $_POST["id"]);
        sendMail2Liste($_POST['to'],$erg);
        break;
    case 'PUT2KALENDER':
        $erg = getOneRecord($db, $_POST["id"]);
        put2kalender($db, $erg, $_POST['termin'], $_POST['mitarbeiter']);
        break;
	case 'SHOWDB':
	    $erg = getDBdata();
	    break; 
}
header("Content-type: text/json;charset=utf-8");

echo json_encode($erg);

?>

