363 lines
12 KiB
PHP
363 lines
12 KiB
PHP
<?php
|
|
require_once("globals.php");
|
|
|
|
// ini_set('display_errors', 1);
|
|
// ini_set('display_startup_errors', 1);
|
|
// error_reporting(E_ALL);
|
|
// error_reporting(-1);
|
|
|
|
//##### gettext #####
|
|
//$lang=$_SESSION["lang"];
|
|
//putenv('LC_ALL='.$lang );
|
|
//setlocale(LC_ALL, $lang ,'UTF-8');
|
|
//bind_textdomain_codeset($lang, 'UTF-8');
|
|
//bindtextdomain($lang, PFAD.'locale/');
|
|
//textdomain($lang);
|
|
|
|
function openConnection() {
|
|
$link = mysqli_connect(DBSERVER, DBUSER, DBPASS, DBNAME);
|
|
mysqli_query($link, "SET NAMES 'utf8'");
|
|
if (!$link) {
|
|
die ("Verbindung zum Server fehlgeschlagen.");
|
|
}
|
|
if(!(mysqli_select_db($link, DBNAME))) {
|
|
die ('Konnte Datenbank nicht finden: ' . mysqli_error());
|
|
}
|
|
return $link;
|
|
}
|
|
|
|
function closeConnection() {
|
|
$link = mysqli_connect(DBSERVER, DBUSER, DBPASS, DBNAME);
|
|
if (!mysqli_close($link)) {
|
|
echo "Verb. konnte nicht geschlossen werden";
|
|
}
|
|
}
|
|
|
|
function db( $query ) {
|
|
$link = openConnection();
|
|
mysqli_set_charset($link, "UTF8");
|
|
$result = mysqli_query($link, $query);
|
|
// echo mysql_errno($link) . ": " . mysql_error($link). "\n";
|
|
closeConnection();
|
|
return $result;
|
|
}
|
|
|
|
function dbInsert($table, $fields, $values) {
|
|
$link = openConnection();
|
|
$query = "INSERT INTO " . $table . " " . $fields . " VALUES " . $values;
|
|
mysqli_query($link, $query);
|
|
closeConnection();
|
|
}
|
|
|
|
// Zu gegebenem Usernamen und Passwort die User-ID ausgeben
|
|
function getUserID($user, $pw) {
|
|
$link = openConnection();
|
|
$abfrage = "SELECT id FROM accounts WHERE login like '" . $user . "' AND pass = '" . $pw . "';";
|
|
$result = mysqli_query($link, $abfrage);
|
|
if ($data = mysqli_fetch_array($result)){
|
|
;
|
|
}
|
|
else{
|
|
$data["id"] = -1;
|
|
}
|
|
closeConnection();
|
|
return $data["id"];
|
|
}
|
|
|
|
// Zu gegebener ID die Userdaten ausgeben (Array)
|
|
function getUserData($id) {
|
|
$link = openConnection();
|
|
$abfrage = "SELECT * FROM accounts WHERE id=" . $id . ";";
|
|
$result = mysqli_query($link, $abfrage);
|
|
if($data = mysqli_fetch_array($result)){
|
|
;
|
|
}
|
|
else{
|
|
$data = array("id" => "");
|
|
}
|
|
closeConnection();
|
|
return $data;
|
|
}
|
|
|
|
|
|
/* ermittelt für mehrere TeilnehmerIDs, ob diese bei einem Turnier angemeldet sind
|
|
* $teilnehmerIDs: ein array mit teilnehmer IDs die getestet werden
|
|
* $turnierID: die ID des zu untersuchenden Turniers
|
|
*
|
|
* rückgabeWert: array mit der Struktur:
|
|
* teilnehmer_id => array(turniergruppe_id1, turniergruppe_id2, ...)
|
|
* Die teilnehmer_id zeigt auf ein Array,
|
|
* welches alle turniergruppen_IDs beinhaltet,
|
|
* in denen der Teilnehmer angemeldet ist.
|
|
*
|
|
*/
|
|
function areAngemeldet($teilnehmerIDs, $turnierID){
|
|
// turniergruppen_IDs des Turniers aus der DB lesen
|
|
$result = db('SELECT id FROM turniergruppen WHERE turnier_id = "'.$turnierID.'";');
|
|
$turniergruppen = array();
|
|
while($row = mysqli_fetch_array($result)){
|
|
$turniergruppen[] = $row["id"];
|
|
}
|
|
|
|
// tupel aus der Relation teilnehmer_turniergruppe holen, wo die turniergruppe_id-Spalte einen der Werte der turniergruppen_IDs besitzt
|
|
$db = 'SELECT id, teilnehmer_id, turniergruppe_id FROM teilnehmer_turniergruppe WHERE turniergruppe_id = ';
|
|
foreach($turniergruppen as $value){
|
|
$db .= $value .' OR turniergruppe_id = ';
|
|
}
|
|
$db = substr($db, 0, -23);
|
|
$db .=';';
|
|
$result = db($db);
|
|
$anmeldungen = array();
|
|
while($row = mysqli_fetch_array($result)){
|
|
$anmeldungen[$row["id"]] = array(
|
|
"teilnehmer_id" => $row["teilnehmer_id"],
|
|
"turniergruppe_id" => $row["turniergruppe_id"]
|
|
);
|
|
}
|
|
|
|
// überprüfe für jede teilnehmer_id, ob sie in einem der Tupel der Relation teilnehmer_turniergruppe, die oben abgerufen wurde vorkommt
|
|
$check = array();
|
|
foreach($teilnehmerIDs as $teilnehmer){
|
|
$check[$teilnehmer] = array();
|
|
foreach($anmeldungen as $anmeldung){
|
|
if($teilnehmer == $anmeldung["teilnehmer_id"]){
|
|
$check[$teilnehmer][] = $anmeldung["turniergruppe_id"];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $check;
|
|
}
|
|
|
|
/*
|
|
* vergleicht 2 Gurte miteinander
|
|
* -1 -> "kleiner" : wenn der erste angegebene Gurt kleiner dem zweiten ist, wird -1 zurückgegeben
|
|
* 1 -> "größer : wenn der erste angegebene Gurt größer dem zweiten ist, wird 1 zurückgegeben
|
|
* 0 -> "identisch" : wenn beide angegebenen Gurte identisch sind, wird 0 zurückgegeben
|
|
*/
|
|
function compareGurte($gurtLinks, $gurtRechts){
|
|
global $gurte;
|
|
$valueGurtLinks = array_keys($gurte, $gurtLinks);
|
|
$valueGurtRechts = array_keys($gurte, $gurtRechts);
|
|
|
|
$result = false;
|
|
if($valueGurtLinks[0] < $valueGurtRechts[0] )
|
|
$result = -1;
|
|
if($valueGurtLinks[0] > $valueGurtRechts[0] )
|
|
$result = 1;
|
|
if($valueGurtLinks[0] == $valueGurtRechts[0] )
|
|
$result = 0;
|
|
return $result;
|
|
}
|
|
|
|
/*
|
|
* ermittelt das Alter am Veranstaltungsdatum anhand
|
|
* $gebDatum: des Geburtsdatums und
|
|
* $vDatum: des Veranstaltungsdatums
|
|
*/
|
|
function getAlter($gebdatum, $vDatum){
|
|
$age = 0;
|
|
$age = floor(($vDatum - $gebdatum) / 10000);
|
|
return $age;
|
|
}
|
|
|
|
// Datumformat von Englisch auf Deutsch ändern
|
|
function USdatetoDE($datum){
|
|
$newdatum = new DateTime($datum);
|
|
return $newdatum->Format('d.m.Y');
|
|
}
|
|
|
|
// Datumformat von Deutsch auf Englisch ändern
|
|
function DEdatetoUS($datum){
|
|
$newdatum = new DateTime($datum);
|
|
return $newdatum->Format('Y-m-d');
|
|
}
|
|
function datetocal($datum){
|
|
$newdatum = new DateTime($datum);
|
|
return $newdatum->Format('Ymd');
|
|
}
|
|
|
|
function diff_date($datum1, $datum2){
|
|
$datum1asArray = explode('-',$datum1);
|
|
$year1 = intval($datum1asArray[0]); $month1 = intval($datum1asArray[1]); intval($day1 = $datum1asArray[2]);
|
|
$datum2asArray = explode('-',$datum2);
|
|
$year2 = intval($datum2asArray[0]); $month2 = intval($datum2asArray[1]); intval($day2 = $datum2asArray[2]);
|
|
$result = -1;
|
|
if($year1<$year2){
|
|
$result = -1;
|
|
}
|
|
elseif($year1>$year2){
|
|
$result = 1;
|
|
}
|
|
elseif($year1==$year2){
|
|
if($month1<$month2){
|
|
$result=-1;
|
|
}
|
|
elseif($month1>$month2){
|
|
$result=1;
|
|
}
|
|
elseif($month1==$month2){
|
|
if($day1 < $day2){
|
|
$result = -1;
|
|
}
|
|
elseif($day1 > $day2){
|
|
$result = 1;
|
|
}
|
|
elseif($day1==$day2){
|
|
$result = 0;
|
|
}
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/*
|
|
* ermittelt alle Gruppen in die ein Teilnehmer angemeldet werden kann
|
|
* Parameter:
|
|
* teilnehmer : ein Array mit allen Daten des Teilnehmers (id => array(name, gebdatum, gurt usw.)
|
|
* gruppen : ein Array mit allen Gruppen die durchsucht werden sollen
|
|
* (id => array (turnier_id, geschlecht, altervon/bis usw.))
|
|
* vDatum: das Veranstaltungsdatum (benötigt für das ermitteln des alters)
|
|
* disziplin: disziplin für die der teilnehmer angemeldet werden soll
|
|
* Rückgabeparameter: ein Array mit allen gefunden GruppenIDs
|
|
*/
|
|
function searchForGroup($teilnehmer, $gruppen, $vDatum, $disziplin){
|
|
$result = array();
|
|
$alter = getAlter((int)(str_replace("-","",$teilnehmer["gebDatum"])) , (int)(str_replace("-","",$vDatum)));
|
|
$gurt = $teilnehmer["gurt"];
|
|
|
|
foreach ($gruppen as $key => $value){
|
|
if ( //überprüfe geschlecht, gurt, disziplin und alter von Teilnehmer und Gruppe
|
|
$teilnehmer["geschlecht"] == $value["geschlecht"] &&
|
|
((compareGurte($gurt, $value["gurtvon"]) == 1) || (compareGurte($gurt, $value["gurtvon"]) == 0)) &&
|
|
((compareGurte($gurt, $value["gurtbis"]) == -1) || (compareGurte($gurt, $value["gurtbis"]) == 0)) &&
|
|
$value["disziplin"] == $disziplin &&
|
|
$alter >= $value["altervon"] &&
|
|
$alter <= $value["alterbis"]
|
|
)
|
|
$result[] = $key; // wenn die Gruppe adäquat ist -> füge die GruppenID zur Ausgabe hinzu
|
|
|
|
//debugging - nicht löschen - wirklich nicht!
|
|
/*
|
|
echo("ist: " . $teilnehmer["geschlecht"] . " = " . $value["geschlecht"] . " ? -> " . (($teilnehmer["geschlecht"]==$value["geschlecht"]) ? " ja" : "nein" )); echo("</br>");
|
|
echo("ist: ". $value["gurtvon"] . " <= " . $gurt . " <= " . $value["gurtbis"] . " ? -> " .
|
|
(
|
|
(
|
|
((compareGurte($gurt, $value["gurtvon"]) == 1) || (compareGurte($gurt, $value["gurtvon"]) == 0))
|
|
&&
|
|
((compareGurte($gurt, $value["gurtbis"]) == -1) || (compareGurte($gurt, $value["gurtbis"]) == 0))
|
|
) ? "ja" : "nein"
|
|
)
|
|
);
|
|
echo("</br>");
|
|
echo("ist: ". $value["altervon"] . " <= " . $alter . " <= " . $value["alterbis"] . " ? -> " . (($alter <= $value["alterbis"] && $alter >= $value["altervon"]) ? "ja" : "nein")); echo("</br>");
|
|
echo("ist: " . $value["disziplin"] . " = " . $disziplin . " ? -> " . (($value["disziplin"]==$disziplin) ? "ja" : "nein")); echo("</br></br>");
|
|
*/
|
|
// debugging ende
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function validateTeilnehmerAnGruppe($teilnehmer, $gruppe){
|
|
$isValid = false;
|
|
|
|
foreach($gruppe as $key => $value){
|
|
$turnier_id = $value["turnier"]["id"];
|
|
$gruppen_id = $key;
|
|
}
|
|
|
|
$result = db("SELECT veranstaltungsDatum FROM turniere WHERE id=".$turnier_id." LIMIT 1;");
|
|
while($row = mysqli_fetch_array($result)){
|
|
$vDatum = $row["veranstaltungsDatum"];
|
|
}
|
|
$alter = getAlter((int)(str_replace("-","",$teilnehmer["gebDatum"])) , (int)(str_replace("-","",$vDatum)));
|
|
|
|
if ( //überprüfe geschlecht, gurt und alter von Teilnehmer und Gruppe
|
|
$teilnehmer["geschlecht"] == $gruppe[$gruppen_id]["geschlecht"] &&
|
|
((compareGurte($teilnehmer["gurt"], $gruppe[$gruppen_id]["gurtvon"]) == 1) || (compareGurte($teilnehmer["gurt"], $gruppe[$gruppen_id]["gurtvon"]) == 0)) &&
|
|
((compareGurte($teilnehmer["gurt"], $gruppe[$gruppen_id]["gurtbis"]) == -1) || (compareGurte($teilnehmer["gurt"], $gruppe[$gruppen_id]["gurtbis"]) == 0)) &&
|
|
$alter >= $gruppe[$gruppen_id]["altervon"] &&
|
|
$alter <= $gruppe[$gruppen_id]["alterbis"]
|
|
)
|
|
$isValid = true;
|
|
else
|
|
$isValid = false;
|
|
|
|
/*echo("teilnehmer geschlecht:" . $teilnehmer["geschlecht"] ." vs ". $gruppe[$gruppen_id]["geschlecht"] ."</br>");
|
|
echo("altervon:" . $gruppe[$gruppen_id]["altervon"] . " ? ". $alter . " ? " . $gruppe[$gruppen_id]["alterbis"] . "</br>");
|
|
|
|
echo("gurtvon:" . $gruppe[$gruppen_id]["gurtVon"] . " ? ". $teilnehmer["gurt"] . " ? " . $gruppe[$gruppen_id]["gurtBis"] . "</br>");
|
|
*/
|
|
return $isValid;
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
* meldet einen Teilnehmer in einer Gruppe an
|
|
* teilnehmerID : die ID des Teilnehmers
|
|
* gruppenID : die ID der Gruppe
|
|
*/
|
|
function anmelden($teilnehmerID, $gruppenID){
|
|
$datetime = date("Y-m-d H:i:s");
|
|
db('INSERT INTO teilnehmer_turniergruppe (id, teilnehmer_id, turniergruppe_id, timestamp) VALUES (NULL, '.$teilnehmerID.', '.$gruppenID.', "'.$datetime.'")');
|
|
}
|
|
|
|
/*
|
|
* meldet einen Teilnehmer von einer Disziplin für ein Turnier ab
|
|
* teilnehmerID : die ID des Teilnehmers
|
|
*
|
|
*/
|
|
function abmelden($teilnehmerID, $disziplin, $turnierID){
|
|
|
|
// liefert die GruppenIDs, des Turniers mit $turnierID, deren Disziplin gleich $disziplin ist
|
|
$result = db('SELECT id, disziplin FROM turniergruppen WHERE turnier_id = "'.$turnierID.'";');
|
|
$turniergruppen = array();
|
|
while($row = mysqli_fetch_array($result)){
|
|
if (strtolower($row["disziplin"]) == strtolower($disziplin))
|
|
$turniergruppen[] = $row["id"];
|
|
}
|
|
|
|
//liefert alle anmeldungen des teilnehmers mit der $teilnehmerID
|
|
$db = 'SELECT id, teilnehmer_id, turniergruppe_id FROM teilnehmer_turniergruppe WHERE teilnehmer_id = "'.$teilnehmerID.'";';
|
|
$result = db($db);
|
|
while($row = mysqli_fetch_array($result)){
|
|
// teilnehmer abmelden, wenn er für die $disziplin im $turnierID angemeldet ist
|
|
if(in_array($row["turniergruppe_id"],$turniergruppen)){
|
|
//echo("Lösche nun das tupel: ID: " . $row["id"] ." TeilnehmerID: ". $row["teilnehmer_id"] ." GruppenID". $row["turniergruppe_id"] . "</br>");
|
|
db('DELETE FROM teilnehmer_turniergruppe WHERE teilnehmer_turniergruppe.teilnehmer_id = "'.$teilnehmerID.'"AND teilnehmer_turniergruppe.turniergruppe_id = "'.$row["turniergruppe_id"].'";');
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Shuffles an array, preserving key associations
|
|
* Works on the array itself, hence it has no return value;
|
|
*/
|
|
function shuffle_with_keys(&$array){
|
|
$aux = array();
|
|
$keys = array_keys($array);
|
|
array_shuffle($keys);
|
|
foreach($keys as $key) {
|
|
$aux[$key] = $array[$key];
|
|
unset($array[$key]);
|
|
}
|
|
$array = $aux;
|
|
}
|
|
|
|
/**
|
|
* Shuffles an arry using the Fisher-Yates Algorithm
|
|
* Gets a much better randomized result then shuffle($array)
|
|
*/
|
|
function array_shuffle(&$array){
|
|
$i = count($array);
|
|
|
|
while(--$i){
|
|
$j = mt_rand(0,$i);
|
|
if($i != $j){
|
|
$tmp = $array[$j];
|
|
$array[$j] = $array[$i];
|
|
$array[$i] = $tmp;
|
|
}
|
|
}
|
|
} |