From 19a5443216257120216dad4c335b6292f857b8bf Mon Sep 17 00:00:00 2001 From: Debian Date: Sun, 8 Oct 2023 12:41:03 +0200 Subject: [PATCH] =?UTF-8?q?Helfersystem=20nach=203=20Conventions=20Autor?= =?UTF-8?q?=20gr=C3=B6=C3=9Ftenteils=20Ralf=20=20Changes=20to=20be=20commi?= =?UTF-8?q?tted:=20new=20file:=20=20=20INSTALL=20new=20file:=20=20=20html/?= =?UTF-8?q?Admin.php=20new=20file:=20=20=20html/AdminAlleSchichten.php=20n?= =?UTF-8?q?ew=20file:=20=20=20html/AdminDienste.php=20new=20file:=20=20=20?= =?UTF-8?q?html/AdminHelferUebersicht.php=20new=20file:=20=20=20html/Admin?= =?UTF-8?q?MeineSchichten.php=20new=20file:=20=20=20html/AdminUserdaten.ph?= =?UTF-8?q?p=20new=20file:=20=20=20html/AlleSchichten.php=20new=20file:=20?= =?UTF-8?q?=20=20html/Ausdrucke.php=20new=20file:=20=20=20html/Bilder/Atte?= =?UTF-8?q?ntion=5FSign.svg=20new=20file:=20=20=20html/Bilder/Info.jpeg=20?= =?UTF-8?q?new=20file:=20=20=20html/Bilder/More.jpeg=20new=20file:=20=20?= =?UTF-8?q?=20html/Bilder/PfeilRechts2.jpeg=20new=20file:=20=20=20html/Bil?= =?UTF-8?q?der/PfeilRechts2.png=20new=20file:=20=20=20html/Bilder/PfeilRun?= =?UTF-8?q?ter.jpeg=20new=20file:=20=20=20html/Bilder/calendar=5Flines.png?= =?UTF-8?q?=20new=20file:=20=20=20html/Bilder/calendar=5Flines1.png=20new?= =?UTF-8?q?=20file:=20=20=20html/Bilder/dot.png=20new=20file:=20=20=20html?= =?UTF-8?q?/CreateHelfer.php=20new=20file:=20=20=20html/DecodeToken.php=20?= =?UTF-8?q?new=20file:=20=20=20html/EmailZuToken.php=20new=20file:=20=20?= =?UTF-8?q?=20html/Info.php=20new=20file:=20=20=20html/Kalender-all.html?= =?UTF-8?q?=20new=20file:=20=20=20html/Kalender.php=20new=20file:=20=20=20?= =?UTF-8?q?html/MeineSchichten.php=20new=20file:=20=20=20html/ReadLog.php?= =?UTF-8?q?=20new=20file:=20=20=20html/SQL.php=20new=20file:=20=20=20html/?= =?UTF-8?q?UrlLogin.php=20new=20file:=20=20=20html/Userdaten.php=20new=20f?= =?UTF-8?q?ile:=20=20=20html/=5Fcrypt.php=20new=20file:=20=20=20html/=5Flo?= =?UTF-8?q?gin.php=20new=20file:=20=20=20html/css/style=5Fcommon.css=20new?= =?UTF-8?q?=20file:=20=20=20html/css/style=5Fdesktop.css=20new=20file:=20?= =?UTF-8?q?=20=20html/css/style=5Fmobile.css=20new=20file:=20=20=20html/cs?= =?UTF-8?q?s/style=5Fprint.css=20new=20file:=20=20=20html/data/api-full.ph?= =?UTF-8?q?p=20new=20file:=20=20=20html/data/api-helfer.php=20new=20file:?= =?UTF-8?q?=20=20=20html/index.php=20new=20file:=20=20=20html/js/helferdb.?= =?UTF-8?q?js=20new=20file:=20=20=20html/js/jquery-3.7.1.min.js=20new=20fi?= =?UTF-8?q?le:=20=20=20html/konfiguration.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- INSTALL | 32 ++ html/Admin.php | 138 +++++ html/AdminAlleSchichten.php | 503 +++++++++++++++++ html/AdminDienste.php | 360 ++++++++++++ html/AdminHelferUebersicht.php | 124 +++++ html/AdminMeineSchichten.php | 288 ++++++++++ html/AdminUserdaten.php | 188 +++++++ html/AlleSchichten.php | 463 ++++++++++++++++ html/Ausdrucke.php | 167 ++++++ html/Bilder/Attention_Sign.svg | 71 +++ html/Bilder/Info.jpeg | Bin 0 -> 16593 bytes html/Bilder/More.jpeg | Bin 0 -> 4887 bytes html/Bilder/PfeilRechts2.jpeg | Bin 0 -> 19511 bytes html/Bilder/PfeilRechts2.png | Bin 0 -> 42480 bytes html/Bilder/PfeilRunter.jpeg | Bin 0 -> 24729 bytes html/Bilder/calendar_lines.png | Bin 0 -> 156 bytes html/Bilder/calendar_lines1.png | Bin 0 -> 528 bytes html/Bilder/dot.png | Bin 0 -> 272 bytes html/CreateHelfer.php | 178 ++++++ html/DecodeToken.php | 46 ++ html/EmailZuToken.php | 218 ++++++++ html/Info.php | 13 + html/Kalender-all.html | 198 +++++++ html/Kalender.php | 194 +++++++ html/MeineSchichten.php | 352 ++++++++++++ html/ReadLog.php | 62 +++ html/SQL.php | 935 ++++++++++++++++++++++++++++++++ html/UrlLogin.php | 95 ++++ html/Userdaten.php | 164 ++++++ html/_crypt.php | 61 +++ html/_login.php | 90 +++ html/css/style_common.css | 80 +++ html/css/style_desktop.css | 10 + html/css/style_mobile.css | 10 + html/css/style_print.css | 19 + html/data/api-full.php | 57 ++ html/data/api-helfer.php | 55 ++ html/index.php | 163 ++++++ html/js/helferdb.js | 46 ++ html/konfiguration.php | 52 ++ 40 files changed, 5432 insertions(+) create mode 100644 INSTALL create mode 100644 html/Admin.php create mode 100644 html/AdminAlleSchichten.php create mode 100644 html/AdminDienste.php create mode 100644 html/AdminHelferUebersicht.php create mode 100644 html/AdminMeineSchichten.php create mode 100644 html/AdminUserdaten.php create mode 100644 html/AlleSchichten.php create mode 100644 html/Ausdrucke.php create mode 100644 html/Bilder/Attention_Sign.svg create mode 100644 html/Bilder/Info.jpeg create mode 100644 html/Bilder/More.jpeg create mode 100644 html/Bilder/PfeilRechts2.jpeg create mode 100644 html/Bilder/PfeilRechts2.png create mode 100644 html/Bilder/PfeilRunter.jpeg create mode 100644 html/Bilder/calendar_lines.png create mode 100644 html/Bilder/calendar_lines1.png create mode 100644 html/Bilder/dot.png create mode 100644 html/CreateHelfer.php create mode 100644 html/DecodeToken.php create mode 100644 html/EmailZuToken.php create mode 100644 html/Info.php create mode 100644 html/Kalender-all.html create mode 100644 html/Kalender.php create mode 100644 html/MeineSchichten.php create mode 100644 html/ReadLog.php create mode 100644 html/SQL.php create mode 100644 html/UrlLogin.php create mode 100644 html/Userdaten.php create mode 100644 html/_crypt.php create mode 100644 html/_login.php create mode 100644 html/css/style_common.css create mode 100644 html/css/style_desktop.css create mode 100644 html/css/style_mobile.css create mode 100644 html/css/style_print.css create mode 100644 html/data/api-full.php create mode 100644 html/data/api-helfer.php create mode 100644 html/index.php create mode 100644 html/js/helferdb.js create mode 100644 html/konfiguration.php diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..5eea420 --- /dev/null +++ b/INSTALL @@ -0,0 +1,32 @@ +Installation: + +Install a "LAMP" server via your distribution: +* web server + + with php capabilities +* sql database (mariadb) +* email server/ability to send emails (optional) + +Example for debian: +webserver: + apt-get install apache2 openssl python3-certbot-apache php-mysql php-json +sql database: + apt-get install mariadb-server mariadb-client + +Copy the contents of the html directory into your webserver tree + +create database and database user + +restore database from backup: +TODO + +edit konfiguration.php and adapt to your installation + +login with admin user: admin@admin.de pw: 4024ae463a4ef9ff455705afe54f83c3 + + + + + + + + diff --git a/html/Admin.php b/html/Admin.php new file mode 100644 index 0000000..758484d --- /dev/null +++ b/html/Admin.php @@ -0,0 +1,138 @@ +'; + exit; +} +?> + + + + Admin Drop am See + + + + + + + + +"; +if(isset($_SESSION["AliasHelferID"])) +{ + $AliasHelferID = $_SESSION["AliasHelferID"]; +} + +//echo "AliasHelfer=$AliasHelferID
"; + +if(isset($_POST["AliasHelfer"])) +{ + $AliasHelferID = $_POST["AliasHelfer"]; + //echo "post
"; +} + +if($AliasHelferID!=0) +{ + $_SESSION["AliasHelferID"]=$AliasHelferID; +} +//echo "AliasHelfer=$AliasHelferID
"; + +$db_erg = Helferdaten($db_link,$HelferID); +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + $HelferName=$zeile['Name']; + $HelferIsAdmin=$zeile['Admin']; +} + +?> + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  Admin HelferDB +
+ Dienste und Schichten verwalten +
+ Seite zur Helfer selbst-Registrierung +
+ Helfer per Link einladen +
+ Helferübersicht +
Helfer als Admin ändern:
+
+ +
Helferdaten ändern
Schichten Anzeigen/Löschen
Schichten Hinzufügen
Admin Kalenderansicht
Ausdrucke
Ausdruck Schichten
+

Dienst: z.B. Badgekontrolle Eingang A. Schicht: ein Dienst zu einer bestimmten Zeit zB 9-12 Uhr +

+ + + diff --git a/html/AdminAlleSchichten.php b/html/AdminAlleSchichten.php new file mode 100644 index 0000000..e9ac7a9 --- /dev/null +++ b/html/AdminAlleSchichten.php @@ -0,0 +1,503 @@ +'; + exit; +} +?> + + + + Helfer Drop am See Alle Schichten + + + + + + + + + + + +
+". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoMeineSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer = $zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + +} + + +if(isset($_GET['InfoAlleSchichtID'])) +{ + $InfoAlleSchichtID = $_GET['InfoAlleSchichtID']; + UNSET($InfoMeineSchichtID); + //echo "". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoAlleSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer=$zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + + + + // Beteiligte Helfer Holen + $db_erg = BeteiligteHelfer($db_link,$InfoAlleSchichtID); + + + $x=0; + + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + $MitHelferID[$x] = $zeile['HelferID']; + $MitHelfer[$x] = $zeile['Name']; + $MitHelferHandy[$x]= $zeile['Handy']; + $x++; + } + + +} + +if(isset($_GET['ZeitBereich'])) +{ + $ZeitBereich = $_GET['ZeitBereich']; +} +else +{ + $ZeitBereich = 1; +} + +function HelferAuswahlButton($db_link,$AliasHelferID){ +echo 'Helfer wählen:
'; +} + +if(isset($_POST['AliasHelfer'])) { + $AliasHelferID=$_POST['AliasHelfer']; +}elseif(isset($_SESSION["AliasHelferID"])){ + $AliasHelferID = $_SESSION["AliasHelferID"]; +}else{ + HelferAuswahlButton($db_link,$AliasHelferID); +exit; +} +HelferAuswahlButton($db_link,$AliasHelferID); + +$_SESSION["AliasHelferID"]=$AliasHelferID; +$AdminID = $_SESSION["AdminID"]; + +$db_erg=Helferdaten($db_link,$HelferID); +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + $HelferName=$zeile['Name']; +} + +// Helferliste Anzeigen +//////////////////////////////////////////////////////// + +?> + + + + +
+'); + } + else + { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) + { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + + +} + +if(isset($_POST['minusschicht'])) { +// Mich aus Schicht entfernen + $messages = []; + + $SchichtID = $_POST['minusschicht']; + + if(empty($messages)) + { + // Helfer aus Schicht entfernen + $db_erg = HelferVonSchichtLoeschen_SchichtID($db_link,$AliasHelferID,$SchichtID,$AdminID); + + } + else + { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) + { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + + + +} + +/// Ausgabe auf Deutsch umstellen +///////////////////////////////////////////////////////////////////////// + + DatenbankAufDeutsch($db_link); + + +// Zusammenfassung Eigener Schichten + $db_erg = SchichtenSummeEinesHelfers($db_link,$AliasHelferID); + $zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC); + + echo '
'; + echo " Dienstplan von $HelferName (Zusammenfassung)
"; + echo $zeile['Anzahl']; + echo " Schichten insgesamt "; + echo $zeile['Dauer']/3600; + echo " Stunden"; + echo '


'; +/// Schichten Auswahl +//////////////////////////////////////////////////////// +$addschicht =$_SESSION["addschicht"]; +$dienstsort =$_SESSION["dienstsort"]; + + + +if(isset($_POST['addschicht']) && $_POST['addschicht']=='1') +{ + $addschicht='1'; + $dienstsort='1'; +} +if(isset($_POST['addschicht']) && $_POST['addschicht']=='2') +{ + $addschicht='2'; + $dienstsort='2'; +} +if(isset($_POST['addschicht']) && $_POST['addschicht']=='0') +{ + $addschicht='0'; +} + +$_SESSION["addschicht"] =$addschicht; +$_SESSION["dienstsort"] =$dienstsort; + +//echo "
Detail=".$addschicht."
"; + +if($addschicht=='0') +{ + echo "

Schichten Hinzufügen geordnet nach"; + echo ""; + echo "

"; +} + +//echo "InfoAlleSchichtID ".$InfoAlleSchichtID; + +if($addschicht!='0') +{ + //$db_erg = AlleSchichten($db_link,$dienstsort); + //$db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-18 00:00:00","2023-05-19 00:00:00"); + if ($ZeitBereich==1) // Alle + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2000-05-18 00:00:00","2200-05-19 00:00:00",-1); + } + if ($ZeitBereich==2) // Davor + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2000-05-18 00:00:00","2023-05-18 00:00:00",-1); + } + if ($ZeitBereich==3) // Do + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-18 00:00:00","2023-05-19 00:00:00",-1); + } + if ($ZeitBereich==4) // Fr + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-19 00:00:00","2023-05-20 00:00:00",-1); + } + if ($ZeitBereich==5) // Sa + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-20 00:00:00","2023-05-21 00:00:00",-1); + } + if ($ZeitBereich==6) // So + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-21 00:00:00","2023-05-22 00:00:00",-1); + } + if ($ZeitBereich==7) // Danach + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-22 00:00:00","2223-05-22 00:00:00",-1); + } + // fuer Anzahlanzeige in Ueberschrift + $iAlleSchichtenCount = AlleSchichtenCount($db_link); + $iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link); + + + //echo "

"; + echo ''; + echo ""; + echo ""; + echo ""; + + /* + if ($dienstsort=='1') + { + echo ""; + } + else + { + echo ""; + } + */ + if ($ZeitBereich==1) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==2) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==3) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==4) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==5) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==6) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==7) + { + echo ""; + } + else + { + echo ""; + } + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + //echo ""; + + echo ""; + echo ""; + + $OldTag = ""; + $OldWas = ""; + # um Zeilen mit von mir belegten Schichten hervorzuheben + $MeineDienste = SchichtIdArrayEinesHelfers($db_link,$AliasHelferID); + //print_r($MeineDienste); + + echo '
". "Alle Schichten der Con (" . $iBelegteSchichtenCount."/".$iAlleSchichtenCount. ")
". "Dienst" . "". "Von" . "". "Alle" . "". "Alle" . "". "Davor" . "". "Davor" . "". "Do" . "". "Do" . "". "Fr" . "". "Fr" . "". "Sa" . "". "Sa" . "". "So" . "". "So" . "". "Danach" . "". "Danach" . "". "Davor" . "". "Do" . "". "Fr" . "". "Sa" . "". "So" . "". "Danach" . "
'; + echo ''; + + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + + + if ($dienstsort=='1') + { + $Tag = $zeile['Tag']; + + if ($Tag!=$OldTag) + { + echo ""; + $OldTag = $Tag; + } + } + else + { + $Was = $zeile['Was']; + + if ($Was!=$OldWas) + { + echo ""; + /* + echo ""; + echo ""; + echo ""; + echo ""; + */ + echo ""; + $OldWas = $Was; + } + } + $Color="red"; + if ( $zeile['Ist'] > 0 ) + { + $Color="yellow"; + } + if ( $zeile['Ist'] >= $zeile['Soll'] ) + { + $Color="green"; + } + $Von = $zeile['Ab']; + $Bis = $zeile['Bis']; + if ( substr($Von,0,2) == substr($Bis,0,2)) + { + $Bis = substr($Bis,2); + } + $Von = substr($Von,2); + + // Meine Schichten gruen einfaerben + if(in_array($zeile['SchichtID'], $MeineDienste)) { + $rowstyle = ' style="background-color:lightgreen" '; + $regtext = 'Meine!'; + } else { + // dummy-style, um SchichtID unsichtbar im Tag anzuzeigen + $rowstyle = 'style="dummy:'.$zeile['SchichtID'].'"'; + $regtext = ''; + } + + echo ''; + + if ($dienstsort=='1') + { + echo ""; + } + else + { + echo ""; + } + echo ""; + echo ""; + echo ""; + # buttons sind in der selben Zelle + echo ""; + //echo ""; + echo "\n"; + + } + echo "
"; + echo $Tag; + echo "
"; + echo $Was; + echo "". "Von" . "". "Bis" . "". "Ist/Soll" . "". "Add" . "
". $zeile['Was'] . "". $zeile['Tag'] . "". $Von . "". $Bis . "". $zeile['Ist'] . "/"; + echo "". $zeile['Soll'] . "" . "" .""; + echo "" . "   $regtext" ."$regtext
"; + + +} + + + + + + + +mysqli_free_result( $db_erg ); + + +?> + +
+
+ + + diff --git a/html/AdminDienste.php b/html/AdminDienste.php new file mode 100644 index 0000000..c79ef90 --- /dev/null +++ b/html/AdminDienste.php @@ -0,0 +1,360 @@ +'; + exit; +} +?> + + + + Admin Drop am See + + + + + + + +
+"; + } + + } + + + + if(isset($_POST['ShowSchicht'])) { + $SchichtID=$_POST['SchichtSearch']; + } + if(isset($_POST['SchichtSearch'])) { + $SchichtID=$_POST['SchichtSearch']; + } + + if(isset($_POST['ShowSchichten'])) { + $DienstID=$_POST['DienstSearch']; + } + + if(isset($_POST['DienstSearch'])) { + $DienstID=$_POST['DienstSearch']; + $SchichtID=0; + } + + + + +// Dienste Anzeigen +//////////////////////////////////////////////////////// + +?> + +
+ + "; +echo "
Dienst"; +echo "
"; +echo "

"; +//echo ""; + +// Aktueller Dienst und dessen Schichten Anzeigen +//////////////////////////////////////////////////////// + +?> + + + + + + + + + + + + + + + + + + + + + + + +
Was
+ +
Wo
+ +
Info
+ +
Leiter
+ + + "; + $db_erg = HelferListe($db_link); + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + if ($zeile['HelferID']!=$Leiter) + { + echo ""; + + } + else + { + echo ""; + + } + } + echo ""; + ?> +
Gruppe
+ + "; + $db_erg = GetDiensteChilds($db_link,0); + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + + if ($zeile['DienstID']!=$Gruppe) + { + echo ""; + + } + else + { + echo ""; + + } + } + echo ""; + ?> +
HelferLevel
+ +
+ +

+ +
+ + + + +
+ + "; +echo "
Schicht"; +echo "
"; +echo "

"; +//echo ""; + +?> + + + + + + + + + + + + + + + +
Von
+ +
Bis
+ +
Soll
+ +
+

+ + +
+ + + + + + + +
+ + + diff --git a/html/AdminHelferUebersicht.php b/html/AdminHelferUebersicht.php new file mode 100644 index 0000000..9b07a61 --- /dev/null +++ b/html/AdminHelferUebersicht.php @@ -0,0 +1,124 @@ +'; + exit; +} +?> + + + + Admin Drop am See + + + + + + + + + + +
+
"; +?> + + + +
  Übersicht Helfer und Ihre Schichten
+ +"; + if($HelferName!= $OldHelferName) + { + if ($EinzelDienstStunden !=""){ + // Neue Ueberschrift mit Helfernamen + Stunden + echo "$HelferUeberschrift "; + echo ""; + $dauer=0; + echo "$EinzelDienstStunden\n "; + } + $EinzelDienstStunden=""; + $HelferUeberschrift=""; + $dauer=$dauer+(int)$zeile["Dauer"]; + +} +echo "$EinzelDienstStunden"; + + +echo "
$dauer Stunden
"; + echo "
\n"; + echo "  "; + echo "
"; + echo "
"; + echo "
".$HelferName; + $OldHelferName=$HelferName; + $OldAliasHelferID=$AliasHelferID; + $i+=1; + } + $EinzelDienstStunden.="
".(int)$zeile["Dauer"].""; + $EinzelDienstStunden.= $zeile["Was"]; + $EinzelDienstStunden.= "
"; + +?> + + +
+ + + diff --git a/html/AdminMeineSchichten.php b/html/AdminMeineSchichten.php new file mode 100644 index 0000000..a77fe22 --- /dev/null +++ b/html/AdminMeineSchichten.php @@ -0,0 +1,288 @@ +'; + exit; +} +?> + + + + Admin Drop am See - Schichten editieren + + + + + + + +

Admin: Schichten editieren

+
+". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoMeineSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer = $zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + +} + + +if(isset($_GET['InfoAlleSchichtID'])) +{ + $InfoAlleSchichtID = $_GET['InfoAlleSchichtID']; + UNSET($InfoMeineSchichtID); + //echo "". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoAlleSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer=$zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + + + + // Beteiligte Helfer Holen + $db_erg = BeteiligteHelfer($db_link,$InfoAlleSchichtID); + + + $x=0; + + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + $MitHelferID[$x] = $zeile['HelferID']; + $MitHelfer[$x] = $zeile['Name']; + $MitHelferHandy[$x]= $zeile['Handy']; + $x++; + } + + +} + +function HelferAuswahlButton($db_link,$AliasHelferID){ +echo 'Helfer wählen:
'; +} + + + +if(isset($_POST['AliasHelfer'])) { + $AliasHelferID=$_POST['AliasHelfer']; + echo "AliasHelfer: $AliasHelferID
"; +}elseif(isset($_SESSION["AliasHelferID"])){ + $AliasHelferID = $_SESSION["AliasHelferID"]; +}else{ + HelferAuswahlButton($db_link,$AliasHelferID); +exit; +} +HelferAuswahlButton($db_link,$AliasHelferID); + + +$_SESSION["AliasHelferID"]=$AliasHelferID; +$AdminID = $_SESSION["AdminID"]; + +$db_erg=Helferdaten($db_link,$AliasHelferID); + +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + $HelferName=$zeile['Name']; +} + +/// Schicht Löschen +//////////////////////////////////////////////////////// + + if(isset($_POST['Del'])) { + + $messages = []; + + $EinzelSchichtID = $_POST['Del']; + + + // Eingaben überprüfen: + + //if(!preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $HelferName)) { + // $messages[] = 'Bitte prüfen Sie die eingegebenen Namen'; + //} + + + + if(empty($messages)) { + + $db_erg = HelferVonSchichtLoeschen($db_link,$AliasHelferID,$EinzelSchichtID,$HelferID); + + } else { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + +} + + + +// Helferliste Anzeigen +//////////////////////////////////////////////////////// + +?> + + + +
+'); + } + else + { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) + { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + + +} + +/// Ausgabe auf Deutsch umstellen +///////////////////////////////////////////////////////////////////////// + + DatenbankAufDeutsch($db_link); + +/// Alle Schichten Des Helfers Anzeigen +//////////////////////////////////////////////////////// + + +$db_erg = AlleSchichtenEinesHelfers($db_link,$AliasHelferID); + +if ( ! $db_erg ) +{ + echo "AlleSchichten des Helfes ungültige Abfrage"; + die('Ungültige Abfrage: ' . mysqli_error()); +} + + $iSQLCount = mysqli_num_rows($db_erg); + //$iSQLCount = 3; + +echo ''; + + echo ""; + echo ""; + echo ""; + //echo ""; + //echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + + + +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + + //echo ''; + echo ''; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + +} +echo "
". "Schichten von $HelferName (".$iSQLCount." Schichten)
". "Von" . "". "Bis" . "". "Del" . "
". $zeile['Was'] . "". $zeile['Ab'] . "". $zeile['Bis'] . "". "

" . "
"; + +echo "

"; + +$iAlleSchichtenCount = AlleSchichtenCount($db_link); +$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link); + +echo ''; + echo ""; + echo ""; + echo ""; +echo "
". "Alle Schichten der Con (".$iBelegteSchichtenCount."/".$iAlleSchichtenCount.")
"; + + +mysqli_free_result( $db_erg ); + + +?> + +
+
+ + + diff --git a/html/AdminUserdaten.php b/html/AdminUserdaten.php new file mode 100644 index 0000000..4a4648e --- /dev/null +++ b/html/AdminUserdaten.php @@ -0,0 +1,188 @@ +'; + exit; + + + +} + +function HelferAuswahlButton($db_link,$AliasHelferID){ +echo 'Helfer wählen:
'; +} + +if(isset($_POST['AliasHelfer'])) { + $AliasHelferID=$_POST['AliasHelfer']; +}elseif(isset($_SESSION["AliasHelferID"])){ + $AliasHelferID = $_SESSION["AliasHelferID"]; +}else{ + HelferAuswahlButton($db_link,$AliasHelferID); + exit; +} +HelferAuswahlButton($db_link,$AliasHelferID); + +$_SESSION["AliasHelferID"]=$AliasHelferID; +$AdminID = $_SESSION["AdminID"]; + +echo "Admin=$AdminID
"; +echo "Helfer=$HelferID
"; +echo "Alias=$AliasHelferID
"; + + +?> + + + + Drop am See Helferdaten ändern + + + + + + + +"; + } + else + { + $HelferIsAdmin=0; + } + if(empty($messages)) { + // Helferdaten Ändern + HelferdatenAendern($db_link,$HelferName,$HelferEmail,$HelferHandy,$HelferNewPasswort,$AliasHelferID,$HelferIsAdmin,$HelferID); + + } else { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + } + + +/////////////////////////////////////////////////////////////// +// Helfer Loeschen +/////////////////////////////////////////////////////////////// + +if(isset($_POST['del'])) +{ + HelferLoeschen($db_link,$AliasHelferID,$AdminID); +} + +//////////////////////////////////////////////////////////////// +// Helferdate holen +/////////////////////////////////////////////////////////////// + +$db_erg = Helferdaten($db_link,$AliasHelferID); + + +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + $HelferName = $zeile['Name']; + $HelferEmail = $zeile['Email']; + $HelferHandy = $zeile['Handy']; + $HelferIsAdmin = $zeile['Admin']; + +} + +?> + + + + + + + + + + + + + + + + + + + + + + + + + +
Helferdaten
Name
+ +
Email
+ +
Handy
+ +
Admin Passwort
+ +
Neues Helfer Passwort
+ +
+ + + + + + + +
>ist Admin
+

+

+ + + + diff --git a/html/AlleSchichten.php b/html/AlleSchichten.php new file mode 100644 index 0000000..48cb3d9 --- /dev/null +++ b/html/AlleSchichten.php @@ -0,0 +1,463 @@ + + + + Helfer Drop am See Alle Schichten + + + + + + + + + + + + +

Alle Schichten / Schichten hinzufügen

+
+". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoMeineSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer = $zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + +} + + +if(isset($_GET['InfoAlleSchichtID'])) +{ + $InfoAlleSchichtID = $_GET['InfoAlleSchichtID']; + UNSET($InfoMeineSchichtID); + //echo "". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoAlleSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer=$zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + + + + // Beteiligte Helfer Holen + $db_erg = BeteiligteHelfer($db_link,$InfoAlleSchichtID); + + + $x=0; + + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + $MitHelferID[$x] = $zeile['HelferID']; + $MitHelfer[$x] = $zeile['Name']; + $MitHelferHandy[$x]= $zeile['Handy']; + $x++; + } + + +} + +if(isset($_GET['ZeitBereich'])) +{ + $ZeitBereich = $_GET['ZeitBereich']; +} +else +{ + $ZeitBereich = 1; +} + + + +// Helferliste Anzeigen +//////////////////////////////////////////////////////// + +?> + + +
+'); + } + else + { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) + { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + + +} + +if(isset($_POST['minusschicht'])) { +// Mich aus Schicht entfernen + $messages = []; + + $SchichtID = $_POST['minusschicht']; + + if(empty($messages)) + { + // Helfer aus Schicht entfernen + $db_erg = HelferVonSchichtLoeschen_SchichtID($db_link,$HelferID,$SchichtID); + + } + else + { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) + { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + + + +} + +/// Ausgabe auf Deutsch umstellen +///////////////////////////////////////////////////////////////////////// + + DatenbankAufDeutsch($db_link); + + +// Zusammenfassung Eigener Schichten + $db_erg = SchichtenSummeEinesHelfers($db_link,$HelferID); + $zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC); + + echo '
'; + echo ''. " Mein Dienstplan ("; + echo $zeile['Anzahl']; + echo " Schichten, "; + echo $zeile['Dauer']/3600; + echo " Stunden)"; + echo '


'; +/// Schichten Auswahl +//////////////////////////////////////////////////////// +$addschicht =$_SESSION["addschicht"]; +$dienstsort =$_SESSION["dienstsort"]; + + + +if(isset($_POST['addschicht']) && $_POST['addschicht']=='1') +{ + $addschicht='1'; + $dienstsort='1'; +} +if(isset($_POST['addschicht']) && $_POST['addschicht']=='2') +{ + $addschicht='2'; + $dienstsort='2'; +} +if(isset($_POST['addschicht']) && $_POST['addschicht']=='0') +{ + $addschicht='0'; +} + +$_SESSION["addschicht"] =$addschicht; +$_SESSION["dienstsort"] =$dienstsort; + +//echo "
Detail=".$addschicht."
"; + +if($addschicht=='0') +{ + echo "

Schichten Hinzufügen geordnet nach"; + echo ""; + echo "

"; +} + +//echo "InfoAlleSchichtID ".$InfoAlleSchichtID; + +if($addschicht!='0') +{ + //$db_erg = AlleSchichten($db_link,$dienstsort); + //$db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-18 00:00:00","2023-05-19 00:00:00",$HelferLevel); + if ($ZeitBereich==1) // Alle + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2000-05-18 00:00:00","2200-05-19 00:00:00",$HelferLevel); + } + if ($ZeitBereich==2) // Davor + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2000-05-18 00:00:00","2023-05-18 00:00:00",$HelferLevel); + } + if ($ZeitBereich==3) // Do + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-18 00:00:00","2023-05-19 00:00:00",$HelferLevel); + } + if ($ZeitBereich==4) // Fr + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-19 00:00:00","2023-05-20 00:00:00",$HelferLevel); + } + if ($ZeitBereich==5) // Sa + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-20 00:00:00","2023-05-21 00:00:00",$HelferLevel); + } + if ($ZeitBereich==6) // So + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-21 00:00:00","2023-05-22 00:00:00",$HelferLevel); + } + if ($ZeitBereich==7) // Danach + { + $db_erg = AlleSchichtenImZeitbereich($db_link,"2023-05-22 00:00:00","2223-05-22 00:00:00",$HelferLevel); + } + // fuer Anzahlanzeige in Ueberschrift + $iAlleSchichtenCount = AlleSchichtenCount($db_link); + $iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link); + echo ""; + + //echo "

"; + echo ''; + echo ""; + echo ""; + + /* + if ($dienstsort=='1') + { + echo ""; + } + else + { + echo ""; + } + */ + echo ""; // Zeitbereich tr + if ($ZeitBereich==1) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==2) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==3) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==4) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==5) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==6) + { + echo ""; + } + else + { + echo ""; + } + if ($ZeitBereich==7) + { + echo ""; + } + else + { + echo ""; + } + + echo ""; //Zeitbereich tr + + $OldTag = ""; + $OldWas = ""; + # um Zeilen mit von mir belegten Schichten hervorzuheben + $MeineDienste = SchichtIdArrayEinesHelfers($db_link,$HelferID); + //print_r($MeineDienste); + + echo '
". "Alle Schichten der Con (" . $iBelegteSchichtenCount."/".$iAlleSchichtenCount. ")
". "Dienst" . "". "Von" . "
". "Alle" . "". "Alle" . "". "Davor" . "". "Davor" . "". "Do" . "". "Do" . "". "Fr" . "". "Fr" . "". "Sa" . "". "Sa" . "". "So" . "". "So" . "". "Danach" . "". "Danach" . "
'; + echo ''; + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + + + if ($dienstsort=='1') + { + $Tag = $zeile['Tag']; + + if ($Tag!=$OldTag) + { + echo ""; + $OldTag = $Tag; + } + } + else + { + $Was = $zeile['Was']; + + if ($Was!=$OldWas) + { + echo ""; + /* + echo ""; + echo ""; + echo ""; + echo ""; + */ + echo ""; + $OldWas = $Was; + } + } + $Color="red"; + if ( $zeile['Ist'] > 0 ) + { + $Color="yellow"; + } + if ( $zeile['Ist'] >= $zeile['Soll'] ) + { + $Color="green"; + } + $Von = $zeile['Ab']; + $Bis = $zeile['Bis']; + if ( substr($Von,0,2) == substr($Bis,0,2)) + { + $Bis = substr($Bis,2); + } + $Von = substr($Von,2); + + // Meine Schichten gruen einfaerben + if(in_array($zeile['SchichtID'], $MeineDienste)) { + $rowstyle = ' style="background-color:lightgreen" '; + $regtext = 'Meine!'; + } else { + // dummy-style, um SchichtID unsichtbar im Tag anzuzeigen + $rowstyle = 'dbinfo="SchichtID:'.$zeile['SchichtID'].';helferlvl:'.$HelferLevel.'" '; + $regtext = ''; + } + + echo ''; + + if ($dienstsort=='1') + { + echo ""; + } + else + { + echo ""; + } + echo ""; + echo ""; + echo ""; + # buttons sind in der selben Zelle + echo ""; + //echo ""; + echo "\n"; + + } + echo "
"; + echo $Tag; + echo "
"; + echo $Was; + echo "". "Von" . "". "Bis" . "". "Ist/Soll" . "". "Add" . "
". $zeile['Was'] . "". $zeile['Tag'] . "". $Von . "". $Bis . "". $zeile['Ist'] . "/"; + echo "". $zeile['Soll'] . "" . "" .""; + echo "" . "   $regtext" ."$regtext
"; + + +} + + + + + + + +mysqli_free_result( $db_erg ); + + +?> + +
+
+ + + diff --git a/html/Ausdrucke.php b/html/Ausdrucke.php new file mode 100644 index 0000000..826ddd2 --- /dev/null +++ b/html/Ausdrucke.php @@ -0,0 +1,167 @@ + + + + Admin Drop am See + + + + + + + + + + +
+ + + + + + + +
  Übersicht Dienst DAS 2023
+ + +'; + +$db_erg = GetDiensteChilds($db_link,0); +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + echo ""; + echo $zeile["Was"]; + echo ""; + + $db_erg2 = GetDiensteChilds($db_link,$zeile["DienstID"]); + while ($zeile = mysqli_fetch_array( $db_erg2, MYSQLI_ASSOC)) + { + echo ""; + echo $zeile["Was"]; + echo ""; + } + +} + +echo ""; + + + + +$db_erg = AlleSchichtenImZeitbereich($db_link,"2000-05-18 00:00:00","2200-05-19 00:00:00"); + +$OldWas=""; +echo "

"; +?> + + + +"; + //echo '
  Übersicht Schichten der Dienste DAS 2023
'; + echo '
'; + echo ""; + $OldWas=$Was; + + + } + + echo ""; + + +} + +echo "
"; + echo $Was; + echo "
"; + echo $zeile["Ab"]; + echo ""; + echo $zeile["Bis"]; + echo ""; + + $db_erg2 = BeteiligteHelfer($db_link,$zeile["SchichtID"]); + while ($zeile = mysqli_fetch_array( $db_erg2, MYSQLI_ASSOC)) + { + + echo $zeile["Name"]; + echo " "; + echo $zeile["Handy"]; + echo ","; + } + echo "
"; + +$OldHelferName=""; + +echo "

"; +?> + + + +"; + //echo '
  Übersicht Helfer und Ihre Schichten DAS 2023
'; + echo '
'; + echo ""; + $OldHelferName=$HelferName; + + + } + + echo ""; + + +} + + +echo "
"; + echo $HelferName; + echo "
"; + echo (int)$zeile["Dauer"]; + echo ""; + echo $zeile["Was"]; + echo "
"; + +?> + + + + + + + + diff --git a/html/Bilder/Attention_Sign.svg b/html/Bilder/Attention_Sign.svg new file mode 100644 index 0000000..2e424ce --- /dev/null +++ b/html/Bilder/Attention_Sign.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + diff --git a/html/Bilder/Info.jpeg b/html/Bilder/Info.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4573482a17d5c19bf480636447e628e15ab77777 GIT binary patch literal 16593 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 literal 0 HcmV?d00001 diff --git a/html/Bilder/More.jpeg b/html/Bilder/More.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..12fc5a5f936c6be4175d56cfaf0e3452b807f453 GIT binary patch literal 4887 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 literal 0 HcmV?d00001 diff --git a/html/Bilder/PfeilRechts2.jpeg b/html/Bilder/PfeilRechts2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2063c3a9e0d604f4850f73d68b28e4f5495ca584 GIT binary patch literal 19511 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 P|3S0Y`0IVp#rOXUpGON= literal 0 HcmV?d00001 diff --git a/html/Bilder/PfeilRechts2.png b/html/Bilder/PfeilRechts2.png new file mode 100644 index 0000000000000000000000000000000000000000..6aba57233011ccdb756ab2665ff49374eef911d5 GIT binary patch literal 42480 zcmV)uK$gFWP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 Q>Hq)$07*qoM6N<$f?GOv&j0`b literal 0 HcmV?d00001 diff --git a/html/Bilder/PfeilRunter.jpeg b/html/Bilder/PfeilRunter.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..75b4523cd273c31da58aa0a0a45d58de8642cd49 GIT binary patch literal 24729 zcmbTecT`hdyFI#7Ab?0m6Gdv3J3qU4ckSZe1^(GB#4jwcTYz5#B_g{IBa1;vp%oPN$Z8(Z z*r%wfdr(0cr6n!8vk3&j!vn4o-?dBp00xCQ@c;SePYWQ-13^GWU=SGqDhz=ML;k!0 zq`+^^1zP;yMuVTBFgO=Cf`^xH7dYXG5CDb1U{E-Wiwh2#4v7Y@18`w35or|zZc$4Y zgiMf_YHY?G9-QIBR&lG|Z+Nu}!EwBNd-ftx`(*da$tx(TAJNbx5RV=+I&MrNo0wYL z*xK1UIG%QObNBG{^7aY2cque2JR&mwYC__*q~w&$tn8c{H*ej}EiNf7E3c@ms;+zV z_{r1yhG)-Ty?*nS!E9^q=<6SN|6y=wc;w?J_Vmmw=kwf`<(1X7_3s-$Hn(={f&j38 z&H8W4{%>{(gLXmTa2Oo1V;2M(wqv+3oJ(4TTg1Q;;SwY&qZ-R2W|(p3VJk0A&FY)@ zh2UPkJ$UtxvdcTB{k81>ondkRzbyN2!~Vyv5r7{C0UsVr7|;XO>x>0uDyyR34K5uH zh~#^^^n9G;YVUaSpQzV&7Uh9p4L#gq;fxLY;7e_e#7%80nFnsNWXR2j>ou9G+38ST z#UUWg6p+zh`)wgIk*a)FA~8MF04}( zmCPU$KnaT%QjWmE)~oz^yuOu+HUtv&%7BBdo7{R$M?;1NLZ_E}{{Ugln7M|gikTb90NQo1Fzn5u&>&#Q&K%WoKGL~iw+-F~aFN(reioYCiM z*UFL_*C8&M*X!Xte~$n7s&MdI_0NWPVeI-Bs_fZIimDoH+GWtFK(l399?76!w!B`i zae6gtFvaf~-&IXS(A4tw7ll@DUJLRF5r$hUf(B2xx|Smh3f^B3{rR|^Q_vKqKE&fN zAOdNh`WE?fKosg048hU#+vXPZ;cuImjG&C3%Y09Se~m?GFNh79CiRFwV0Q>QK97rT zqU_3i!sd+ zjhEj~86$8-rFQ3PRt2AHrI{An)=es1(n-4qprSVB=j_{&+O)*1VD{2sb4we;r}i`c zB@fq&xD0=0)lN7~tY2yy`hn9rvuV*;c4k)U;)Z07iFiE2G#z%>B7ByzM|G6l9n|2N zQm^o9?3VVYOk-;_MaaaOvfDOE81EJbXlL?>0S|7hiV_*-mS253nHzrbEDUkUM8#Ty zVt^Nbw9ngqgp*6-5ZW2B{S%Zu(1{D2azV?K+^OG7@!cQ$bLFHpngU?dGGVmSnI( z=B!53AAU>%vGeW9X~02nkzr2sZwjlFJ27mFzNJ5`#KTyK z_(9O9zlcKAeyA}$(;4N7TKit?e3GV*M}vqeTB}hJ7cRm>5m@>@z=5^MZbywMmL}A< zQ-85XlEtsL>Erhhup+z97+WO$g$_u68=OzD?&sgOCf67JUzi6(VjLc&SKRPtez;$A z=>6t3gE0%}v}@&@4J3;8g0$mh%sa-T1@Ac>XwXw#TNeZF8h@C+c*Okh(x$ce8Ksqa z+pp0+zh{1b+kOj3Uu@mHSy5SSO5@8+ZH0e}_C6Wx-_2le3<8>H6r%Tw%;PRCWRapF!br$mq>@@304ST_#0P54+U&WIP)XGU4>t z2-O@&>Expb9#B3SnJZ&YvU67~A>y3{RIE)qK6hMILpv+9PxU~EcGLuE8i_CXinOIZ zpRR+r1o<7m;D=0cx4>?``#kRgiB%r%85(!^!(a*1pD4U-7a?TV2J~S$q;B@RK+9VV zBYabP*v&8S0AspAk&k__r90A^BXiv1TF~yyy>$M|7LcH8JfgF$_yrF7velXGgpKWI zFo_1%`O{>?4Tt6q9>AZimw(_7&@?==J=7h#O8q4dG;DtN-F!%2;Gmdg2b#oq<@O2(InD@LFD=|i;J=~_#MjefY=E=7zm{=NK@b51&PbuZp%S;WiSNe- zLd$w7CFwO{(}W0VXk)(62y}Co*9015BTy_;z@#;d%fRI^e`VX!oK=eyOUxRmM|=Is%;B*nNdJb(~+Dy7mj zJu_4j|Gfx4wD~i2@Mn4L-ZaFl)3t`uRT+k6?X2Q0n!bVj5L}e`0^p;ec#Q$oOtN-} zJ*KCG(qUo+z(q{NQt|E%2rDucAmQKJ(2l#wB0&I?0D(2Y_%4Rm3UD^TQWOX7-jkrT zWGVyLtRH-&@L`PY4&(()jyS1by69mghR!qwilDOY8K`UuZ#$MkSU++B1Z@uaLQo5~ z;ALF$ISj@&UIh&Vn;(Ijw#z)KvPHGy0JjSi9-F(A2a3uOF0q@rxxpCaQk6D>llip# z?VO%!p-%EgGjs0ZgwvX1Q`J+{dYC$(&qqAKms;wc$Q`WXb0Q97qriX6b5}b zS2wp#)q|L?&$4FPKm=Yn3Y@u;)j7Gs@z)HZdw#f{MlWaO0h|EB+?>(>f-}1>NiS5Y zb2Hc&oEGf`@%tA0db>2;cu@_+Yw>#&{$ghE%-I`SdHH3%&eU&>fe zS|s4WV^%q&j~Ca)PTpN~gt)h$oJiv8Co5Ax&~_g~3uo!?5>;fR zyn(8vli?wseVS6ba5+{6+CsdDG|Ll;jg6{R?u1qtcG;ToxiX~_28rWs6$2jD@$~H3 z0VG!Vhpj#7(6o|}L%KeGpFPPl)D|y7#<~gH{WoZF*w{Xb_&I3hfuaN;j)b<=Aj#4g z(*?{AIVI_j(y0dcIE2NiGa^O+*B};%5CiV8TQ&zlzbY+-oAxjHVSexM%|kKlOKUZW z6k7I0OJ>bC6EDK{A?QVx*Rl8i#r>it0_fRWw zGZS{KwF%yznl$WzgcX1|!C$=SZp_a_!m3)kj)^q+qgp{+>kyH}>fz((7~&zBK@4Lp zo4TXq1ffM&D&%X(1clep&9L&AhC$2xTaw7*fam(QfyU-1b8&XbuiG>#;ci=nWhP1o zYM!b+s}n#JZS_D;zEez~E=tE@BP07=xc9qaM|fJ~2Gx!B?LUYeDRmZ||6yGwV^M<| zGiZm=j)oOMFUa!YHj{{iuL{z?datO>j8pxWsC`EKveZI(XMjc2OE@t3a&%^UG=v^R z{pAJZZ8T~(=lO@!KlQqr6wj+`MaJnY8|gh8pN(pKNL{5z%imNJSJ`egK%ia0BaBIG zPBwEDP$qx%?#U3zkRCB9t|z;;J>?1r2!I0x(^yG;@qd~#h7V9 zNj|}!d{{mxeFi_Z-deoh;im7kf86L&$JQ!m>~c03numb4bt!Ov+tT2+T?#Px#ZTqQ zed@NMe6NX!%Jwe2e?}2W%fT%@y8E(CFs|+EXH5kL50ijg(&v@YYE)HFG>2c*wpni9 zC!?gyUjmmb>LcNUic6lNjCnY;U)6hQB#%pHYtZpb+;R~-eA*+_R@NbtXK}Zqql~Ss z2T%#b55u{5Byoq=D)_4ed`4RltmCF$(DU~t2aJT!ZgE_a7YU5zxrrJc54gxRAT9z^ z3E4w5u(F`=;I{yucP64riVtM7DTrW_DSxjrRv9FVlgX!=yH+(g)pW5qb2Ow2;62&eSAm)z~RZV8nXm{f`oh2IYcRtKA-1z%BkdVAmJn^tz4 zd?r+tUCcmP#;Y)ZFM%OOnIsuioO@mor{LEY`Cj&=FbNw^JiCGE1IXB=z9uLZ37O1w znW!B|e!}C?M!*Eh=k(dgUkef8ferl}2vRcoIW1xT7o&hsV(N9W#(kdl^@>iTYPe?* z0xx*-!VNn|n**L9ZfHS+^>QQrlcx&Sj6e&dE?nn z!J%`p-mUm7+Utr)@|9qR_LW3{e+P2FwT&~|tec@KjW6Z%Hp>13(7cV&C=jb*u2j!? zBf0i5{AQRdibL44fW9&^xLT+nhtpvwJc21HQ2hbtjCp#m{C`0glg2hnN{V$9=rhyT zy#?Cq;CR8R4s+KbU9jRFN%3*ob7jXsZqmsVN82*z-qa3mUdd-06>r{&ETk{^X2pMw z$p(zx?c)j-uQL;LI(1yJiPo9oXr@du<5qC9%X!DpQ~=yu>pzsG_Nnu5{^6gN3Mm)> zj6Ww;e-%#*7PRd4K?#qK=a|?LL5y0;Xw$mm6^B}p9BNoqNv8U7lCLUNm?f11D4P65 zZxK|`!l#jmQ>&|zPR7!vHp;@MLwE2xElK3AaJ&HG6_O2*w1xHg>fTfrHNXL$HJR#L zWwJ@f;!LDcm5wXzkv4&63Xrg?c1ArENKiVU6PW^N4+W*p&)FJTO=D6Aq&}qW_vN_E z7Zl$^-NB}^3$%Iw_oO&j92pyZ%6?_$_s3FUQ@+fv^11Izk+9?9|Y{tiL}9dmK$TSe7Jhs4Pj zf(fu(xN4Oh)`jfKa_KtRZ~UdLbkW%+kR+D^NIHx=ip|^-;^t}J_7S6zhd~EwX40nD zk&pt8DI*nf2yMQc8Ssc=7^d9PhMT+x2+EMDNx@xIe&HU@3(`LAlNg4WryO>j{e)NI z%_|b1$RQBFsPvUah}f!>pFq3fFanXe0RB==sB!R{cp3>de=_y-o=NPhDeC(4F9l)A zJ%ZR*6cR$auuPZac+)NF>9G(dY+fIJ_mRBArt>l3ep>$ALm2NtIe;p#y}n@N(<8DH zSn7x56uhYFQ>JsJWmW{S&=;5V;iV_VNUP#Rod&(r7~9mU)>7 zjA$(-9V`$&zg`5-MkRqh*;vp&a-+iNm5`kouhzAgqoJkLB#0y7K(Go6qh&=d58kJ% zFJTtWsf`5icDL&pstt_DVBN<*#$C>3qBTsIPJ(@z8V>eubd3{1EX3TYi{5!ru1XXl zI|IB$hNRu0crZ?x7NCb!;WA`wNd)(9W8N}HgAw(SIkL1PHm-@5amr?bAIX`erVpP<-;Af2H=j-|&NTM4(0JI^ z&J+Vu#qM{0d1i-?PgfQEP~lh%!n@T1GPRDjI?!8Ot)i99r7hZ4c^Y;0kv#H(L&(so zK99@o>q1Q;JASn{@R{%(EjEg>=zF50%B&m(=?G_y%z2hTpQPk}!9=?Q3&^NP7x zV)!j__)H=KQT6GLgS+9~mVcoO>=LW&_}XBL%}NhM^p!`rX6#_snO~U2K6Xl?Mkec7 ztYs@YH~B)QhP|^!ReLK-48R8)cPuK`v=b3ewQMrUnN>za*MFfasAzg`pNL}v3VwOL zvQIPlDh;sh4h$KjWdp`(qKI@CeJnkGkoF!=dvvI+`wW&{0h>S8mZf0S?i#16(qB-1 zE2-z{Cih-=5KC@OAMW$_gG9(+)>?(>E9X7BWUVy+qhZCyJCJ@L{fr&UjP&(!mMxtU ze(YKh`Mn5=b-{z47m3-NAGu-8@e|&DYa&;F{+@_1VV9JwnOQiyA`;ihMWy?dy8^T>u$ zs#7{S%0``q6wuS|i71)1vS;*1LYTOMwa+^!4jewn)RqG8;s5YZy8u!osC|B|a+;KL zy{Lokyo203y|WjVsZ~I5Q2)FYK3ODbQaUjtwx9`&{i|e*t7(Dn2Am6;zE?UC@g5gZ zc0>gB%2E5&8CMy=_W2H?6^(8X-dnbhl^}pzz~+X!tuetJP;MpQ<}4mtHL5AjINU(s z(!IP&Gj0#;z8l6*5A<=*Rp+Cc%|OiID}*90QKKRSe;Z&2m1n_ILc&xg33sPVx#R6E zNFttgS<=TvTOTlKLuyNwqyXo2(XL_j$85KgV-W!Wr?PBi|9tGA&hb;2sZ@2Iuv53{o{rCv=^lO(;-q<7SsInRRhIzGcW_n zc`!@&o9+&7KxV+SEq4LC)q@p|cXK3+jk!-5Kh!>n_w{o!6EH7>?xiLp z?+Yywx&w6-78FhSeFQjDZb9?|I%K(8_L3P^Gm`P0-Mxl}){x~1$ClSH9r&v|5H3=84pP2?7puI~V zw1Ufw-AFqcS_BV1q>TGgAs2=TzoXZ?;`aLhq`n{z~8QQ zk;k?Wf;?O?3yW%^O5Hn>QK5Um`LKCjJhP92NS$?+arJIN5wwHMO+>_nUxpn%%TJ3a zb=)I7^YVm%*#t>@qx`X-imC$SO!;C{&em&G z;JyMgQ&U0nCzYE@+sZ1tt_pY~z&WZ;BsBNygbn9qQbmjn67h^hcld)X|^k@2Sc zYy4`Uvb^`6pqcVxk}>`W^!M^=bwp>BaBA~mIk|a#sFHqIduplQW&}~YKmY2~foOxV zupp)>>J9sXo6rs~1hlMV@`BHOGmtQzFpJzMg6sRWdmmM98D;5spZ!$=)%!TT$i63V zoFPt748x2C^*?bAzxn2aq)1)FBHyXYfn~ma!VgvnzxS^hjQz%(0uCoNohtuf+Evl? zrrvtWarn*D2^FWiCI~()dQ64*Wz+X-OTt5=KKp!QKRMgk1j8SkXjLJX+>!bfl>X1` zg1zm)lbZQdlI5*;Au60Y79zVDVpSFE$bUOUOY*H(+Ezv1_C@5s#?_sJ=<*hnd3 zsaKbydEu}*BbiAhIXj|6#8eP@s{0tJ*SNot7Ww|5n&p#au7n#Eu1y9(C}~eSk{#k7 z1w>DrDq*eW^Q$rOm=l=S0XPhJtfgWl@ZBckD=W(3<cgMT^kkLwO6jv4nCswj&suLg#*pAg*~ z^ix+HBNygaI-enSHpxZ-`R@i{xB?%IWKcfX{{*WBdY_idzAZ+%*H2`jt#7y`@eEQpBRs=n@!lM9;G>$u3#lg6c>o!*iw|f4k5*h!3Tr42tybYzZ@f zK@tOs!?U@x>Poy@773LnMKZ~waVF@kRa57TWM_N+6a1Vzv!#25D_eJiN1;&g4tp1b z1#|<)+yXBd*#m&)7v)7M&I0ae5sW@|MshC+Wa-A|$Jg4TfRr zaX~Yc*n;43!j`q|?q{pWINim)wR)#5QIyTAi7={wpx)_Sze+Zo{q!!&6@cEs&LvPo z9-EeTu%D)7rI;7&_-yw|YI9*EH1A42Z7Sxhz|qx-xJj=~8^6(2x7CFa3b&rus|tw- ztrtHQ4F3QnZp~fIvGq@N9|L|bJvQrum`JA1XSoIK!|xsyM0A6pq~?~fMpWa`#f`PM z5zMqGu3ts6@7IzBe8RmCEtDYl7G26z`2*-gla`}n!0po3d>1$C*T7vq#O?0p+ioO) zCAsfKg4sOovJOHWWGq#P1Q+tQ{EtMO!|>V}Tc>xtrqkYk{jKv&Xh3`XJUP|4T&z9J z5BX{$_B~r_b#UOy-od3G&-lx7V);uG;m&acY`nhY_|z4N@}>uKr|-5)KHTRU=lQB^ zOP=Kqk8fBSh!ixm7ZN-eE4Snx8M6MrG->CCcHj+3L`==7wjeuvy;mTo=H$b9;Ue<> zD0uU6sr2+P%obR!Sre5oi+YQNF(hiyp%uJ#LO5p=r&3q+>O?vj`)imhiGzy;*`$I> z%jJPIN|M3gAaVZ=gQU_0Lgq&3`yD9MIMYBfL+>>Fl@LzR#7y<55!{L`Q49*zc7=&o9-z{% z`#Uy%O>+)g~MDi0eR)%si}E{yG0`dgnU2kJ?lr_n~^J5?~X(ad%Va;`T7og zoC(?v_#FRi`)Dqped3d!-YYvlo!9umdcJqAUa8k|n9F*_0-SGO{^9&z#bA1k+!H;- zcIwa){1R+!`~K2FpDnhXM~Qh(0^a@wtzUrPMJfx?l(o=uaelGA>n}>RUBNb zD8gkRf8!>L7Hy*tQ^ZTmG~4&WC4D%*o;SnxFE8nE6NS@0>1+wiL_ZNf@E&Jl5o?Ph zXUiBTX(ZU90WAv%@`SoWoVD**E>UV|7F{^w(iqm2!K{x2Y+d{{l<|dmO8p4h+J|GrRWXY0qC~BfsZ}DIWBpk0CZd4; zy@*f`0y}M@ja>`6eYYI~;X`sj&6q3KxV4$0zkB%kGSkNzMcdFc@XXat%u?mvfjvgeZ1v3*=^Zx25kZDU-x2at96q1T z#x#^i=a1r5KR#QU%sv0;(M&v~ah4&7n$7>7a~^c@;a{|Z^ml#FM*9Vry_Xs;MK3xL zmq1}rlMG99N(3iq`)V%_M9V{BdZ-!+0eK)p%75j9C6nfRa>KU+N3Xrxp~#hyy+12f zL1Ir|9ExDqf|pXZM}IHr=n&V-G+q-Y`wI#RQ{_fZL^Y~3(q1-2T0p*2{s4zwX+}L` zom?iRyKZiHdUjD=3A1UBu5Q+I0=lS|nCcO;=2`xl+t0d#3e@xw1+u>;#sW4&=xp_f z{f8&~ySsy^p7p1-)08&y9zB|6sL(I>aw3`=M^m>wiA>NVN4yMMe7Z0`Nn{Y`NH?cr zR<)ikQ(bE@UMo$76N}^ZPgUs4AJWuVza}&mIYgFOqy^x%`UeQ*9$TezDxOH_vVOh_ zyCQJ(Qpvj&y@>oFHj;ThQWF%F@X>9@`98|-KY-UJFq)PpS3tjz+U&8JJl;6d!k$Pi z^xRx+)H`(a5=Y(tr}?|o#u(pqmJh)D)4W6XT+?cI$Xlu9h4#(*WhU}1@~39kMt#s6 zHH5SswY(7;GEeV;`~jqNbk7wuanxbo{RO+43kVEC$#0$KQKNqV{tMLTio(W6X=gdP zfXes6TbRa}^XH=m=|47FPE>9_f0}{ZS7a?aUbnmWhd?dz4^Z&3d1C9=AHbM3{PO&Z z##z?M(2{@=-Kd4pm8p=WTwv2E(W;{*(aJU+%7csJQO7m;XBu~A;*?76D0XxNqsScG zlgp&EDDLNJ`88h4u~pTmLkm4zds{ADg#A9f^#`~-zp;HTC%f)}Vuxwn1MI(|GdvX_ z!MvYz@!o0oGMljbv#_~VK7$y5#q?+QZaiJ|I)-4&Ac@aUAm7Ek{?J&OUXV=hVw+cOU zo#?7trlIGdr0&scCkb^Wo+KHt4}J^SqgY zZlC?kaDMY)rv`Rk+9O!^DoaNvV!a6Vm3e=8zW)zUd*XX~_znkZ#R|Q3G%jEI1I$}~ zcm7KO`c@C*dvLSH_QK}#OHAFz(M5Xg55W5!3h4*MByRFhr~hV1!R?)muWoK|{v`zX z#hE|5hKE;Ok=^pESO0_WkE8;(|KWqK{gS4qCxM~%qX#m53p84b2=W0$wO3@kWW`c<|afQX^N_LMISvn zG+gz%;}0--#R$Xt_~B*r`%C9eoPOCbaDj(<|%G;RunDG&^XNoW7R(d zTY~?|JYM~!vUg79>E{c+HIu6JpviX_R!sb}^S(AGjvP<5_jsQwECy7jt5gRj#5B=y`0K zcQyW{VZcaCVCceTV8lj=l=tSN`T)siERg1!?WvGh!LAJdHq`W-1+@WL;yI!h zE-?9#>6GpJlf=qz*bEx1AeLMi27AgP5 z3eZVy{{bdE{lgh*{j|psFG-8bJAA3tkq1_z3da}5>t6=ZSNqcN@BW7dIUMkrj*ma2 zyMikw?7>bTPgJ+sWEmhCetqL|$fKF=AiCu=N;mpn8bp+|{pH7RUspnxWJKEZXnx_L z5Gp$b(CrbO83K<=#Ce+hPnCeYD-)cGS`e>vy{=}7m%gs$5hV+<;J;BA?Ik_Z0{W{| zKtsyxaiIq;pG}L544Eel$8sXp=l%eLB@6iFN41#f@UT9A!B=!b7y=5#9@$B4fF7JW9k!&; zC#x3ol>!Sx;9Yb1F9=RR9cq!<0^wyU2e56WnJ*v=BKwItxxerr1@f$I9t;Q|Mu{Oa z>0*+>#JTmN3h*(93$Ql=!{^t^yxzb%txV7^&qLPAuW2IQIRih3otnTFgJTkD>8TBy zb;LPlB;T*RSw!g4O+;GEz}@1p04o!{LlPC*-%IT@;WbfrVqEH1mh^%BoEg1C6X6^p z`vp8YFJm=;U7(Uy#;?mtJf9ba2&>nrJikUy+zbuY*kFC2Kz?WCPaa~Kg%sX{|H@0) ztY2jznV8CeHDABY`t|WqDO0iN3fY(E=(}HTZxjKCM`B!87B<5}t((DY2Iag`B7j`+&e&*HMI{0PGAIE&lERAYFuW^oWoOHhJ^D*|bCsB7> z+IK#$w*Z}^AZ+y@!0Phdj+Pn) z#g3LZo~gLqJWCR|k{v}*{f{CjjYM6ZG8*XIx}S#JSA6Ja%_U&hH|`Tf=!oVmFz5+? zq@<);m*Xz$=pbZ(7BVOj^!;`?_2VG?wAn-DG<(}!a1P|~ds56RgUP{KC#9aK+3OoF z2D}WD`SS|6CSMx0?Q?5ydXBq0k&DccdGV;_rDpsYVeg}Figg@q4mM3Efa=r3iIuCZ zb!xIe+)0ARcOEdfk_QN=ozmpLtzUF?GuZrWkU>6M7Fxx-5*Lz{5;ok+Sn1rA%0#lY zLAUQ7kQXHJ(m%dgee&@GwilaLQ7v!jZtp9hHo&%zNQyLNSL(m!aR#&!PTh8l{tjm$@j(JxPp500pCw@$07q38A z=7pC|SzCPwxPN4~p-1j)XuDj(@f|@Z0&_>1KDp&(cPG#K?7P}^q;ug0cnKqN;8U7)6>WPj$hD50me zOT%Wm#VTVPpS3a;UYcJ6k~ECypEJtJJR%k*PE?vZPek zw7`nQihfmq{0U(aSsxPiPb~ywAMVuneeSc%cVF?%`fp*OU|JRSJ9Q(*?{|}{lqvAj zTyAEViRS2?-up{V>*cxp9pWYGd9<9*yCN6n3s%1IqfsTZ<1B4gbZF7x5#0+r0z%wa zGE95yo;NevGP=ZyM5R6(X-eFD8Sw52z}3~<#yu6|TX1xFgaYdEM=kU57EZ;791E~@ zj*J7T$1Ygwn;qNqfk<6GI9ON)D5SSUJ%B;F%`p)RrZS?xzh#y+3Xsqi50ja<-o%B2 z3utToIK!wXK*D0=DtH*RR=Bp|4Bh*TAgA4zWK;s8IVMmmw8-cY1ShiV5)8RBU(M*G zGgOpf7JM0$HI~;Z(!wyRC~Ht`32U-?1KZq1L7--1p>6Q1>E~y$t}yj}EruzVmFNtd zBZmf0_=zVgEkd`SwR6zcFFWt82Iy((AYwr8Oc-;F4Yf~XB3`N{w43kCy#=#`H z*_!J0Kos#nX#Uvp;1i`vNE}*N8dD=%b(6qhR_+vc{)axoxO}_2Ts0aIy?=XkI zS?6zK#@4nhrp`<;-_ryZBSQ?Yl)9O0BXI#3FTi|_y2SQ8)pTjSi$A7Y-z+RRETo?{ zptq%~-OTO|3+cNm<<*{5{Y_)}1BDC9KCmsmX*@xgpGb7|H{8#I3mPBP(Xt|HOdp6w z`fEMolo7?uc9{%dN&;Zu<~E|KOX&uqD{C!V{f;BBnR1@_)k~bYV~_Mh_iM1jy4u?- zWDc-9qZZqx4#S`nu2c`GF?l2hQ>VQa0}`{QPAuk z;Pd(OFFvQ@UNO`ey>Y6l5wiskOFQsUi~bD+bdbK3TwUEGB?UVx+niV~GMFPXd{hF; z&2#08ZnBP!W(HQowp#CHPOR(uQ;eFDH+yXip3ja4a&5(Cz8mfO1N6LXzWnyKBPu8R zuV5wGA>cw@uu*MZcKDHpd$R6!h}zli3Lr|`{j#~}KM?>*#*1ixB_l#PB$R{d4kXOJ zw6?qGcG1J$n4el&qomM=r3EXEZ1b`&M|&MF{YMr4KF9FPSrPF73Pz$nZ~ONPeI2ng zj24xHH>Rg(+XGj;(t{G%v|kOSY8|DOqX~HaG&4n)0O9Gy_UYAmP(Qr3W?n?5eXIQ4 zE8QX;!ETOG(Cs~Je)IlO8^#2dSE7!H-Upmzu)M5`xhp7%At(4E5aOeJ*sgf~&QdGOtxK%$!KrQ!pt_hDZ zSp5MBawPs!v#7VO*dtNBr6;`c(TV+6RF&CLxBhzluRwUso9FgdzrI=Dj_4^X)P3ZMcAAAmn-q!^jaW$_Sv9Z3cP$^ivnaPcvwvZDa* zkM;K>!%B_4yW3SB?*^%dO9`o@aHmyinJpS0?SU%q`QbKQ-w_tVbQ)0jX?$$?5y-IS z(?SS=!Ql)2vunk`<;oqr2>j}g0TVnpi(Z2krs(AWyts~6n%Ek!BWsRz zI)hENX}is@LZz>>%LMls-Tkcmu4lTS0<+tgw(@{Pw5C%b{a}HlazPCq%$IJC4p!)s zdDY1NShu$zT<^4_u*gN^=%fgKa2UV1XWj6piZ(wwZFJ9sORKL4_ZPf@-2yL4_lq1jpPcoz1z4 z{C&x>-bCyIrePjzM(p)Gw-P+8#6%009T~slm+`FuQ4pa{?%L%`{TS4UiO@S8<@M;$ zCifYpRwXFjYeN&ml>~UpL8{Z-dD-UV(EBgOzfAx#s^@XC7U*?MAUPR zHN4XZ4kjI=#ZlnNvbG?)pAqnv?djpGEf2pi*tWf&c2zTWojr3OI$538)V%gz;m)xL zeClnXkM@sDX8Xh+;1ub%⁣@#g5NAdr<#p58!(< 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 literal 0 HcmV?d00001 diff --git a/html/Bilder/calendar_lines.png b/html/Bilder/calendar_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c1954ac9f2a63bdef03b776687e97a42967157 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^OhBx|!3HG#1u~O>6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$S5uFMGaB5^r6K|)Mn|As&R*ZyAL sHfgeCb#?Vl2_T37;(bO21_lfakGHWeHQ9eo9jJ-H)78&qol`;+0IhQ=7ytkO literal 0 HcmV?d00001 diff --git a/html/Bilder/calendar_lines1.png b/html/Bilder/calendar_lines1.png new file mode 100644 index 0000000000000000000000000000000000000000..aefe293ad273f64d9187a459157ef19bea75751f GIT binary patch literal 528 zcmV+r0`L8aP)EX>4Tx04R}tkv&MmKpe$iTct&+BJCjJkfA!+MMWHI6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0DrT}RI?`msG4PD zQb{3~UloF{2w?~j3?L#gQ=b#XG(5-GJ$!t6^ClDu?Zdk+{#50?g z&Uv3W%F2>Ld`>)J&;^Mfxh}i>#<}FMpJzsmY-XM~N-UJRSngt0HdNwi;+Udpl<&{E ztZ?4qtXAu+eNX0S*p< z@e*aPd%Qc;-P^xs+Wq|iTg!5th_yfJ00006VoOIv00000008+zyMF)x010qNS#tmY z3ljhU3ljkVnw%H_001CKL_t&-(_>&51p@;ZdwYAi7#J8BSXfzEzcMf|FaQ7{@B+J( SseH!(0000+a#?TH+c} zl9E`GYL#4+3Zxi}42+C*4J>pG%|i? + + + Drop Am See 2023 + + + + + + + + + +
"; + $HelferName = ''; + $HelferEmail = ''; + $HelferHandy = ''; + $HelferPasswort = ''; + $HelferPasswort2 = ''; + + //die('

"; + } + } else { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + + +} + + +?> + +

Hier können Sie sich selbst einen Account als Helfer anlegen.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Helferdaten
Name
+ +
Email
+ +
Handy
+ +
Passwort
+ +
Passwort wiederholen
+ +
Helferlevel
+ +
+ +
+ + + +
+ + + + + + + diff --git a/html/DecodeToken.php b/html/DecodeToken.php new file mode 100644 index 0000000..ff1994f --- /dev/null +++ b/html/DecodeToken.php @@ -0,0 +1,46 @@ + + + + + + \n"; +echo "iv: $encrypted_iv
\n"; + +// Erstellen eines Cipher-Objekts für die Verschlüsselung +$cipher_method = "AES-256-CBC"; +$iv_length = openssl_cipher_iv_length($cipher_method); +$iv = base64_decode($encrypted_iv); +$cipher_options = OPENSSL_RAW_DATA; +$cipher_key = openssl_digest($secret_key, 'SHA256', true); + +// Entschlüsseln des verschlüsselten Textes +$decoded_cipher_text = base64_decode($encrypted_data); +$iv = base64_decode($encrypted_iv); +$iv = substr($decoded_cipher_text, 0, $iv_length); +$cipher_text = substr($decoded_cipher_text, $iv_length); +$decrypted_email = openssl_decrypt($cipher_text, $cipher_method, $cipher_key, $cipher_options, $iv); + +// Verifikationsstring überprüfen und entfernen +$verification_length = strlen($secret_verification); +if(substr($decrypted_email, -$verification_length) == $secret_verification) { + $decrypted_email = substr($decrypted_email, 0, -$verification_length); +} + +// Ausgabe der entschlüsselten E-Mail-Adresse +echo "E-Mail-Adresse: ", $decrypted_email, "
\n"; + +} else { + +echo "Kein gültiges Token!
"; +} + +?> + diff --git a/html/EmailZuToken.php b/html/EmailZuToken.php new file mode 100644 index 0000000..97a23be --- /dev/null +++ b/html/EmailZuToken.php @@ -0,0 +1,218 @@ +'; + exit; +} + +function validate_email($email) { + // Prüfen, ob die Email-Adresse syntaktisch gültig ist + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + return false; + } + + // Prüfen, ob das @-Symbol enthalten ist + if (strpos($email, '@') === false) { + return false; + } + + // Prüfen, ob der Teil nach dem @-Symbol eine gültige Domain enthält + $parts = explode('@', $email); + $domain = $parts[1]; + if (!filter_var($domain, FILTER_VALIDATE_DOMAIN)) { + return false; + } + + // Alle Checks bestanden + return true; +} + + +// wird immer auf 2 (Teilnehmer) gesetzt und wird auch nicht gespeichert, wenn anders gesetzt +// andere level muessen jedes Mal gesetzt werden +$level=2; + +if(isset($_POST['helfer-status'])) { + $level=$_POST['helfer-status']; +} + +// nicht sicher, wo so ein default-text herkommen sollte +// oder ob es tatsächlich einen geben sollte +$email_subject="Drop am See beginnt bald!"; +if(isset($_POST['email-subject'])) { + $email_subject=$_POST['email-subject']; +} + +$email_cc="drophelfer@gmail.com"; +if(isset($_POST['email-cc'])) { + $email_cc=$_POST['email-cc']; +} + +$email_text=" +Lieber Teilnehmer, +trage dich bitte mit folgendem Link für eine Stunde pro Person als Helfer bei uns ein.Wir verschicken eine Mail pro Emailaddresse, also bitte für alle, die mit dieser Emailaddresse angemeldet sind. + +Danke für deine Mithilfe! + +XXtokenXX + +Du kannst dich auch später wieder über den Link einloggen und die Schicht ändern. + +Viele Grüße, +dein Drop am See Team +"; + +if(isset($_POST['email-text'])) { + $email_text=$_POST['email-text']; +} + +$sendmail=0; +if(isset($_POST['sendmail'])) { + $sendmail=$_POST['sendmail']; +} + + +?> + + + Helfer Drop am See: Email Tokens generieren + + + + + + + + + + +
+

+

Emails mit Login-Link zur HelferDB generieren

+Generiert Tokens (bzw URLs mit Token) aus einer Liste von Email-Addressen.
+Bei Klick auf den generierten Link wird sofort ein Account zur Email angelegt.
+Als Passwort wird das Token gesetzt. Man kann sich mit dem Link danach wieder in den selben Account einloggen. +

+

+!! Emails werden erst verschickt, wenn die Checkbox unten angeklickt ist +

+ +
+

+ + +

+ Subject der Email:
+ +

+ CC (Kopie) der Email geht an:
+ +

+ Emailtext (XXtokenXX an die Stelle schreiben, an der der Link im Emailtext stehen soll): +

+ +

+

+Liste von Emails, an die Anschreiben verschickt wird (Eine Email pro Zeile, nur die Email xxx@yyy.zz, keine Leerzeichen):
+
+

+
+ + +
+
+ +
+

+"; + echo $sendmail ."
"; + echo "=======================================
"; + echo "To: ".$decrypted_data['email']." (level: ".$decrypted_data['level']."):
"; + echo "CC: ".$email_cc."
"; + echo "
".$email_subst_text."

"; + echo "$email: $token_url (check: ".$decrypted_data['email'].", lv: ".$decrypted_data['level'].")
"; + } else { + // Email verschicken - send mail + $to=$decrypted_data['email']; + $from="root"; + $headers = 'From: ' . $from. "\r\n"; + $headers .= 'CC: ' . $email_cc . "\r\n"; + if (mail($to, $email_subject, $email_subst_text, $headers)) { + echo "Die E-Mail an $to wurde erfolgreich versendet."; + error_log(date('Y-m-d H:i') . "(AdminID:$AdminID) Name: $HelferName (HelferID:$HelferID) hat Email mit Link verschickt an: $to mit CC an: $email_cc\n",3,LOGFILE); + } else { + echo "Beim Versenden der E-Mail an $to ist ein Fehler aufgetreten."; + } + } + } +} + + +?> + + + + + + + + \n"; +# // encode +# $encrypted_data=encode_string($secret_key, $email,$secret_verification); +# $decrypted_data = decode_string($secret_key, $encrypted_data,$secret_verification); +# // Ausgabe des verschlüsselten Textesin der URL +# echo "$email: $urlprefix/$linktext(check: $decrypted_data )
"; +# exit; +#} + +?> diff --git a/html/Info.php b/html/Info.php new file mode 100644 index 0000000..a7a1532 --- /dev/null +++ b/html/Info.php @@ -0,0 +1,13 @@ + + + + Helfer Drop am See Home + + + + + + + + + diff --git a/html/Kalender-all.html b/html/Kalender-all.html new file mode 100644 index 0000000..ff31ce3 --- /dev/null +++ b/html/Kalender-all.html @@ -0,0 +1,198 @@ + + + + Helferdienste + + + + + + + + + + + +
+
+  + Mehrtagesdienste anzeigen: + Einfärben: + Filtern: +
+ +
+ +
+
+
 
+
 
+
+
+
+
+
+
+
+ +
+
+
+
+ + + diff --git a/html/Kalender.php b/html/Kalender.php new file mode 100644 index 0000000..730d348 --- /dev/null +++ b/html/Kalender.php @@ -0,0 +1,194 @@ + + + + Helferdienste + + + + + + + + + + + +
+
+  + Mehrtagesdienste anzeigen: + Einfärben: + Filtern: +
+ Achtung: Ende Nachtdienste wird falsch angezeigt (immer Mitternacht) - Popup-Fenster zeigt richtige Zeiten +
+ +
+
+
 
+
 
+
+
+
+
+
+
+
+ +
+
+
+
+ + + diff --git a/html/MeineSchichten.php b/html/MeineSchichten.php new file mode 100644 index 0000000..d41f51e --- /dev/null +++ b/html/MeineSchichten.php @@ -0,0 +1,352 @@ + + + + Admin Drop am See + + + + + + + +
+". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoMeineSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer = $zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + +} + + +if(isset($_GET['InfoAlleSchichtID'])) +{ + $InfoAlleSchichtID = $_GET['InfoAlleSchichtID']; + UNSET($InfoMeineSchichtID); + //echo "". $SchichtID . "
"; + + $zeile = DetailSchicht($db_link,$InfoAlleSchichtID); + + $Was = $zeile['Was']; + $Wo = $zeile['Wo']; + $Dauer=$zeile['Dauer']; + $Leiter = $zeile['Name']; + $LeiterHandy = $zeile['Handy']; + $LeiterEmail = $zeile['Email']; + $Info = $zeile['Info']; + + + + // Beteiligte Helfer Holen + $db_erg = BeteiligteHelfer($db_link,$InfoAlleSchichtID); + + + $x=0; + + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + $MitHelferID[$x] = $zeile['HelferID']; + $MitHelfer[$x] = $zeile['Name']; + $MitHelferHandy[$x]= $zeile['Handy']; + $x++; + } + + +} + + +/// Logout +//////////////////////////////////////////////////////// +if(isset($_POST['logout'])) +{ + unset($_SESSION["HelferID"]); + //$_POST['login'] = 1; +} + +/// Login +//////////////////////////////////////////////////////// +if(isset($_POST['login'])) +{ + $messages = []; + // Eingaben überprüfen: + //if(!preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $HelferName)) { + // $messages[] = 'Bitte prüfen Sie die eingegebenen Namen'; + //} + + $HelferName = $_POST['helfer-name']; + $HelferEmail = $_POST['helfer-email']; + $HelferPasswort = $_POST['helfer-passwort']; + + if(empty($messages)) + { + HelferLogin($db_link,$HelferEmail,$HelferPasswort, 0 ); + } + else + { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + +} + + + +if(!isset($_SESSION["HelferID"])) +{ + +?> +
+ +
+ Login + + + + + + + + +
Email
+ +
Passwort
+ +
+ + +
+ +

+ + +
+
    '; + foreach($messages as $message) { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + +} + + + +// Helferliste Anzeigen +//////////////////////////////////////////////////////// + +?> + + + +
+'); + } + else + { + // Fehlermeldungen ausgeben: + echo '
    '; + foreach($messages as $message) + { + echo '
  • '.htmlspecialchars($message).'
  • '; + } + echo '
'; + } + + +} + +/// Ausgabe auf Deutsch umstellen +///////////////////////////////////////////////////////////////////////// + + DatenbankAufDeutsch($db_link); + +/// Alle Schichten Des Helfers Anzeigen +//////////////////////////////////////////////////////// + + +$db_erg = AlleSchichtenEinesHelfers($db_link,$HelferID); + +if ( ! $db_erg ) +{ + echo "AlleSchichten des Helfes ungültige Abfrage"; + die('Ungültige Abfrage: ' . mysqli_error()); +} + + $iSQLCount = mysqli_num_rows($db_erg); + //$iSQLCount = 3; + +echo ''; + + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + + + +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + + //echo ''; + echo ''; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + +} +echo "
". "Meine Schichten (".$iSQLCount." Schichten)
". "Von" . "". "Bis" . "". "Del" . "
". $zeile['Was'] . "". $zeile['Ab'] . "". $zeile['Bis'] . "". "" . "
"; + +echo "

"; + +$iAlleSchichtenCount = AlleSchichtenCount($db_link); +$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link); + +echo ''; + echo ""; + echo ""; + echo ""; +echo "
".''. " Alle Schichten der Con (".$iBelegteSchichtenCount."/".$iAlleSchichtenCount.")
"; + + +mysqli_free_result( $db_erg ); + + +?> + +
+
+ + + diff --git a/html/ReadLog.php b/html/ReadLog.php new file mode 100644 index 0000000..5379038 --- /dev/null +++ b/html/ReadLog.php @@ -0,0 +1,62 @@ + + + + Helfer - Logs + + + + + 0) { + echo ' + '; +} + // print top of page if we are logged in and not redirecting + echo " \n \n"; + echo '
'."\n"; + echo '

Helferdaten - Log

'; + echo '

Hier werden alle Aktionen, die einen Helfer betreffen aufgelistet

'; + echo ''."\n"; + + //check for admin status + $HelferID = $_SESSION["HelferID"]; + $AdminID = $_SESSION["AdminID"]; + include 'SQL.php'; + $db_link = mysqli_connect ( MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK ); + DatenbankAufDeutsch($db_link); + + $db_erg = Helferdaten($db_link,$HelferID); + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + $HelferName=$zeile['Name']; + $HelferIsAdmin=$zeile['Admin']; + } + + // Wir suchen nach HelferID: - wenn das Admin Flag gesetzt ist, kann man den Suchstring auf etwas anderes aendern + $regex = "\(HelferID:$HelferID\)"; + if($HelferIsAdmin){ + if(isset($_POST['suche']) || isset($_GET['suche'])){ + $regex=$_POST['suche'].$_GET['suche']; + } + echo "
"; + echo "Nur Admins: Suchbegriff (Per Default der selbe Suchtext, wie bei nicht-Admin Helfern):
\n"; + echo "Der Suchbegriff ist ein Regulärer Ausdruck

"; + echo ""; + } + + $regex = "/"."$regex"."/"; + foreach(file(LOGFILE) as $line) { + #echo "not: $line
\n"; + if(preg_match($regex,$line,$matches)){ + echo "
"; + } + } + ?> +
$line
+ + diff --git a/html/SQL.php b/html/SQL.php new file mode 100644 index 0000000..12b57d5 --- /dev/null +++ b/html/SQL.php @@ -0,0 +1,935 @@ + +".$HelferPasswort.""; + $PasswortHash = password_hash($HelferPasswort, PASSWORD_DEFAULT); + + + // Neuen Helfer anlegen + $sql = "INSERT INTO Helfer(Name,Email,Handy,Status,BildFile,DoReport,Passwort,HelferLevel) VALUES ('$HelferName','$HelferEmail','$HelferHandy',1,'',0,'$PasswortHash','$HelferLevel')"; + $db_erg = mysqli_query( $db_link, $sql ); + error_log(date('Y-m-d H:i') . " CreateHelfer: $HelferName angelegt mit Email $HelferEmail Handy $HelferHandy \n",3,LOGFILE); + return $db_erg; + +}; + +// testet fuer urllogin, ob Helfer bereits existiert +function HelferIstVorhanden ($db_link,$Email) { + $Email=mysqli_real_escape_string($db_link, $Email); + $sql = "SELECT count(HelferID) as Anzahl FROM Helfer Where Email = '" . $Email."'"; + $db_erg = mysqli_query( $db_link, $sql ); + $zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC); + return $zeile['Anzahl']; + +}; + +//TODO: pruefen, ob Helfer bereits eingeloggt +function HelferLogin($db_link,$HelferEmail,$HelferPasswort,$HelferStatus) +{ + $HelferEmail=mysqli_real_escape_string($db_link, $HelferEmail); + $HelferStatus=mysqli_real_escape_string($db_link, $HelferStatus); + + //echo "Test
"; + // Helfer Suchen + $sql = "Select HelferID,Admin,Name,Passwort,HelferLevel From Helfer Where Email='".$HelferEmail."'"; + //echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Login ungueltige Abfrage"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + $HelferPasswort = "€".$HelferPasswort."ß"; + //echo "".$HelferPasswort."
"; + //echo "".$zeile['Passwort']."
"; + if(password_verify( $HelferPasswort , $zeile['Passwort']) ) + { + $_SESSION["HelferID"] = $zeile['HelferID']; + $_SESSION["HelferName"] = $zeile['Name']; + //TODO: das sollte nur gesetzt werden, wenn der Helfer Admin ist + $_SESSION["AdminID"] = $zeile['HelferID']; + $_SESSION["AdminStatus"] = $zeile['Admin']; + $_SESSION["HelferLevel"] = $zeile['HelferLevel']; + return 1; + } + else + { + echo "Falsches Passwort
"; + return 0; + } + } + + +} + +// Liste der Helfer fuer Admin-Seite +//TODO: HelferLevel +function HelferListe($db_link) +{ + + $sql = "SELECT HelferID,Name FROM Helfer"; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Helferliste ungueltige Abfrage"; + die('Unueltige Abfrage: ' . mysqli_error($db_link)); + } + + return $db_erg; + +}; + + +function Helferdaten($db_link,$HelferID) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + + $sql = "SELECT * FROM Helfer Where HelferID =".$HelferID; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Helferdaten ungueltige Abfrage
\n"; + echo "sql:$sql
\n"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + return $db_erg; + +}; + + + +function HelferdatenAendern($db_link,$HelferName,$HelferEmail,$HelferHandy,$HelferNewPasswort,$HelferID,$HelferIsAdmin=-1,$AdminID=0) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + $HelferName=mysqli_real_escape_string($db_link, $HelferName); + $HelferEmail=mysqli_real_escape_string($db_link, $HelferEmail); + $HelferHandy=mysqli_real_escape_string($db_link, $HelferHandy); + + if( $HelferNewPasswort == "") + { + //$sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy' ".($HelferIsAdmin!=-1)?',Admin='$HelferIsAdmin.':'." Where HelferId=".$HelferID; + if ($HelferIsAdmin==-1) + { + $sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy' Where HelferId=".$HelferID; + } + else + { + $sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy',Admin=$HelferIsAdmin Where HelferId=".$HelferID; + } + echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + echo "
  • Helferdaten geändert
  • "; + if($AdminID!=0) + { + error_log(date('Y-m-d H:i') . "(Admin $AdminID) Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Admin: $HelferIsAdmin\n",3,LOGFILE); + } + else + { + error_log(date('Y-m-d H:i') . "Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Admin: $HelferIsAdmin\n",3,LOGFILE); + } + } + else + { + $HelferNewPasswort = "€".$HelferNewPasswort."ß"; + $PasswortHash = password_hash($HelferNewPasswort, PASSWORD_DEFAULT); + if ($HelferIsAdmin==-1) + { + $sql = "UPDATE Helfer SET Name='".$HelferName."',Email='".$HelferEmail."',Handy='".$HelferHandy."',Passwort='".$PasswortHash."' Where HelferId=".$HelferID; + } + else + { + $sql = "UPDATE Helfer SET Name='$HelferName',Email='$HelferEmail',Handy='$HelferHandy',Passwort='$PasswortHash',Admin=$HelferIsAdmin Where HelferId=".$HelferID; + } + //echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + echo "
  • Passwort geändert
  • "; + if($AdminID!=0) + { + error_log(date('Y-m-d H:i') . "(Admin $AdminID) Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Passwort: neu gesetzt\n",3,LOGFILE); + } + else + { + + error_log(date('Y-m-d H:i') . "Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy Passwort: neu gesetzt\n",3,LOGFILE); + } + + } + + if ( ! $db_erg ) + { + echo "HelferdatenAendern ungueltiges Statement"; + echo $sql; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + + return $db_erg; + +}; + + + + +function AlleSchichten($db_link,$Sort,$HelferLevel=1) +{ + + $Sort=mysqli_real_escape_string($db_link, $Sort); + + if($Sort=='1') + { + $sql = "select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Dienst.DienstID=SchichtUebersicht.DienstID and Dienst.Helferlevel=$HelferLevel order by Von"; + } + else + { + $sql = "select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Dienst.DienstID=SchichtUebersicht.DienstID and Dienst.Helferlevel=$HelferLevel order by Was,Von"; + } + + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "AlleSchichten ungueltige Abfrage"; + echo $Sort; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + + return $db_erg; + +}; + +function AlleSchichtenCount($db_link, $HelferLevel=1) +{ + + //$sql = "select SUM(Soll) As Anzahl from SchichtUebersicht where HelferLevel=$HelferLevel"; + $sql = "select Sum(Soll) as Anzahl, HelferLevel from SchichtUebersicht,Dienst Where SchichtUebersicht.DienstID=Dienst.DienstID and HelferLevel=$HelferLevel"; + + + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "AlleSchichtenCount ungueltige Abfrage"; + echo $Sort; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + $zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC); + return $zeile['Anzahl']; + +}; + + +function AlleBelegteSchichtenCount($db_link,$HelferLevel=1) +{ + + $sql = "select Count(HelferID) As Anzahl from EinzelSchicht,Schicht,Dienst Where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID and HelferLevel=$HelferLevel"; + + + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "AlleSchichtenCount ungueltige Abfrage"; + echo $Sort; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + $zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC); + return $zeile['Anzahl']; + +}; + + +function AlleSchichtenImZeitbereich($db_link,$Von,$Bis,$HelferLevel=1) +{ +// SchichtID, Was, Ab, Bis, Ist, Tag, Soll - Ist und Soll sind die HelferStunden + $Von=mysqli_real_escape_string($db_link, $Von); + $Bis=mysqli_real_escape_string($db_link, $Bis); + $HelferLevel=mysqli_real_escape_string($db_link, $HelferLevel); + $sql_helferlevel="and Dienst.HelferLevel=$HelferLevel"; + if($HelferLevel==-1){ + $sql_helferlevel=""; + } + + $sql = "select SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') As Tag, Soll from Dienst,SchichtUebersicht where Von >= '".$Von."' and Von <'".$Bis."' and Dienst.DienstID=SchichtUebersicht.DienstID $sql_helferlevel order by Was,Von"; + error_log($sql); + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "AlleSchichtenImZeitbereich ungueltige Abfrage
    "; + echo $sql; + die('
    Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + + return $db_erg; + +}; + + +function AlleSchichtenEinesHelfers($db_link,$HelferID) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + + $sql = "select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." order by Von"; + + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "AlleSchichtenEinesHelfers ungueltige Abfrage"; + echo $HelferID; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + + return $db_erg; + +}; + +function HelferLoeschen($db_link,$HelferID,$AdminID) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + + + $db_erg = Helferdaten($db_link,$HelferID); + while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) + { + + $HelferName=$zeile['Name']; + //echo "HelferName=$HelferName
    "; + } + + $db_erg = AlleSchichtenEinesHelfers($db_link,$HelferID); + + $AnzahlHelferschichten=mysqli_num_rows($db_erg); + if($AnzahlHelferschichten==0) + { + $sql="Delete from Helfer where HelferID='$HelferID'"; + $db_erg = mysqli_query( $db_link, $sql ); + if( ! $db_erg ) + { + echo "Helfer $HelferName konnte nicht gelöscht werden
    "; + echo "$sql
    "; + return -2; + } + else + { + + echo "Helfer $HelferName (HelferID:$HelferID) wurde erfolgreich geloescht
    "; + error_log(date('Y-m-d H:i') . "(Admin $AdminID) Helfer loeschen: Name: $HelferName (HelferID:$HelferID)\n",3,LOGFILE); + return 1; + } + } + else + { + echo "Helfer $HelferName hat noch $AnzahlHelferschichten Schichten. Bitte erst die Schichten löschen
    "; + return -1; + } + +} + +function SchichtIdArrayEinesHelfers($db_link,$HelferID) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + + // Array, um Zeilen mit von mir belegten Schichten in der Schichtuebersicht einfaerben zu koennenn + $sql = "SELECT SchichtID FROM EinzelSchicht WHERE HelferID = $HelferID"; + //print_r($sql); + $db_erg = mysqli_query( $db_link, $sql ); + $schichtIDs = array(); + while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_NUM)) { + $schichtIDs[] = $zeile[0]; + } + return($schichtIDs); +} + +function AlleSchichtenEinesHelfersVonJetzt($db_link,$HelferID) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); +#TODO: fix GETDATE() array to string conversion + $sql = "select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." and Bis>'".GETDATE()."' order by Von"; + + //$sql = "select EinzelSchicht.SchichtID ,EinzelSchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,DATE_FORMAT(Bis,'%a %H:%i') AS Bis FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." and Bis>'2023-05-20' order by Von"; + + //echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "AlleSchichtenEinesHelfers ungueltige Abfrage"; + echo $HelferID; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + + return $db_erg; + +}; + +function SchichtenSummeEinesHelfers($db_link,$HelferID) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + + //$sql = "select count Schicht.Dauer as Anzahl FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID." order by Von"; + $sql = "select count(*) as Anzahl, SUM(TIME_TO_SEC(Schicht.Dauer)) as Dauer FROM EinzelSchicht,Schicht,Dienst where EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID = Dienst.DienstID and HelferID=".$HelferID; + //echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "SchichtenSummeEinesHelfers ungueltige Abfrage"; + echo $HelferID; + echo $sql; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + + return $db_erg; + +}; + +function LogSchichtEingabe($db_link, $HelferID, $SchichtId, $EinzelSchichtId, $Aktion, $AdminID=0) +{ + + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + $SchichtId=mysqli_real_escape_string($db_link, $SchichtId); + $EinzelSchichtId=mysqli_real_escape_string($db_link, $EinzelSchichtId); + $Aktion=mysqli_real_escape_string($db_link, $Aktion); + $AdminID=mysqli_real_escape_string($db_link, $AdminID); + + $sql = "SELECT Schicht.Von, Schicht.Bis, Dienst.Was, Helfer.Name + FROM EinzelSchicht + JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID + JOIN Dienst ON Schicht.DienstID = Dienst.DienstID + JOIN Helfer ON EinzelSchicht.HelferID = Helfer.HelferID + WHERE EinzelSchicht.HelferID = $HelferID + AND ( Schicht.SchichtID = $SchichtId OR EinzelSchicht.EinzelSchichtID = $EinzelSchichtId) + "; + //error_log(date('Y-m-d H:i') . " " . $sql ."\n",3,LOGFILE); + $db_erg = mysqli_query( $db_link, $sql ); + + if (mysqli_num_rows($db_erg) > 1) { + echo "HelferSchichtZuweisen: Es wurden mehr als eine Zeile zurueckgegeben\n
    "; + # Fehler geht ins normale Error-Management, nicht ins Logfile + error_log(date('Y-m-d H:i') . " HelferSchichtZuweisen: Es wurden mehr als eine Zeile zurueckgegben.\n",0); + } else if (mysqli_num_rows($db_erg) == 1) { + $row = mysqli_fetch_assoc($db_erg); + $Von = $row["Von"]; + $Bis = $row["Bis"]; + $Was = $row["Was"]; + $HelferName= $row["Name"]; + } else { + echo "Es wurde keine Zeile zurueckgegeben."; + } + + if($AdminID==0) + { + error_log(date('Y-m-d H:i') . " HelferSchicht: $HelferName (HelferID:$HelferID) hat Dienst $Was von $Von bis $Bis $Aktion.\n",3,LOGFILE); + } + else + { + error_log(date('Y-m-d H:i') . " HelferSchicht: Admin:$AdminID hat von $HelferName (HelferID:$HelferID) den Dienst $Was von $Von bis $Bis $Aktion.\n",3,LOGFILE); + } +} + +function HelferSchichtZuweisen($db_link,$HelferID,$SchichtId,$AdminID=0) +{ + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + $SchichtId=mysqli_real_escape_string($db_link, $SchichtId); + + // Abfrage, ob bereits eine Einzelschicht in der selben Schicht vom Helfer existiert + $sql = "SELECT EinzelSchichtID from EinzelSchicht WHERE SchichtID='$SchichtId' and HelferID='$HelferID'"; + + $db_erg = mysqli_query( $db_link, $sql ); + + if(mysqli_num_rows($db_erg) > 0) { + echo "HelferSchichtZuweisen: Schicht existiert bereits!"; + return false; + } + + // Helfer Schicht zuweisen + $sql = 'INSERT INTO EinzelSchicht(SchichtID,HelferID) VALUES (\'' + . $SchichtId . '\',\'' + . $HelferID . '\')'; + //echo ''; + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "HelferSchichtZuweisen ungueltige Abfrage"; + echo $HelferID; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + LogSchichtEingabe($db_link, $HelferID, $SchichtId, -1, "eingetragen",$AdminID); + + return $db_erg; + +}; + +function HelferVonSchichtLoeschen($db_link,$HelferID,$EinzelSchichtID,$AdminID=0) +{ + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + $SchichtId=mysqli_real_escape_string($db_link, $SchichtId); + + + // Log vor Löschen, damit Einzelschicht abgefragt werden kann + LogSchichtEingabe($db_link, $HelferID, -1, $EinzelSchichtID, "entfernt",$AdminID); + + // Lösche Einzelschicht + $sql = "Delete From EinzelSchicht Where EinzelSchichtID =".$EinzelSchichtID; + //echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + + + return $db_erg; + +}; + +function HelferVonSchichtLoeschen_SchichtID($db_link,$HelferID,$SchichtID,$AdminID=0) +{ + $HelferID=mysqli_real_escape_string($db_link, $HelferID); + $SchichtId=mysqli_real_escape_string($db_link, $SchichtId); + + + // Log vor Löschen, damit Einzelschicht abgefragt werden kann + LogSchichtEingabe($db_link, $HelferID, $SchichtID, -1, "entfernt",$AdminID); + + // Lösche Einzelschicht + $sql = "Delete From EinzelSchicht Where SchichtID = $SchichtID and HelferID = $HelferID limit 1;"; + //echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + + return $db_erg; + +}; + + + + + +function DetailSchicht($db_link,$InfoSchichtID) +{ + $InfoSchichtID=mysqli_real_escape_string($db_link, $InfoSchichtID); + + + $sql = "select Was,Wo,Info,Name,Handy,Email,DATE_FORMAT(Dauer,'%H:%i') AS Dauer FROM Dienst,Schicht,Helfer where Dienst.DienstID=Schicht.DienstID AND Helfer.HelferID=Dienst.Leiter And SchichtID=".$InfoSchichtID; + + //echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "Details ungueltige Abfrage "; + echo $InfoSchichtID; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + $zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC); + return $zeile; + +}; + + +function BeteiligteHelfer($db_link,$InfoSchichtID) +{ + $InfoSchichtID=mysqli_real_escape_string($db_link, $InfoSchichtID); + + $sql = "select Helfer.HelferID,Name,Handy FROM EinzelSchicht,Helfer where EinzelSchicht.HelferID=Helfer.HelferID And SchichtID=".$InfoSchichtID; + + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "Details ungueltige Abfrage "; + echo $InfoSchichtID; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + return $db_erg; + +}; + +function GetDienste($db_link) +{ + $sql = "SELECT DienstID, Was, Wo, Info, Leiter, ElternDienstID, HelferLevel FROM Dienst order By Was"; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "GetDienste ungueltige Abfrage"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + return $db_erg; +} + +function GetDiensteChilds($db_link,$DienstID) +{ + $DienstID=mysqli_real_escape_string($db_link, $DienstID); + + $sql = "SELECT DienstID, Was, Wo, Info, Leiter FROM Dienst where ElternDienstID='".$DienstID."' order by Was"; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "GetDienste ungueltige Abfrage"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + return $db_erg; +} + + +function ChangeDienst($db_link,$DienstID,$Was,$Wo,$Info,$Leiter,$Gruppe,$HelferLevel) +{ + $DienstID=mysqli_real_escape_string($db_link, $DienstID); + $Was=mysqli_real_escape_string($db_link, $Was); + $Wo=mysqli_real_escape_string($db_link, $Wo); + $Info=mysqli_real_escape_string($db_link, $Info); + $Leiter=mysqli_real_escape_string($db_link, $Leiter); + $Gruppe=mysqli_real_escape_string($db_link, $Gruppe); + $HelferLevel=mysqli_real_escape_string($db_link, $HelferLevel); // int (1,2) Teilnehmer oder Dauerhelfer + + $sql = "UPDATE Dienst SET Was='".$Was."', Wo='".$Wo."', Info='".$Info."', Leiter=".$Leiter.", ElternDienstID=".$Gruppe." where DienstID=".$DienstID; + + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Fehler Change Dienst"; + echo $sql; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } +} + +function NewDienst($db_link,$DienstID,$Was,$Wo,$Info,$Leiter,$Gruppe,$HelferLevel) +{ + + $DienstID=mysqli_real_escape_string($db_link, $DienstID); + $Was=mysqli_real_escape_string($db_link, $Was); //Name des Dienstes + $Wo=mysqli_real_escape_string($db_link, $Wo); //Ort + $Info=mysqli_real_escape_string($db_link, $Info); //vollstaendige Beschreibung + $Leiter=mysqli_real_escape_string($db_link, $Leiter); // int HelferID des Leiters + $Gruppe=mysqli_real_escape_string($db_link, $Gruppe); // ?? + $HelferLevel=mysqli_real_escape_string($db_link, $HelferLevel); // int (1,2) Teilnehmer oder Dauerhelfer + + + $sql = "INSERT INTO Dienst (Was, Wo, Info, Leiter, ElternDienstID, HelferLevel) values ('$Was','$Wo','$Info',$Leiter,$Gruppe,$HelferLevel)"; + + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Fehler New Dienst"; +// echo $sql; + $err= mysqli_error($db_link); + die('Ungueltige Abfrage: ' . $err); + error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName konnte Schicht nicht angelegt mit Anfrage $sql Grund: $err \n",3,LOGFILE); + + } else { + error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName(ID:HelferID) hat Dienst angelegt mit Was: $WAS Wo: $Wo Info: $Info Leiter: $Leiter Gruppe $Gruppe, HelferLevel $HelferLevel \n",3,LOGFILE); + } +} + +function DeleteDienst($db_link,$DienstID,$Rekursiv) +{ + $DienstID=mysqli_real_escape_string($db_link, $DienstID); + + + if ($Rekursiv) + { + return false; + } + else + { + // Pruefen ob noch Schichten eingetragen sind + $sql = "SELECT SchichtID FROM Schicht where DienstID=".$DienstID; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Fehler DeleteDienst"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + if( mysqli_num_rows($db_erg)==0) + { + + // Eintrag löschen + $sql = "DELETE FROM Dienst where DienstID=".$DienstID; + + echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Fehler DeleteDienst"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + return true; + + } + else + { + return false; + } + } + +} + +function GetSchichtenEinesDienstes($db_link,$DienstID) +{ + $DienstID=mysqli_real_escape_string($db_link, $DienstID); + + + //$sql = "SELECT SchichtID,Von,Bis,Soll,DATE_FORMAT(Von,'%a %H:%i') AS TagVon FROM Schicht where DienstID=".$DienstID; + $sql = "SELECT SchichtID,Von,Bis,Soll,DATE_FORMAT(Von,'%a %H:%i') AS TagVon, DATE_FORMAT(Von,'%H:%i') AS ZeitVon, DATE_FORMAT(Bis,'%H:%i') AS ZeitBis FROM Schicht where DienstID=".$DienstID; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "GetSchichtenEinesDienstes ungueltige Abfrage"; + echo $sql; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + return $db_erg; +} + +function ChangeSchicht($db_link,$SchichtID,$Von,$Bis,$Soll) +{ + $SchichtID=mysqli_real_escape_string($db_link, $SchichtID); + $Von=mysqli_real_escape_string($db_link, $Von); + $Bis=mysqli_real_escape_string($db_link, $Bis); + $Soll=mysqli_real_escape_string($db_link, $Soll); + + + $sql = "UPDATE Schicht SET Von='".$Von."', Bis='".$Bis."', Soll='".$Soll."' where SchichtID=".$SchichtID; + + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Fehler ChangeSchicht"; + echo $sql; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } +} + +function NewSchicht($db_link,$DienstID,$Von,$Bis,$Soll) +{ + + $DienstID=mysqli_real_escape_string($db_link, $DienstID); + $Von=mysqli_real_escape_string($db_link, $Von); + $Bis=mysqli_real_escape_string($db_link, $Bis); + $Soll=mysqli_real_escape_string($db_link, $Soll); + + /* + if(validateDate($Von)) + { + echo "Keine Schicht erstellt Fehler in Von"; + return; + } + if(validateDate($Bis, DateTime::ATOM)) + { + echo "Keine Schicht erstellt Fehler in Bis"; + return Null; + } + */ + $sql = "INSERT INTO Schicht (DienstID, Von, Bis, Soll) values ('".$DienstID."','".$Von."','".$Bis."',".$Soll.")"; + + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Keine Schicht erstellt"; + //echo $sql; + error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName konnte Schicht nicht angelegt mit $sql \n",3,LOGFILE); + $err=mysqli_error($db_link); + die('Ungueltige Abfrage: ' . $err); + } + else{ + //TODO: DienstID aufloesen + error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName hat Schicht angelegt mit DienstID $DienstID, Von $Von Bis $Bis Soll $Soll \n",3,LOGFILE); + } +} + +function DeleteSchicht($db_link,$SchichtID,$Rekursiv) +{ + $SchichtID=mysqli_real_escape_string($db_link, $SchichtID); + + if ($Rekursiv) + { + return false; + } + else + { + // Pruefen ob noch Helfer auf der Schicht eingetragen sind + $sql = "SELECT Name FROM EinzelSchicht,Helfer where SchichtID=".$SchichtID." and Helfer.HelferID=EinzelSchicht.HelferID"; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Fehler Change Dienst"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + + if( mysqli_num_rows($db_erg)==0) + { + + // Eintrag löschen + $sql = "DELETE FROM Schicht where SchichtID=".$SchichtID; + + echo $sql; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Fehler Change Dienst"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + return true; + } + else + { + return false; + } + } +} + + +function AlleHelferSchichtenUebersicht($db_link) + +{ + $sql="select Helfer.HelferID as AliasHelferID,Name,Email,Handy,Was,SUM(Dauer)/10000 as Dauer from Helfer,EinzelSchicht INNER JOIN Schicht INNER JOIN Dienst where Helfer.HelferID=EinzelSchicht.HelferID and EinzelSchicht.SchichtID=Schicht.SchichtID and Schicht.DienstID=Dienst.DienstID group by Helfer.HelferID,Was"; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "AlleHelferSchichtenUebersicht ungueltige Abfrage"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + return $db_erg; + +} + + +function DatenbankAufDeutsch($db_link) +{ + $sql = "SET lc_time_names = 'de_DE'"; + $db_erg = mysqli_query( $db_link, $sql ); + + if ( ! $db_erg ) + { + echo "ungueltiges umstellen auf Deutsch"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } +}; + + +function HelferLevel($db_link){ + $sql = "select HelferLevel,HelferLevelBeschreibung from HelferLevel"; + $db_erg = mysqli_query( $db_link, $sql ); + if ( ! $db_erg ) + { + echo "Konnte HelferLevel nicht abfragen"; + die('Ungueltige Abfrage: ' . mysqli_error($db_link)); + } + return $db_erg; +} +// TODO: als Array zurueckgeben (CreateHelfer anpassen) +// TODO: +//function HelferLevel($db_link){ +// $sql = "SELECT HelferLevel, HelferLevelBeschreibung FROM HelferLevel"; +// $db_erg = mysqli_query($db_link, $sql); +// if (!$db_erg) { +// echo "Konnte HelferLevel nicht abfragen"; +// die('Ungueltige Abfrage: ' . mysqli_error($db_link)); +// } +// +// $results = array(); +// while ($row = mysqli_fetch_assoc($db_erg)) { +// $results[] = $row; +// } +// +// mysqli_free_result($db_erg); // Freigabe des Ergebnisobjekts +// +// return $results; +//} + + +function DebugAusgabeDbErgebnis($db_erg) +{ + // Ausgabe auf Browser Console + +#if(mysqli_num_rows($db_erg) > 0) { +# $fields = mysqli_fetch_fields($db_erg); +# $field_names = []; +# foreach($fields as $field) { +# $field_names[] = $field->name; +# } +# $rows = array(); +# while($row = mysqli_fetch_row($db_erg)) { +# $rows[] = $row; +# } +# +# $js_code = "console.log('Query results:');"; +# $js_code .= "console.log('" . implode('\t', $field_names) . "');"; +# foreach($rows as $row) { +# $js_code .= "console.log('" . implode('\t', $row) . "');"; +# } +# echo ""; +#} else { +# echo "Keine Ergebnisse gefunden."; +#} +# + + +// direkte ausgabe in Seite +echo ""; +if(mysqli_num_rows($db_erg) > 0) { + // Tabellenkopf ausgeben + echo ""; + $fields = mysqli_fetch_fields($db_erg); + foreach($fields as $field) { + echo ""; + } + echo ""; + + // Tabelleninhalt ausgeben + while($row = mysqli_fetch_row($db_erg)) { + echo ""; + foreach($row as $value) { + echo ""; + } + echo ""; + } +} else { + echo ""; +} +echo "
    " . $field->name . "
    " . $value . "
    Keine Ergebnisse gefunden.
    "; +} + + +?> + diff --git a/html/UrlLogin.php b/html/UrlLogin.php new file mode 100644 index 0000000..69130b1 --- /dev/null +++ b/html/UrlLogin.php @@ -0,0 +1,95 @@ + + + "; +$foot=""; + +$db_link = mysqli_connect ( + MYSQL_HOST, + MYSQL_BENUTZER, + MYSQL_KENNWORT, + MYSQL_DATENBANK + ); +# ist jetzt in _crypt.php, aber aus der anderen Datei, deshalb hier erst +# nur auskommentiert +#function Entschluessle($encrypted_data,$secret_verification,$secret_key){ +# +# // Erstellen eines Cipher-Objekts für die Verschlüsselung +# $cipher_method = "AES-256-CBC"; +# $iv_length = openssl_cipher_iv_length($cipher_method); +# $cipher_options = OPENSSL_RAW_DATA; +# $cipher_key = openssl_digest($secret_key, 'SHA256', true); +# +# // Entschlüsseln des verschlüsselten Textes +# // zuerst base64 entfernen. *kein* urldecode, das passiert durch get/post automatisch +# $decoded_cipher_text = base64_decode($encrypted_data); +# $iv = substr($decoded_cipher_text, 0, $iv_length); +# $cipher_text = substr($decoded_cipher_text, $iv_length); +# $decrypted_email = openssl_decrypt($cipher_text, $cipher_method, $cipher_key, $cipher_options, $iv); +# +# // Verifikationsstring überprüfen und entfernen +# $verification_length = strlen($secret_verification); +# if(substr($decrypted_email, -$verification_length) == $secret_verification) { +# $decrypted_email = substr($decrypted_email, 0, -$verification_length); +# } +# return($decrypted_email); +#} + +if(isset($_GET['token']) || isset($_POST['token']) ) { + // E-Mail-Adresse des Nutzers + $token = $_GET['token']; + //$email = Entschluessle($token,$secret_verification,$secret_key); + $decrypted_data = decode_string($secret_key, $token, $secret_verification); + //error_log("decrytped_data: ". $decrypted_data); + $email=$decrypted_data['email']; + $helfer_level=$decrypted_data['level']; + $success=$decrypted_data['success']; + //error_log("email: ".$email.",level: ".$helfer_level.",success: ".$success); +} else { + echo "$head Kein Token angegeben!
    $foot"; + exit; +} +if($success != 1) { +// if ( $db_erg ) { +// echo ' '; +// } else { + echo "$head Kein gültiges Token!
    $foot"; + exit; + } +//} +//TODO: Variablendoppelung aufloesen und oben gleich einmal setzen +if($success == 1 && $email != ""){ + // Ausgabe der entschlüsselten E-Mail-Adresse + //echo "E-Mail-Adresse: ", $email, "
    \n"; + //echo "Passwort: ",$token,"
    \n"; + $HelferName = $email; + $HelferEmail = $email; + $HelferLevel = $helfer_level; + $HelferHandy = ""; + $HelferPasswort = $token; + + if(!filter_var($HelferEmail, FILTER_VALIDATE_EMAIL)) { + echo 'Problem mit E-Mail-Adresse.'; + exit; + } + error_log("2email: ".$HelferEmail.",level: ".$helfer_level.",success: ".$success); + // Helfer Anlegen, wenn er nicht existiert + if( ! HelferIstVorhanden($db_link,$HelferEmail) ) { + error_log("Helfer ".$HelferEmail." nicht vorhanden, lege an"); + error_log("CreateHelfer(db_link,$HelferName,$HelferEmail, $HelferHandy,$HelferPasswort,$HelferLevel);"); + $db_erg = CreateHelfer($db_link,$HelferName,$HelferEmail, $HelferHandy,$HelferPasswort,$HelferLevel); + } + // Login-Versuch, entweder direkt nach Anlegen oder wenn existiert hat + // Login und auf Haupt-Seite gehen + HelferLogin($db_link,$HelferEmail,$HelferPasswort,0); + echo ''; + exit; +} +?> diff --git a/html/Userdaten.php b/html/Userdaten.php new file mode 100644 index 0000000..75344af --- /dev/null +++ b/html/Userdaten.php @@ -0,0 +1,164 @@ + + + + Drop am See Helferdaten ändern + + + + + + + +
      '; + foreach($messages as $message) { + echo '
    • '.htmlspecialchars($message).'
    • '; + } + echo '
    '; + } + } + + + +//////////////////////////////////////////////////////////////// +// Helferdate holen +/////////////////////////////////////////////////////////////// + +$db_erg = Helferdaten($db_link,$HelferID); + + +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) +{ + $HelferName = $zeile['Name']; + $HelferEmail = $zeile['Email']; + $HelferHandy = $zeile['Handy']; +} + +/// Logout +//////////////////////////////////////////////////////// +if(isset($_POST['logout'])) +{ + unset($_SESSION["HelferID"]); + //$_POST['login'] = 1; +} + +/// Login +//////////////////////////////////////////////////////// +if(isset($_POST['login'])) +{ + $messages = []; + // Eingaben überprüfen: + //if(!preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $HelferName)) { + // $messages[] = 'Bitte prüfen Sie die eingegebenen Namen'; + //} + + $HelferName = $_POST['helfer-name']; + $HelferEmail = $_POST['helfer-email']; + $HelferPasswort = $_POST['helfer-passwort']; + + if(empty($messages)) + { + HelferLogin($db_link,$HelferEmail,$HelferPasswort, 0 ); + } + else + { + // Fehlermeldungen ausgeben: + echo '
      '; + foreach($messages as $message) { + echo '
    • '.htmlspecialchars($message).'
    • '; + } + echo '
    '; + } + +} + +?> + + + + + + + + + + + + + + + + + + + + + + + + + +
    Helferdaten
    Name
    + +
    Email
    + +
    Handy
    + +
    Altes Helfer Passwort
    + +
    Neues Helfer Passwort
    + +
    + +

    + + + + diff --git a/html/_crypt.php b/html/_crypt.php new file mode 100644 index 0000000..a9db779 --- /dev/null +++ b/html/_crypt.php @@ -0,0 +1,61 @@ +encode: cipher:".chunk_split(bin2hex($cipher_text),4,' ')."
    iv:".chunk_split(bin2hex($iv),4,' ')."
    iv_length:$iv_length
    cipher_key ".chunk_split(bin2hex($cipher_key),4,' ')."
    "; + } + + $cipher_text = $iv . $cipher_text; + // verschlüsselter Textes als base64 und dann noch mit urlencode, weil base64 zB + enthaelt + $encrypted_data = urlencode(base64_encode($cipher_text)); + + return $encrypted_data; +} + +function decode_string($key, $encrypted_data, $verification) { + // Entschlüsseln des verschuesselten Textes + // erst base64 entfernen - urldecode muss wenn noetig vorher angewendet werden + $decoded_cipher_text = base64_decode($encrypted_data); + // iv vom Anfang abtrennen + $cipher_method = "AES-256-CBC"; + $iv_length = openssl_cipher_iv_length($cipher_method); + $iv = substr($decoded_cipher_text, 0, $iv_length); + $cipher_text = substr($decoded_cipher_text, $iv_length); + $cipher_options = OPENSSL_RAW_DATA; + $cipher_key = openssl_digest($key, 'SHA256', true); + + if(isset($debug)){ + echo "
    decode: cipher:".chunk_split(bin2hex($cipher_text),4,' '). "
    iv:".chunk_split(bin2hex($iv),4,' '). "
    iv_length:$iv_length
    cipher_key ". chunk_split(bin2hex($cipher_key),4,' '); + } + + $decrypted_data = openssl_decrypt($cipher_text, $cipher_method, $cipher_key, $cipher_options, $iv); + + if(isset($debug)){echo "
    decrypted_data " . $decrypted_data." end
    ";} + $verification_length = strlen($verification); + + if(substr($decrypted_data, -$verification_length) == $verification) { + list($email, $level, $verification_code) = explode('|', $decrypted_data); + return array( + 'email' => $email, + 'level' => $level, + 'success' => 1 + ); + } else { + error_log("Verschlüsseltes Token enthielt den Verifikationscode nicht: $decrypted_data
    \n"); + return array( + 'success' => 0 + ); + } +} +?> diff --git a/html/_login.php b/html/_login.php new file mode 100644 index 0000000..ed19901 --- /dev/null +++ b/html/_login.php @@ -0,0 +1,90 @@ +'; + +} + +/// Login +//////////////////////////////////////////////////////// +if(isset($_POST['login'])) +{ + $messages = []; + // Eingaben überprüfen: + //if(!preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $HelferName)) { + // $messages[] = 'Bitte prüfen Sie die eingegebenen Namen'; + //} + + //if (isset ($_POST['helfer-name'])) { + // $HelferName = $_POST['helfer-name']; + //} // delete - login shouldnt provide this + $HelferEmail = $_POST['helfer-email']; + $HelferPasswort = $_POST['helfer-passwort']; + + if(empty($messages)) + { + HelferLogin($db_link,$HelferEmail,$HelferPasswort, 0 ); + } + else + { + // Fehlermeldungen ausgeben: + echo '
      '; + foreach($messages as $message) { + echo '
    • '.htmlspecialchars($message).'
    • '; + } + echo '
    '; + } + +} + +if(!isset($_SESSION["HelferID"])) +{ + +?> +
    + +
    + Login + + + + + + + + + +
    Email
    + +
    Passwort
    + + + +
    + + +
    + +

    + + +
    + diff --git a/html/css/style_common.css b/html/css/style_common.css new file mode 100644 index 0000000..8f5a055 --- /dev/null +++ b/html/css/style_common.css @@ -0,0 +1,80 @@ +body { + font-family: Arial, Helvetica, sans-serif; +} + +table, p, div, td, th, input { +font-size: inherit ; +} + +.commontable a { + color: inherit; + text-decoration: inherit; +} + +.commontable,#customers { + font-size: inherit; + border-collapse: collapse; + width: 100%; +} + +.commontable td,#customers td, .commontable th,#customers th { + border: 1px solid #ddd; + padding: 4px; +} + +.commontable tr:nth-child(even),#customers tr:nth-child(even){background-color: #f2f2f2;} + +.commontable tr:hover ,#customers tr:hover {background-color: #ddd;} + +.commontable th,#customers th { + padding-top: 12px; + padding-bottom: 12px; + height: 40px; + text-align: left; + background-color: #1090CF; + color: white; +} + + +#selected th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #0000FF; + color: white; +} + +thead { + position: sticky; + top: 0; + color: black; + background: white; +} + +table, th, td { + border: 1px solid black; + border-collapse: collapse; +} + +input, select, textarea { + width: 95%; +} + +.commontable button,.back button,.helfer button,#customers button { + text-decoration: none; /* dont underline links */ + display: inline-block; /* makes it possible to set top and bottom margins */ + width: 45px; + height: 45px; + text-align: center; +} + +details[open] summary ~ * { + animation: spoiler 1s ease-in-out; + padding: 2rem; + background: #cdddff; + border-radius: 1rem +} +summary { +font-size: 3px; +height: 2px; +} diff --git a/html/css/style_desktop.css b/html/css/style_desktop.css new file mode 100644 index 0000000..aa2e30e --- /dev/null +++ b/html/css/style_desktop.css @@ -0,0 +1,10 @@ +@import "style_common.css"; + +html, body { + font-size: 17; +} + + +button,select { + font-size: 20px; + } diff --git a/html/css/style_mobile.css b/html/css/style_mobile.css new file mode 100644 index 0000000..065aa7b --- /dev/null +++ b/html/css/style_mobile.css @@ -0,0 +1,10 @@ +@import "style_common.css"; + +html, body { + font-size: 25; +} + +button,select { + font-size: 27; + } + diff --git a/html/css/style_print.css b/html/css/style_print.css new file mode 100644 index 0000000..1c83edd --- /dev/null +++ b/html/css/style_print.css @@ -0,0 +1,19 @@ +@import "style_common.css"; + +html, body { + font-size: 12; +} + + +button { + font-size: 0px; + } + +table, th, td { + border: 0px; + +} + +nav, footer { + display: none; +} diff --git a/html/data/api-full.php b/html/data/api-full.php new file mode 100644 index 0000000..4934130 --- /dev/null +++ b/html/data/api-full.php @@ -0,0 +1,57 @@ +0 THEN '#dd9000' + ELSE '#4d0000' + END as color, + CASE WHEN (SchichtUebersicht.Soll-SchichtUebersicht.C)<=0 THEN 'white' + WHEN SchichtUebersicht.C>0 THEN 'black' + ELSE 'white' + END as textColor + FROM EinzelSchicht + INNER JOIN Helfer ON EinzelSchicht.HelferID=Helfer.HelferId + RIGHT JOIN Schicht ON Schicht.SchichtID=EinzelSchicht.SchichtID + INNER JOIN Dienst ON Dienst.DienstID=Schicht.DienstID + INNER JOIN SchichtUebersicht ON Dienst.DienstID=SchichtUebersicht.DienstID AND SchichtUebersicht.SchichtID=Schicht.SchichtID + GROUP BY Schicht.SchichtID;"; + + //error_log(date('Y-m-d H:i ') . $queryText,3,"/tmp/sql.log"); + // handle dynamic loading + if (isset($requestParams["from"]) && isset($requestParams["to"])) { + //error_log("timespan given. from: ".$requestParams["from"]." to: ".$requestParams["to"]); + $queryText .= " WHERE `Schicht.Bis`>=? AND `Schicht.Von` < ?;"; + $queryParams = [filter_var($requestParams["from"],FILTER_SANITIZE_NUMBER_FLOAT), filter_var($requestParams["to"],FILTER_SANITIZE_NUMBER_FLOAT)]; + } + $query = $db->prepare($queryText); + $query->execute($queryParams); + $events = $query->fetchAll(); + return $events; +} + +switch ($_SERVER["REQUEST_METHOD"]) { + case "GET": + $result = read($db, $_GET); + break; + case "POST": + // only if changes will be allowed + break; + default: + throw new Exception("Unexpected Method"); + break; +} +header("Content-Type: application/json"); +echo json_encode($result); +?> diff --git a/html/data/api-helfer.php b/html/data/api-helfer.php new file mode 100644 index 0000000..abeb8fe --- /dev/null +++ b/html/data/api-helfer.php @@ -0,0 +1,55 @@ +0 THEN '#dd9000' + ELSE 'darkred' + END as color, + CASE WHEN (SchichtUebersicht.Soll-SchichtUebersicht.C)<=0 THEN 'white' + WHEN SchichtUebersicht.C>0 THEN 'black' + ELSE 'yellow' + END as textColor + FROM EinzelSchicht + INNER JOIN Helfer ON EinzelSchicht.HelferID=Helfer.HelferId + RIGHT JOIN Schicht ON Schicht.SchichtID=EinzelSchicht.SchichtID + INNER JOIN Dienst ON Dienst.DienstID=Schicht.DienstID + INNER JOIN SchichtUebersicht ON Dienst.DienstID=SchichtUebersicht.DienstID AND SchichtUebersicht.SchichtID=Schicht.SchichtID + WHERE Helfer.HelferID=$HelferID + GROUP BY Schicht.SchichtID"; + + $query = $db->prepare($queryText); + $query->execute($queryParams); + error_log(date('Y-m-d H:i ') . print_r($queryText,true),3,"/var/log/dropamsee/debug.log"); + $events = $query->fetchAll(); + return $events; +} + +switch ($_SERVER["REQUEST_METHOD"]) { + case "GET": + $result = read_from_db($db, $_GET,$HelferID); + break; + case "POST": + // only if changes will be allowed + break; + default: + throw new Exception("Unexpected Method"); + break; +} +header("Content-Type: application/json"); +echo json_encode($result); +?> diff --git a/html/index.php b/html/index.php new file mode 100644 index 0000000..fd51a68 --- /dev/null +++ b/html/index.php @@ -0,0 +1,163 @@ + + + + Helfer Drop am See Home + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Drop am See 2023
    + + +
    + Nächste Helferschichten: + +
      +Fr 08:00 Leitung Halle + //
    • So 12:00 Abbau
    • +/// Die 3 nächsten Schichten Des Helfers Anzeigen +//////////////////////////////////////////////////////// +//$HelferID=72; + +$db_erg = AlleSchichtenEinesHelfersVonJetzt($db_link,$HelferID); + + + $iSQLCount = mysqli_num_rows($db_erg); + //$iSQLCount = 3; + + +$iCount=0; +while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC) and $iCount<3) +{ + echo "
    • ". $zeile['Ab'] . " ". $zeile['Was'] . "
    • "; + $iCount++; +} + + +?> +
    + +
    Schicht Hinzufügen
    Kalenderansicht
    Logs
    Admin
    Logout
    + + + diff --git a/html/js/helferdb.js b/html/js/helferdb.js new file mode 100644 index 0000000..0a37af9 --- /dev/null +++ b/html/js/helferdb.js @@ -0,0 +1,46 @@ +function showPassword(id) { + var x = document.getElementById(id); + if (x.type === "password") { + x.type = "text"; + } else { + x.type = "password"; + } +} + +//// https://www.w3schools.com/howto/howto_js_collapsible.asp +//var coll = document.getElementsByClassName("collapsible"); +//var i; +// +//for (i = 0; i < coll.length; i++) { +// coll[i].addEventListener("click", function() { +// this.classList.toggle("active"); +// var content = this.nextElementSibling; +// if (content.style.display === "block") { +// content.style.display = "none"; +// } else { +// content.style.display = "block"; +// } +// }); +//} +// + +//// collapse column rows that are not header +function collapse_table_rows(){ + $(document).ready(function() { + $('tr:not(.header)').hide(); + + $('tr.header').click(function() { + $(this).find('span').text(function(_, value) { + return value == '-' ? '+' : '-' + }); + + $(this).nextUntil('tr.header').slideToggle(100, function() {}); + }); + }); +} + +function expand_all_table_rows(){ + + $('tr:not(.header)').hide(); // make all collapsed so that slideToggle doesnt close opened ones + $('tr:not(.header)').slideToggle(100, function() {}); +} diff --git a/html/konfiguration.php b/html/konfiguration.php new file mode 100644 index 0000000..07bd76a --- /dev/null +++ b/html/konfiguration.php @@ -0,0 +1,52 @@ + + "SET NAMES 'utf8'", + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, +); + + +?>