Helfersystem nach 3 Conventions

Autor größtenteils Ralf
 Changes to be committed:
new file:   INSTALL
new file:   html/Admin.php
new file:   html/AdminAlleSchichten.php
new file:   html/AdminDienste.php
new file:   html/AdminHelferUebersicht.php
new file:   html/AdminMeineSchichten.php
new file:   html/AdminUserdaten.php
new file:   html/AlleSchichten.php
new file:   html/Ausdrucke.php
new file:   html/Bilder/Attention_Sign.svg
new file:   html/Bilder/Info.jpeg
new file:   html/Bilder/More.jpeg
new file:   html/Bilder/PfeilRechts2.jpeg
new file:   html/Bilder/PfeilRechts2.png
new file:   html/Bilder/PfeilRunter.jpeg
new file:   html/Bilder/calendar_lines.png
new file:   html/Bilder/calendar_lines1.png
new file:   html/Bilder/dot.png
new file:   html/CreateHelfer.php
new file:   html/DecodeToken.php
new file:   html/EmailZuToken.php
new file:   html/Info.php
new file:   html/Kalender-all.html
new file:   html/Kalender.php
new file:   html/MeineSchichten.php
new file:   html/ReadLog.php
new file:   html/SQL.php
new file:   html/UrlLogin.php
new file:   html/Userdaten.php
new file:   html/_crypt.php
new file:   html/_login.php
new file:   html/css/style_common.css
new file:   html/css/style_desktop.css
new file:   html/css/style_mobile.css
new file:   html/css/style_print.css
new file:   html/data/api-full.php
new file:   html/data/api-helfer.php
new file:   html/index.php
new file:   html/js/helferdb.js
new file:   html/js/jquery-3.7.1.min.js
new file:   html/konfiguration.php
This commit is contained in:
Debian 2023-10-08 12:41:03 +02:00 committed by Florian Pesth
parent 8d0b570644
commit 19a5443216
40 changed files with 5432 additions and 0 deletions

32
INSTALL Normal file
View File

@ -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

138
html/Admin.php Normal file
View File

@ -0,0 +1,138 @@
<?php
// Login und Admin Status testen. Wenn kein Admin-Status, Weiterleiten auf index.php und beenden
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link=ConnectDB();
include '_login.php';
if($AdminStatus != 1) {
//Seite nur fuer Admins. Weiter zu index.php und exit, wenn kein Admin
echo '<!doctype html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
exit;
}
?>
<!doctype html>
<html>
<head>
<title>Admin Drop am See</title>
<link rel="stylesheet" href="css/style_common.css"/>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<?php
DatenbankAufDeutsch($db_link);
$AliasHelferID=0;
//echo "AliasHelfer=$AliasHelferID <br>";
if(isset($_SESSION["AliasHelferID"]))
{
$AliasHelferID = $_SESSION["AliasHelferID"];
}
//echo "AliasHelfer=$AliasHelferID <br>";
if(isset($_POST["AliasHelfer"]))
{
$AliasHelferID = $_POST["AliasHelfer"];
//echo "post<br>";
}
if($AliasHelferID!=0)
{
$_SESSION["AliasHelferID"]=$AliasHelferID;
}
//echo "AliasHelfer=$AliasHelferID <br>";
$db_erg = Helferdaten($db_link,$HelferID);
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
$HelferName=$zeile['Name'];
$HelferIsAdmin=$zeile['Admin'];
}
?>
<div style="width: 100%;">
<table class="commontable">
<th><button name="BackHelferdaten" value="1" onclick="window.location.href = 'index.php';"><b>&larrhk;</b></button> &nbsp; <b>Admin HelferDB</b>
</th>
<tr>
<tr onclick="window.location.href='AdminDienste.php';">
<td>
<a class="fallbacklink" href='AdminDienste.php'><img src="Bilder/PfeilRunter.jpeg" style="width:30px;height:30px;"><b> Dienste und Schichten verwalten</b></a>
</td>
</tr>
<tr onclick="window.location.href='CreateHelfer.php';"> <td>
<img src="Bilder/More.jpeg" style="width:30px;height:30px;"><b>Seite zur Helfer selbst-Registrierung</b>
</td> </tr>
<tr onclick="window.location.href='EmailZuToken.php';"> <td>
<img src="Bilder/PfeilRunter.jpeg" style="width:30px;height:30px;"><b>Helfer per Link einladen</b>
</td> </tr>
<tr onclick="window.location.href='AdminHelferUebersicht.php';">
<td>
<a class="fallbacklink" href='AdminHelferUebersicht.php'><img src="Bilder/PfeilRunter.jpeg" style="width:30px;height:30px;"><b>Helfer&uuml;bersicht</b></a>
</td>
</tr>
<th><b>Helfer als Admin &auml;ndern:<b> <form style="display:inline-block;" method=post><select style="height:33px;width:350px;font-size:20" name="AliasHelfer" id="AliasHelfer" onchange="submit()">
<?php
$db_erg = HelferListe($db_link);
while($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($AliasHelferID!=$zeile['HelferID'])
{
echo "<option value='".$zeile['HelferID']."'>".$zeile['Name']."</optionen>";
}
else
{
echo "<option value='".$zeile['HelferID']."' selected='selected'>".$zeile['Name']."</optionen>";
}
}
?>
</select></form>
</b>
</td>
</th>
<tr><!--td-->
<!--<table class="innertable" style="padding:15px"><!-
- inner table for indent-->
<tr onclick="window.location.href='AdminUserdaten.php';">
<!--td class="invis"></td-->
<td><img src="Bilder/dot.png" width="30px" height="2px"><img src="Bilder/PfeilRunter.jpeg" style="width:30px;height:30px;"><b> Helferdaten &auml;ndern</b></td>
</tr>
<tr onclick="window.location.href='AdminMeineSchichten.php';">
<td><img src="Bilder/dot.png" width="30px" height="2px"><img src="Bilder/PfeilRunter.jpeg" style="width:30px;height:30px;"><b> Schichten Anzeigen/Löschen</b></td>
</tr>
<tr onclick="window.location.href='AdminAlleSchichten.php';">
<td><img src="Bilder/dot.png" width="30px" height="2px"><img src="Bilder/PfeilRunter.jpeg" style="width:30px;height:30px;"><b> Schichten Hinzufügen</b></td>
</tr>
<!--</table></td> </tr> inner table for indent end-->
<!--<tr><th>Weiteres</th></tr>-->
<tr onclick="window.location.href='Kalender-all.html';">
<td><img src="Bilder/More.jpeg" style="width:30px;height:30px"><b> Admin Kalenderansicht</b> </td>
</tr>
<tr onclick="window.location.href='Ausdrucke.php';">
<td > <img src="Bilder/More.jpeg" style="width:30px;height:30px;"> <b>Ausdrucke</b> </td>
</tr>
<tr onclick="window.location.href='TeilnehmerSchichtenAusdruck.php';">
<td > <img src="Bilder/More.jpeg" style="width:30px;height:30px;"> <b>Ausdruck Schichten</b> </td>
</tr>
</table>
<p> <img src="Bilder/Info.jpeg" width="25px" height="25px"> Dienst: z.B. Badgekontrolle Eingang A. Schicht: ein Dienst zu einer bestimmten Zeit zB 9-12 Uhr
</p>
<button class=back name="BackHelferdaten" value="1" onclick="window.location.href = 'index.php';"><b>&larrhk;</b></button>
</body>
</html>

503
html/AdminAlleSchichten.php Normal file
View File

@ -0,0 +1,503 @@
<?php
// Login und Admin Status testen. Wenn kein Admin-Status, Weiterleiten auf index.php und beenden
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link=ConnectDB();
include '_login.php';
if($AdminStatus != 1) {
//Seite nur fuer Admins. Weiter zu index.php und exit, wenn kein Admin
echo '<!doctype html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
exit;
}
?>
<!doctype html>
<html>
<head>
<title>Helfer Drop am See Alle Schichten</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
<script src="js/jquery-3.7.1.min.js" type="text/javascript"></script>
<script src="js/helferdb.js" type="text/javascript"></script>
<script> collapse_table_rows();
</script>
</head>
<body>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button>
<div style="width: 100%;">
<?php
/// Detailinformation zu ausgewaehlten Schicht Holen
////////////////////////////////////////////////////////
if(isset($_POST['CloseInfo']))
{
UNSET($InfoMeineSchichtID);
UNSET($InfoAlleSchichtID);
}
if(isset($_POST['InfoMeineSchichtID']))
{
$InfoMeineSchichtID = $_POST['InfoMeineSchichtID'];
UNSET($InfoAlleSchichtID);
//echo "<b>". $SchichtID . "</b><br>";
$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 "<b>". $SchichtID . "</b><br>";
$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 '<b>Helfer w&auml;hlen:<b> <form style="display:inline-block;" method=post><select style="height:33px;width:350px;" name="AliasHelfer" id="AliasHelfer" onchange="submit()">';
$db_erg = HelferListe($db_link);
while($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($AliasHelferID!=$zeile['HelferID'])
{
echo "<option value='".$zeile['HelferID']."'>".$zeile['Name']."</optionen>";
}
else
{
echo "<option value='".$zeile['HelferID']."' selected='selected'>".$zeile['Name']."</optionen>";
}
}
echo '</select></form>';
}
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
////////////////////////////////////////////////////////
?>
<form method="post" action="AdminAlleSchichten.php#Info">
<?php
// Neu Schicht fuer Helfer Eintragen
///////////////////////////////////////////////////////////
if(isset($_POST['plusschicht'])) {
$messages = [];
$SchichtId = $_POST['plusschicht'];
// 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))
{
// Helfer Schicht zuweisen
$db_erg = HelferSchichtZuweisen($db_link,$AliasHelferID,$SchichtId,$AdminID);
// Erfolg vermelden und Skript beenden, damit Formular nicht erneut ausgegeben wird
$HelferName = '';
$HelferEmail = '';
$HelferHandy = '';
//die('<div class="Helfer wurde angelegt.</div>');
}
else
{
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message)
{
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
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 '<div class="error"><ul>';
foreach($messages as $message)
{
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
/// 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 '<table id="customers"><tr class="header"><th onclick="window.location.href=\'AdminMeineSchichten.php\'">';
echo " Dienstplan von $HelferName (Zusammenfassung)<br>";
echo $zeile['Anzahl'];
echo " Schichten insgesamt ";
echo $zeile['Dauer']/3600;
echo " Stunden";
echo '</th></tr></table><br><br>';
/// 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 "<br>Detail=".$addschicht."<br>";
if($addschicht=='0')
{
echo "<p><b>Schichten Hinzufügen geordnet nach</b>";
echo "<button name='addschicht' value='1'>Tage</button>";
echo "<button name='addschicht' value='2'>Dienste</button></p>";
}
//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 "<p><button name='addschicht' value='0'><b>&larrhk;</b></button></p>";
echo '<table id="customers">';
echo "<thead>";
echo "<tr>";
echo "</tr><th colspan='7'>". "Alle Schichten der Con (" . $iBelegteSchichtenCount."/".$iAlleSchichtenCount. ")</th></tr>";
/*
if ($dienstsort=='1')
{
echo "<th>". "Dienst" . "</th>";
}
else
{
echo "<th>". "Von" . "</th>";
}
*/
if ($ZeitBereich==1)
{
echo "<th style='width:100px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=1\"'>". "Alle" . "</th>";
}
else
{
echo "<th style='width:100px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=1\"'>". "Alle" . "</th>";
}
if ($ZeitBereich==2)
{
echo "<th style='width:100px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=2\"'>". "Davor" . "</th>";
}
else
{
echo "<th style='width:100px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=2\"'>". "Davor" . "</th>";
}
if ($ZeitBereich==3)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=3\"'>". "Do" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=3\"'>". "Do" . "</th>";
}
if ($ZeitBereich==4)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=4\"'>". "Fr" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=4\"'>". "Fr" . "</th>";
}
if ($ZeitBereich==5)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=5\"'>". "Sa" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=5\"'>". "Sa" . "</th>";
}
if ($ZeitBereich==6)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=6\"'>". "So" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=6\"'>". "So" . "</th>";
}
if ($ZeitBereich==7)
{
echo "<th style='width:100px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=7\"'>". "Danach" . "</th>";
}
else
{
echo "<th style='width:100px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=7\"'>". "Danach" . "</th>";
}
//echo "<th style='width:100px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=2\"'>". "Davor" . "</th>";
//echo "<th style='width:50px'>". "Do" . "</th>";
//echo "<th style='width:50px'>". "Fr" . "</th>";
//echo "<th style='width:50px'>". "Sa" . "</th>";
//echo "<th style='width:50px'>". "So" . "</th>";
//echo "<th style='width:100px'>". "Danach" . "</th>";
echo "</tr>";
echo "</thead>";
$OldTag = "";
$OldWas = "";
# um Zeilen mit von mir belegten Schichten hervorzuheben
$MeineDienste = SchichtIdArrayEinesHelfers($db_link,$AliasHelferID);
//print_r($MeineDienste);
echo '</table>';
echo '<table id="customers">';
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($dienstsort=='1')
{
$Tag = $zeile['Tag'];
if ($Tag!=$OldTag)
{
echo "<tr class='header'><th colspan='5' >";
echo $Tag;
echo "</th></tr>";
$OldTag = $Tag;
}
}
else
{
$Was = $zeile['Was'];
if ($Was!=$OldWas)
{
echo "<tr class='header'><th colspan='7' style='width:100%'>";
echo $Was;
echo "</th>";
/*
echo "<th style='width:100px'>". "Von" . "</th>";
echo "<th style='width:130px'>". "Bis" . "</th>";
echo "<th style='width:90px'>". "Ist/Soll" . "</th>";
echo "<th style='width:90px'>". "Add" . "</th>";
*/
echo "</tr>";
$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 '<tr '.$rowstyle.'onclick="window.location.href=\'DetailsSchichten.php?InfoAlleSchichtID='.$zeile['SchichtID'].'#Info\';" >';
if ($dienstsort=='1')
{
echo "<td>". $zeile['Was'] . "</td>";
}
else
{
echo "<td>". $zeile['Tag'] . "</td>";
}
echo "<td>". $Von . "</td>";
echo "<td>". $Bis . "</td>";
echo "<td bgcolor='".$Color."'>". $zeile['Ist'] . "/";
echo "". $zeile['Soll'] . "</td>";
# buttons sind in der selben Zelle
echo "<td width='30px'>" . "<button width='20px' name='plusschicht' value='". $zeile['SchichtID'] ."'>+</button>" ."";
echo "" . "&nbsp;&nbsp;<button width='120px' name='minusschicht' value='". $zeile['SchichtID'] ."'>&ndash;</button> $regtext" ."</td>";
//echo "<td>$regtext</td>";
echo "</tr>\n";
}
echo "</table>";
}
mysqli_free_result( $db_erg );
?>
</form>
</div>
</body>
</html>

360
html/AdminDienste.php Normal file
View File

@ -0,0 +1,360 @@
<?php
// Login und Admin Status testen. Wenn kein Admin-Status, Weiterleiten auf index.php und beenden
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link=ConnectDB();
include '_login.php';
if($AdminStatus != 1) {
//Seite nur fuer Admins. Weiter zu index.php und exit, wenn kein Admin
echo '<!doctype html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
exit;
}
?>
<!doctype html>
<html>
<head>
<title>Admin Drop am See</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<div style="width: 100%;">
<?php
DatenbankAufDeutsch($db_link);
$DienstID =$_SESSION["DienstID"];
$SchichtID =$_SESSION["SchichtID"];
$HelferID = $_SESSION["HelferID"];
$AdminID = $_SESSION["AdminID"];
if(isset($_POST['HelferID']))
{
$HelferID = $_POST['HelferID'];
}
if(isset($_POST['ShowHelfer'])) {
$HelferID=$_POST['HelperSearch'];
}
$_SESSION["HelferID"] = $HelferID;
if(isset($_POST['ChangeDienst'])) {
$Was=$_POST['Dienst-Was'];
$Wo=$_POST['Dienst-Wo'];
$Info=$_POST['Dienst-Info'];
$Leiter=$_POST['Dienst-Leiter'];
$Gruppe=$_POST['Dienst-Gruppe'];
$HelferLevel=$_POST['HelferLevel'];
ChangeDienst($db_link,$DienstID,$Was,$Wo,$Info,$Leiter,$Gruppe,$HelferLevel);
}
if(isset($_POST['NewDienst'])) {
$Was=$_POST['Dienst-Was'];
$Wo=$_POST['Dienst-Wo'];
$Info=$_POST['Dienst-Info'];
$Leiter=$_POST['Dienst-Leiter'];
$Gruppe=$_POST['Dienst-Gruppe'];
$HelferLevel=$_POST['HelferLevel'];
NewDienst($db_link,$DienstID,$Was,$Wo,$Info,$Leiter,$Gruppe,$HelferLevel);
}
if(isset($_POST['DeleteDienst']))
{
if (!DeleteDienst($db_link,$DienstID,false))
{
echo "Erst Schichten des Dienstes Löschen!";
}
}
if(isset($_POST['ChangeSchicht'])) {
$Von=$_POST['Schicht-Von'];
$Bis=$_POST['Schicht-Bis'];
$Soll=$_POST['Schicht-Soll'];
ChangeSchicht($db_link,$SchichtID,$Von,$Bis,$Soll);
}
if(isset($_POST['NewSchicht'])) {
$Von=$_POST['Schicht-Von'];
$Bis=$_POST['Schicht-Bis'];
$Soll=$_POST['Schicht-Soll'];
NewSchicht($db_link,$DienstID,$Von,$Bis,$Soll);
}
if(isset($_POST['DeleteSchicht'])) {
if(!DeleteSchicht($db_link,$SchichtID,false))
{
echo "Erst Helfer aus Schicht austragen<br>";
}
}
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
////////////////////////////////////////////////////////
?>
<button class=back name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button>
<form method="post">
<table border="0" id='customers'>
<tr><th> Dienst</th><th><select name="DienstSearch" id="DienstSearch" onchange="submit()">
<?php
$db_erg = GetDienste($db_link);
$Was="";
$Wo="";
$Info="";
$Leiter="";
$Gruppe="";
$HelferLevel="";
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($zeile['DienstID']!=$DienstID)
{
echo "<option value='".$zeile['DienstID']."'>".$zeile['Was']."</option>";
}
else
{
echo "<option value='".$zeile['DienstID']."' selected='selected'>".$zeile['Was']."</option>";
$Was=$zeile['Was'];
$Wo=$zeile['Wo'];
$Info=$zeile['Info'];
$Leiter=$zeile['Leiter'];
$Gruppe=$zeile['ElternDienstID'];
$HelferLevel=$zeile['HelferLevel'];
}
}
echo "</select>";
echo "</th></tr>";
echo " </table>";
echo "<p><noscript><button name='ShowSchichten' value='1'>Schichten Anzeigen</button></noscript>";
//echo "<button name='DeleteDienst' value='1'>Dienst löschen</button>";
// Aktueller Dienst und dessen Schichten Anzeigen
////////////////////////////////////////////////////////
?>
<table border="0" id="customers">
<tr>
<td style="border: 0px solid black;">Was</td></tr><tr><td style="border: 0px solid black;">
<input name="Dienst-Was" type="text" value="<?=htmlspecialchars($Was??'')?>">
</td>
</tr>
<tr>
<td style="border: 0px solid black;">Wo</td></tr><tr><td style="border: 0px solid black;">
<input name="Dienst-Wo" type="text " value="<?=htmlspecialchars($Wo??'')?>">
</td>
</tr>
</tr>
<td style="border: 0px solid black;">Info</td></tr><tr><td style="border: 0px solid black;">
<input name="Dienst-Info" type="text" value="<?=htmlspecialchars($Info??'')?>" >
</td>
</tr>
<tr>
<td style="border: 0px solid black;">Leiter</td></tr><tr><td style="border: 0px solid black;">
<!-- <input name="Dienst-Leiter" type="text" value="<?=htmlspecialchars($Leiter??'')?>" > -->
<?php
echo "<select name='Dienst-Leiter'>";
$db_erg = HelferListe($db_link);
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($zeile['HelferID']!=$Leiter)
{
echo "<option value='".$zeile['HelferID']."'>".$zeile['Name']."</option>";
}
else
{
echo "<option value='".$zeile['HelferID']."' selected='selected'>".$zeile['Name']."</option>";
}
}
echo "</select>";
?>
</td>
</tr>
<tr>
<td style="border: 0px solid black;">Gruppe</td></tr><tr><td style="border: 0px solid black;">
<?php
//echo "#####".$Gruppe."#####";
echo "<select name='Dienst-Gruppe'>";
$db_erg = GetDiensteChilds($db_link,0);
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($zeile['DienstID']!=$Gruppe)
{
echo "<option value='".$zeile['DienstID']."'>".$zeile['Was']."</option>";
}
else
{
echo "<option value='".$zeile['DienstID']."' selected='selected'>".$zeile['Was']."</option>";
}
}
echo "</select>";
?>
</td>
</td>
</tr>
<tr><td style="border: 0px solid black;">HelferLevel</td></tr>
<tr><td style="border: 0px solid black;">
<select name="HelferLevel">
<option value="1" <?php if($HelferLevel==1){echo "selected";};?> >Dauerhelfer</option>
<option value="2" <?php if($HelferLevel==2){echo "selected";};?> >Teilnehmer</option>
<?php //todo: Name aus HelferLevel-Tabelle erhalten?>
</select>
</td></tr>
</table>
<p><button name="ChangeDienst" value="1">Ändern</button><button name="NewDienst" value="1">Neue</button><button name='DeleteDienst' value='1'>Löschen</button></p>
</form>
<form method="post">
<table border="0" id='customers'">
<tr><th>Schicht</th><th><select name="SchichtSearch" id="SchichtSearch" onchange="submit()">
<?php
$Soll=1;
$db_erg = GetSchichtenEinesDienstes($db_link,$DienstID);
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($SchichtID == 0)
{
$SchichtID=$zeile['SchichtID'];
}
if ($zeile['SchichtID']!=$SchichtID)
{
echo "<option value='".$zeile['SchichtID']."'>".$zeile['TagVon']."</option>";
}
else
{
echo "<option value='".$zeile['SchichtID']."' selected='selected'>".$zeile['TagVon']."</option>";
$Von=$zeile['Von'];
$Bis=$zeile['Bis'];
$Soll=(int)$zeile['Soll'];
}
}
echo "</select>";
echo "</th></tr>";
echo " </table>";
echo "<p><noscript><button name='ShowSchicht' value='1'>Schicht Anzeigen</button></noscript>";
//echo "<button name='DeleteSchicht' value='1'>Schicht löschen</button>";
?>
<!-- <table border="0" style="border: 0px solid black;"> -->
<table border="0" id='customers'">
<tr>
<td style="border: 0px solid black;">Von</td></tr><tr><td style="border: 0px solid black;">
<input name="Schicht-Von" type="datetime-local" value="<?=htmlspecialchars($Von??'')?>" required>
</td>
<tr>
</tr>
<td style="border: 0px solid black;">Bis</td></tr><tr><td style="border: 0px solid black;">
<input name="Schicht-Bis" type="datetime-local" value="<?=htmlspecialchars($Bis??'')?>" required>
</td>
<tr>
</tr>
<td style="border: 0px solid black;">Soll</td></tr><tr><td style="border: 0px solid black;">
<input name="Schicht-Soll" type="number" min=1 value="<?=htmlspecialchars((int)$Soll??'')?>" required>
</td>
<tr>
</tr>
</table>
<p><button name="ChangeSchicht" value="1">Ändern</button><button name="NewSchicht" value="1">Neue</button><button name='DeleteSchicht' value='1'>Löschen</button></p>
</form>
<button class=back name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b><b>&larrhk;</b></b></button>
<?php
mysqli_free_result( $db_erg );
$_SESSION["DienstID"] = $DienstID;
$_SESSION["SchichtID"] = $SchichtID;
?>
</div>
</body>
</html>

View File

@ -0,0 +1,124 @@
<?php
// Login und Admin Status testen. Wenn kein Admin-Status, Weiterleiten auf index.php und beenden
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link=ConnectDB();
include '_login.php';
// das hier muss nicht unbedingt eine Adminseite sein
if($AdminStatus != 1) {
//Seite nur fuer Admins. Weiter zu index.php und exit, wenn kein Admin
echo '<!doctype html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
exit;
}
?>
<!doctype html>
<html>
<head>
<title>Admin Drop am See</title>
<link rel="stylesheet" href="css/style_common.css"/>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
<script src="js/jquery-3.7.1.min.js" type="text/javascript"></script>
<script src="js/helferdb.js" type="text/javascript"></script>
<script>
collapse_table_rows();
</script>
</head>
<body>
<div style="width: 100%;">
<?php
DatenbankAufDeutsch($db_link);
//$DienstID =$_SESSION["DienstID"];
//$SchichtID =$_SESSION["SchichtID"];
$HelferID = $_SESSION["HelferID"];
$AdminID = $_SESSION["AdminID"];
$_SESSION["HelferID"] = $HelferID;
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 "<br><br><table class='commontable' style='page-break-before:always'>";
?>
<tr class="header">
<th><button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button> &nbsp; <b>&Uuml;bersicht Helfer und Ihre Schichten</b></th>
</tr>
</table>
<table class="commontable">
<?php
$db_erg = AlleHelferSchichtenUebersicht($db_link);
$dauer=0;
$i=0;
$OldHelferName="";
$EinzelDienstStunden="";
$HelferUeberschrift="";
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
$HelferName = $zeile["Name"];
$AliasHelferID = $zeile["AliasHelferID"];
//echo $HelferName." ".$AliasHelferID."<br>";
if($HelferName!= $OldHelferName)
{
if ($EinzelDienstStunden !=""){
// Neue Ueberschrift mit Helfernamen + Stunden
echo "$HelferUeberschrift </th><th> <img style='width:30px;height:30px;' src='Bilder/PfeilRunter.jpeg'> $dauer Stunden</th>";
echo "<th ><div style='display:table'><form style='display:table-cell' action='AdminAlleSchichten.php' method='post'>";
echo "<button width='120px' name='AliasHelfer' value='". $OldAliasHelferID ."'>+</button></form>\n";
echo "&nbsp;&nbsp;";
echo "<form style='display:table-cell' action='AdminMeineSchichten.php' method='post'>";
echo "<button width='120px' name='AliasHelfer' value='". $OldAliasHelferID ."'>&ndash;</button></form>";
echo "</div></th>";
$dauer=0;
echo "$EinzelDienstStunden</td></tr>\n ";
}
$EinzelDienstStunden="";
$HelferUeberschrift="<tr class='header'><th width='15%'>".$HelferName;
$OldHelferName=$HelferName;
$OldAliasHelferID=$AliasHelferID;
$i+=1;
}
$EinzelDienstStunden.="<tr><td style='width:100px'> ".(int)$zeile["Dauer"]."</td><td>";
$EinzelDienstStunden.= $zeile["Was"];
$EinzelDienstStunden.= "</td></tr>";
$dauer=$dauer+(int)$zeile["Dauer"];
}
echo "$EinzelDienstStunden";
echo "</table>";
?>
</div>
</body>
</html>

View File

@ -0,0 +1,288 @@
<?php
// Login und Admin Status testen. Wenn kein Admin-Status, Weiterleiten auf index.php und beenden
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link=ConnectDB();
include '_login.php';
if($AdminStatus != 1) {
//Seite nur fuer Admins. Weiter zu index.php und exit, wenn kein Admin
echo '<!doctype html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
exit;
}
?>
<!doctype html>
<html>
<head>
<title>Admin Drop am See - Schichten editieren</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<div><button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button> <h4 style="display: inline;">Admin: Schichten editieren</h4>
<div style="width: 100%;">
<?php
/// Detailinformation zu ausgewaehlten Schicht Holen
////////////////////////////////////////////////////////
if(isset($_POST['CloseInfo']))
{
UNSET($InfoMeineSchichtID);
UNSET($InfoAlleSchichtID);
}
if(isset($_POST['InfoMeineSchichtID']))
{
$InfoMeineSchichtID = $_POST['InfoMeineSchichtID'];
UNSET($InfoAlleSchichtID);
//echo "<b>". $SchichtID . "</b><br>";
$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 "<b>". $SchichtID . "</b><br>";
$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 '<b>Helfer w&auml;hlen:<b> <form style="display:inline-block;" method=post><select style="height:33px;width:350px;" name="AliasHelfer" id="AliasHelfer" onchange="submit()">';
$db_erg = HelferListe($db_link);
while($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($AliasHelferID!=$zeile['HelferID'])
{
echo "<option value='".$zeile['HelferID']."'>".$zeile['Name']."</optionen>";
}
else
{
echo "<option value='".$zeile['HelferID']."' selected='selected'>".$zeile['Name']."</optionen>";
}
}
echo '</select></form>';
}
if(isset($_POST['AliasHelfer'])) {
$AliasHelferID=$_POST['AliasHelfer'];
echo "AliasHelfer: $AliasHelferID<br>";
}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 '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
// Helferliste Anzeigen
////////////////////////////////////////////////////////
?>
<form method="post" action="AdminMeineSchichten.php#Info">
<?php
// Neu Schicht fuer Helfer Eintragen
///////////////////////////////////////////////////////////
if(isset($_POST['sent'])) {
$messages = [];
$SchichtId = $_POST['sent'];
// 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))
{
// Helfer Schicht zuweisen
$db_erg = HelferSchichtZuweisen($db_link,$AliasHelferID,$SchichtId,$HelferID);
// Erfolg vermelden und Skript beenden, damit Formular nicht erneut ausgegeben wird
$HelferName = '';
$HelferEmail = '';
$HelferHandy = '';
//die('<div class="Helfer wurde angelegt.</div>');
}
else
{
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message)
{
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
/// 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 '<table id="customers">';
echo "<thead>";
echo "<tr>";
echo "<th colspan=1>". "Schichten von $HelferName (".$iSQLCount." Schichten)</th>";
//echo "</tr><tr>";
//echo "<th></th>";
echo "<th style='width:180px'>". "Von" . "</th>";
echo "<th style='width:180px'>". "Bis" . "</th>";
echo "<th style='width:90px'>". "Del" . "</th>";
echo "</tr>";
echo "</thead>";
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
//echo '<tr title="Details anzeigen" onclick="parent.DetailsSchichten.location.href=\'DetailsSchichten.php?InfoAlleSchichtID='.$zeile['SchichtID'].'#Info\';" >';
echo '<tr title="Details anzeigen" onclick="window.location.href=\'DetailsSchichten.php?InfoAlleSchichtID='.$zeile['SchichtID'].'#Info\';" >';
echo "<td>". $zeile['Was'] . "</td>";
echo "<td>". $zeile['Ab'] . "</td>";
echo "<td>". $zeile['Bis'] . "</td>";
echo "<td>". "<p><button title='Schicht entfernen' name='Del' value='". $zeile['EinzelSchichtID'] ."'>-</button></p>" . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<br><br>";
$iAlleSchichtenCount = AlleSchichtenCount($db_link);
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link);
echo '<table id="customers" onclick="window.location.href=\'AdminAlleSchichten.php\'">';
echo "<tr>";
echo "<th>". "Alle Schichten der Con (".$iBelegteSchichtenCount."/".$iAlleSchichtenCount.")</th>";
echo "</tr>";
echo "</table>";
mysqli_free_result( $db_erg );
?>
</form>
</div>
</body>
</html>

188
html/AdminUserdaten.php Normal file
View File

@ -0,0 +1,188 @@
<?php
// Login und Admin Status testen. Wenn kein Admin-Status, Weiterleiten auf index.php und beenden
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link=ConnectDB();
include '_login.php';
if($AdminStatus != 1) {
//Seite nur fuer Admins. Weiter zu index.php und exit, wenn kein Admin
echo '<!doctype html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
exit;
}
function HelferAuswahlButton($db_link,$AliasHelferID){
echo '<b>Helfer w&auml;hlen:<b> <form style="display:inline-block;" method=post><select style="height:33px;width:350px;" name="AliasHelfer" id="AliasHelfer" onchange="submit()">';
$db_erg = HelferListe($db_link);
while($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($AliasHelferID!=$zeile['HelferID'])
{
echo "<option value='".$zeile['HelferID']."'>".$zeile['Name']."</optionen>";
}
else
{
echo "<option value='".$zeile['HelferID']."' selected='selected'>".$zeile['Name']."</optionen>";
}
}
echo '</select></form>';
}
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<br>";
echo "Helfer=$HelferID<br>";
echo "Alias=$AliasHelferID<br>";
?>
<!doctype html>
<html>
<head>
<title>Drop am See Helferdaten ändern</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<?php
/// Helferdaten Aendern
////////////////////////////////////////////////////////
if(isset($_POST['change'])) {
$messages = [];
// Eingaben überprüfen:
if(strlen($_POST['helfer-newpasswort'])<8 and $_POST['helfer-newpasswort']!="")
{
$messages[] = 'Neues Passwort zu kurz';
}
//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'];
$HelferHandy = $_POST['helfer-handy'];
$HelferNewPasswort = $_POST['helfer-newpasswort'];
if ($_POST['IsAdmin'])
{
$HelferIsAdmin=1;
//echo "is Admin<br>";
}
else
{
$HelferIsAdmin=0;
}
if(empty($messages)) {
// Helferdaten Ändern
HelferdatenAendern($db_link,$HelferName,$HelferEmail,$HelferHandy,$HelferNewPasswort,$AliasHelferID,$HelferIsAdmin,$HelferID);
} else {
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
///////////////////////////////////////////////////////////////
// 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'];
}
?>
<table id="customers">
<tr>
<th><button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button> Helferdaten</th>
</tr>
<form method="post">
<tr>
<td>Name</td></tr><tr><td>
<input name="helfer-name" type="text" value="<?=htmlspecialchars($HelferName??'')?>" required>
</td>
</tr>
<tr>
<td>Email</td></tr><tr><td>
<input name="helfer-email" type="email " value="<?=htmlspecialchars($HelferEmail??'')?>" required>
</td>
</tr>
<tr>
<td>Handy</td></tr><tr><td>
<input name="helfer-handy" type="tel" value="<?=htmlspecialchars($HelferHandy??'')?>" >
</td>
</tr>
<tr>
<td>Admin Passwort</td></tr><tr><td>
<input name="helfer-passwort" type="password" value="<?=htmlspecialchars($HelferPasswort??'')?>" >
</td>
</tr>
<tr>
<td>Neues Helfer Passwort</td></tr><tr><td>
<input name="helfer-newpasswort" type="text" value="<?=htmlspecialchars($HelferPasswort??'')?>" >
</td>
</tr>
</table>
<table id="customers">
<col style="width:20px">
<tr>
<td><input type="checkbox" name="IsAdmin" value=1 align="right" <?php if($HelferIsAdmin==1){echo" checked";}?>></td>
<td>ist Admin</td>
</tr>
</table>
<p><button name="change" style="width:150px !important" value="1">&Auml;ndern</button></p>
<p><button name="del" style="width:150px !important" value="1">Helfer L&ouml;schen</button></p>
</form>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button>
</body>
</html>

463
html/AlleSchichten.php Normal file
View File

@ -0,0 +1,463 @@
<!doctype html>
<html>
<head>
<title>Helfer Drop am See Alle Schichten</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
<script src="js/jquery-3.7.1.min.js" type="text/javascript"></script>
<script src="js/helferdb.js" type="text/javascript"></script>
<script> collapse_table_rows();
</script>
</head>
<body>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'index.php';"><b>&larrhk;</b></button>
<h1> Alle Schichten / Schichten hinzuf&uuml;gen </h1>
<div style="width: 100%;">
<?php
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link = mysqli_connect (
MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK
);
include '_login.php';
/// Detailinformation zu ausgewaehlten Schicht Holen
////////////////////////////////////////////////////////
if(isset($_POST['CloseInfo']))
{
UNSET($InfoMeineSchichtID);
UNSET($InfoAlleSchichtID);
}
if(isset($_POST['InfoMeineSchichtID']))
{
$InfoMeineSchichtID = $_POST['InfoMeineSchichtID'];
UNSET($InfoAlleSchichtID);
//echo "<b>". $SchichtID . "</b><br>";
$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 "<b>". $SchichtID . "</b><br>";
$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
////////////////////////////////////////////////////////
?>
<form method="post" action="AlleSchichten.php#Info">
<?php
// Neu Schicht fuer Helfer Eintragen
///////////////////////////////////////////////////////////
if(isset($_POST['plusschicht'])) {
$messages = [];
$SchichtId = $_POST['plusschicht'];
// 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))
{
// Helfer Schicht zuweisen
$db_erg = HelferSchichtZuweisen($db_link,$HelferID,$SchichtId);
// Erfolg vermelden und Skript beenden, damit Formular nicht erneut ausgegeben wird
$HelferName = '';
$HelferEmail = '';
$HelferHandy = '';
//die('<div class="Helfer wurde angelegt.</div>');
}
else
{
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message)
{
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
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 '<div class="error"><ul>';
foreach($messages as $message)
{
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
/// 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 '<table class="commontable"><tr class="header"><th onclick="window.location.href=\'MeineSchichten.php\'">';
echo '<img src="Bilder/PfeilRechts2.png" style="width:30px;height:30px;align:middle;">'. " Mein Dienstplan (";
echo $zeile['Anzahl'];
echo " Schichten, ";
echo $zeile['Dauer']/3600;
echo " Stunden)";
echo '</th></tr></table><br><br>';
/// 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 "<br>Detail=".$addschicht."<br>";
if($addschicht=='0')
{
echo "<p><b>Schichten Hinzufügen geordnet nach</b>";
echo "<button name='addschicht' value='1'>Tage</button>";
echo "<button name='addschicht' value='2'>Dienste</button></p>";
}
//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 "<button type='button' onclick='expand_all_table_rows();'>Alles Ausklappen</button>";
//echo "<p><button name='addschicht' value='0'><b>&larrhk;</b></button></p>";
echo '<table id="customers">';
echo "<tr class='header'>";
echo "<th colspan='7'>". "Alle Schichten der Con (" . $iBelegteSchichtenCount."/".$iAlleSchichtenCount. ")</th></tr>";
/*
if ($dienstsort=='1')
{
echo "<th>". "Dienst" . "</th>";
}
else
{
echo "<th>". "Von" . "</th>";
}
*/
echo "<tr class='header'>"; // Zeitbereich tr
if ($ZeitBereich==1)
{
echo "<th style='width:100px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=1\"'>". "Alle" . "</th>";
}
else
{
echo "<th style='width:100px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=1\"'>". "Alle" . "</th>";
}
if ($ZeitBereich==2)
{
echo "<th style='width:100px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=2\"'>". "Davor" . "</th>";
}
else
{
echo "<th style='width:100px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=2\"'>". "Davor" . "</th>";
}
if ($ZeitBereich==3)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=3\"'>". "Do" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=3\"'>". "Do" . "</th>";
}
if ($ZeitBereich==4)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=4\"'>". "Fr" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=4\"'>". "Fr" . "</th>";
}
if ($ZeitBereich==5)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=5\"'>". "Sa" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=5\"'>". "Sa" . "</th>";
}
if ($ZeitBereich==6)
{
echo "<th style='width:50px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=6\"'>". "So" . "</th>";
}
else
{
echo "<th style='width:50px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=6\"'>". "So" . "</th>";
}
if ($ZeitBereich==7)
{
echo "<th style='width:100px; background-color:#0000FF' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=7\"'>". "Danach" . "</th>";
}
else
{
echo "<th style='width:100px' onclick='window.location.href=\"AlleSchichten.php?ZeitBereich=7\"'>". "Danach" . "</th>";
}
echo "</tr>"; //Zeitbereich tr
$OldTag = "";
$OldWas = "";
# um Zeilen mit von mir belegten Schichten hervorzuheben
$MeineDienste = SchichtIdArrayEinesHelfers($db_link,$HelferID);
//print_r($MeineDienste);
echo '</table>';
echo '<table id="customers">';
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
if ($dienstsort=='1')
{
$Tag = $zeile['Tag'];
if ($Tag!=$OldTag)
{
echo "<tr class='header'><th colspan='5' >";
echo $Tag;
echo "</th></tr>";
$OldTag = $Tag;
}
}
else
{
$Was = $zeile['Was'];
if ($Was!=$OldWas)
{
echo "<tr class='header'><th colspan='7' style='width:100%'>";
echo $Was;
echo "</th>";
/*
echo "<th style='width:100px'>". "Von" . "</th>";
echo "<th style='width:130px'>". "Bis" . "</th>";
echo "<th style='width:90px'>". "Ist/Soll" . "</th>";
echo "<th style='width:90px'>". "Add" . "</th>";
*/
echo "</tr>";
$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 '<tr '.$rowstyle.'onclick="window.location.href=\'DetailsSchichten.php?InfoAlleSchichtID='.$zeile['SchichtID'].'#Info\';" >';
if ($dienstsort=='1')
{
echo "<td>". $zeile['Was'] . "</td>";
}
else
{
echo "<td>". $zeile['Tag'] . "</td>";
}
echo "<td>". $Von . "</td>";
echo "<td>". $Bis . "</td>";
echo "<td bgcolor='".$Color."'>". $zeile['Ist'] . "/";
echo "". $zeile['Soll'] . "</td>";
# buttons sind in der selben Zelle
echo "<td width='30px'>" . "<button width='20px' name='plusschicht' value='". $zeile['SchichtID'] ."'>+</button>" ."";
echo "" . "&nbsp;&nbsp;<button width='120px' name='minusschicht' value='". $zeile['SchichtID'] ."'>&ndash;</button> $regtext" ."</td>";
//echo "<td>$regtext</td>";
echo "</tr>\n";
}
echo "</table>";
}
mysqli_free_result( $db_erg );
?>
</form>
</div>
</body>
</html>

167
html/Ausdrucke.php Normal file
View File

@ -0,0 +1,167 @@
<!doctype html>
<html>
<head>
<title>Admin Drop am See</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<link rel="stylesheet" href="css/style_print.css" media="print"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<div style="width: 100%;">
<?php
SESSION_START();
require_once('konfiguration.php');
include 'SQL.php';
$db_link = mysqli_connect (
MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK
);
DatenbankAufDeutsch($db_link);
include '_login.php';
?>
<table id="customers" >
<tr>
<th><button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button> &nbsp; <b>Übersicht Dienst DAS 2023</b></th>
</tr>
</table>
<?php
echo '<table id="customers" >';
$db_erg = GetDiensteChilds($db_link,0);
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
echo "<tr><th>";
echo $zeile["Was"];
echo "</th></tr>";
$db_erg2 = GetDiensteChilds($db_link,$zeile["DienstID"]);
while ($zeile = mysqli_fetch_array( $db_erg2, MYSQLI_ASSOC))
{
echo "<tr><td>";
echo $zeile["Was"];
echo "</td></tr>";
}
}
echo "</table>";
$db_erg = AlleSchichtenImZeitbereich($db_link,"2000-05-18 00:00:00","2200-05-19 00:00:00");
$OldWas="";
echo "<br><br><table id='customers' style='page-break-before:always'>";
?>
<tr>
<th><button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button> &nbsp; <b>Übersicht Schichten der Dienste DAS 2023</b></th>
</tr>
<?php
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
$Was = $zeile["Was"];
if($Was!= $OldWas)
{
echo "</table>";
//echo '<table id="customers" style="page-break-before:always">';
echo '<table id="customers">';
echo "<tr><th colspan=3>";
echo $Was;
echo "</th></tr>";
$OldWas=$Was;
}
echo "<tr><td style='width:100px'>";
echo $zeile["Ab"];
echo "</td><td style='width:100px'>";
echo $zeile["Bis"];
echo "</td><td>";
$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 "</td></tr>";
}
echo "</table>";
$OldHelferName="";
echo "<br><br><table id='customers' style='page-break-before:always'>";
?>
<tr>
<th><button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button> &nbsp; <b>Übersicht Helfer und Ihre Schichten DAS 2023</b></th>
</tr>
<?php
$db_erg = AlleHelferSchichtenUebersicht($db_link);
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
$HelferName = $zeile["Name"];
if($HelferName!= $OldHelferName)
{
echo "</table>";
//echo '<table id="customers" style="page-break-before:always">';
echo '<table id="customers">';
echo "<tr><th colspan=3>";
echo $HelferName;
echo "</th></tr>";
$OldHelferName=$HelferName;
}
echo "<tr><td style='width:100px'>";
echo (int)$zeile["Dauer"];
echo "</td><td>";
echo $zeile["Was"];
echo "</td></tr>";
}
echo "</table>";
?>
<?php
mysqli_free_result( $db_erg );
?>
</body>
</html>

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.0"
width="145"
height="129"
viewBox="0 0 580.6125 517.08825"
id="svg2283"
xml:space="preserve"
sodipodi:docname="Attention_Sign.svg"
inkscape:version="1.2 (56b05e47e7, 2022-06-09, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview159"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.5314742"
inkscape:cx="289.59025"
inkscape:cy="243.88266"
inkscape:window-width="1848"
inkscape:window-height="1016"
inkscape:window-x="72"
inkscape:window-y="387"
inkscape:window-maximized="1"
inkscape:current-layer="svg2283" /><defs
id="defs2300" />
<g
id="Layer_4"
transform="translate(-24.34836,-31.424255)">
<g
id="g2286">
<polygon
points="314.611,102.892 93.581,485.725 535.637,485.725 "
style="fill:none"
id="polygon2288" />
<path
d="M 590.194,472.222 353.581,62.393 c -8.039,-13.924 -22.895,-22.501 -38.972,-22.501 -16.077,0 -30.931,8.577 -38.97,22.499 L 39.021,472.222 c -4.02,6.962 -6.029,14.731 -6.029,22.5 0,7.77 2.009,15.539 6.029,22.5 8.039,13.925 22.895,22.502 38.972,22.502 h 473.232 c 16.074,0 30.932,-8.577 38.971,-22.502 4.02,-6.961 6.029,-14.729 6.027,-22.499 0,-7.768 -2.01,-15.538 -6.029,-22.501 z"
style="fill:#ed171f"
id="path2290" />
</g>
</g>
<g
id="Layer_5"
transform="translate(-24.34836,-31.424255)">
<polygon
points="535.635,485.725 93.58,485.725 314.61,102.892 "
style="fill:#feb82f"
id="polygon2293" />
</g>
<g
id="Layer_3"
transform="translate(-24.34836,-31.424255)">
<circle
cx="314.60699"
cy="436.29401"
r="27.247"
id="circle2237" />
<path
d="m 314.608,192.817 c -16.974,0 -28,11.271 -27.628,23.088 0.273,8.587 1.258,37.549 2.927,56.63 l 8.223,91.644 c 1.312,11.147 3.202,19.351 5.672,24.692 2.197,4.754 5.798,7.358 10.806,7.854 5.008,-0.495 8.61,-3.1 10.806,-7.854 2.469,-5.342 4.358,-13.545 5.671,-24.692 l 8.225,-91.644 c 1.67,-19.081 2.654,-48.043 2.926,-56.63 0.344,-10.931 -10.654,-23.088 -27.628,-23.088 z"
id="path2297" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
html/Bilder/Info.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
html/Bilder/More.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

BIN
html/Bilder/dot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

178
html/CreateHelfer.php Normal file
View File

@ -0,0 +1,178 @@
<!doctype html>
<html>
<head>
<title>Drop Am See 2023</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<?php
SESSION_START();
//$HelferID = $_SESSION["HelferId"];
require_once ('konfiguration.php');
include 'SQL.php';
$db_link = mysqli_connect (
MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK
);
if(isset($_POST['sent'])) {
$messages = [];
$HelferName = $_POST['helfer-name'];
$HelferEmail = $_POST['helfer-email'];
$HelferHandy = $_POST['helfer-handy'];
$HelferLevel = $_POST['helfer-level'];
$HelferPasswort = $_POST['helfer-passwort'];;
$HelferPasswort2 = $_POST['helfer-passwort2'];;
//echo $HelferName;
//echo $HelferEmail;
//echo $HelferHandy;
// Eingaben überprüfen:
//if(!preg_match('/^[a-zA-Z]+[a-zA-Z0-9._]+$/', $HelferName)) {
// $messages[] = 'Bitte prüfen Sie die eingegebenen Namen';
//}
if(!filter_var($HelferEmail, FILTER_VALIDATE_EMAIL)) {
$messages[] = 'Bitte prüfen Sie die eingegebene E-Mail-Adresse.';
}
//if(!filter_var($HelferHandy, FILTER_VALIDATE_INT)) {
// $messages[] = 'Bitte prüfen Sie die eingegebene Handynummer';
//}
if($HelferPasswort!=$HelferPasswort2)
{
$messages[] = 'Passwörter stimmen nicht überein';
$HelferPasswort ="";
$HelferPasswort2 = "";
}
if(strlen($HelferPasswort)<8)
{
$messages[] = 'Passwörter zu kurz';
$HelferPasswort ="";
$HelferPasswort2 = "";
}
if(empty($messages))
{
$db_erg = CreateHelfer($db_link,$HelferName,$HelferEmail, $HelferHandy,$HelferPasswort,$HelferLevel);
if ( $db_erg )
{
//$insertID = mysql_insert_id();
//echo "InserId = ".$insertID;
// Erfolg vermelden und Skript beenden, damit Formular nicht erneut ausgegeben wird
echo "Helfer mit Emailadresse ".$HelferEmail." Angelegt.<br><br>";
$HelferName = '';
$HelferEmail = '';
$HelferHandy = '';
$HelferPasswort = '';
$HelferPasswort2 = '';
//die('<div class="Helfer wurde angelegt.</div>');
}
else
{
echo "Helfer konnte nicht Angelegt werden, möglichweise exisistiert die Emailadresse ".$HelferEmail." bereits.<br><br>";
}
} else {
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
?>
<p>Hier k&ouml;nnen Sie sich selbst einen Account als Helfer anlegen.</p>
<form method="post">
<table id="customers">
<tr>
<th>Helferdaten</th>
</tr>
<tr>
<td>Name</td>
</tr>
<tr><td>
<input name="helfer-name" type="text" value="<?=htmlspecialchars($HelferName??'')?>" required>
</td></tr>
<tr>
<td>Email</td>
</tr>
<tr><td>
<input name="helfer-email" type="email " value="<?=htmlspecialchars($HelferEmail??'')?>" required>
</td></tr>
<tr>
<td>Handy</td>
</tr>
<tr><td>
<input name="helfer-handy" type="tel" value="<?=htmlspecialchars($HelferHandy??'')?>" >
</td>
</tr>
<tr>
<td>Passwort</td></tr>
<tr><td>
<input name="helfer-passwort" type="password" value="<?=htmlspecialchars($HelferPasswort??'')?>" required>
</td>
</tr>
<tr><td>Passwort wiederholen </td></tr>
<tr><td>
<input name="helfer-passwort2" type="password" value="<?=htmlspecialchars($HelferPasswort2??'')?>" required>
</td>
</tr>
<tr><td>Helferlevel </td></tr>
<tr><td>
<select name="helfer-level">
<?php
$db_erg = HelferLevel($db_link);
$selected="";
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC)) {
$HelferLevel = $zeile['HelferLevel'];
$HelferLevelBeschreibung = $zeile['HelferLevelBeschreibung'];
if($HelferLevel==1){ $selected = " selected " ;};
echo "<option value='$HelferLevel' $selected>$HelferLevelBeschreibung</option>";
$selected="";
}
?>
</select>
</td>
</tr>
</table>
<br>
<button name="sent" value="1">Helfer Anlegen</button>
</form>
<?php
mysqli_free_result( $db_erg );
?>
</body>
</html>

46
html/DecodeToken.php Normal file
View File

@ -0,0 +1,46 @@
<!doctype html>
<html>
<head></head>
<body>
<?php
require_once ('konfiguration.php');
if(isset($_GET['token']) ) {
// E-Mail-Adresse des Nutzers
$encrypted_data = $_GET['token'];
$encrypted_iv = $_GET['iv'];
echo "token: $encrypted_data<br> \n";
echo "iv: $encrypted_iv<br> \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, "<br>\n";
} else {
echo "Kein g&uuml;ltiges Token!<br>";
}
?>
</body></html>

218
html/EmailZuToken.php Normal file
View File

@ -0,0 +1,218 @@
<?php
// Login und Admin Status testen. Wenn kein Admin-Status, Weiterleiten auf index.php und beenden
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link=ConnectDB();
include '_login.php';
include '_crypt.php';
if($AdminStatus != 1) {
//Seite nur fuer Admins. Weiter zu index.php und exit, wenn kein Admin
echo '<!doctype html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
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'];
}
?>
<!doctype html>
<head>
<title>Helfer Drop am See: Email Tokens generieren</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<?php
?>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button>
<div style="width: 100%;">
<p>
<h2> Emails mit Login-Link zur HelferDB generieren </h2>
Generiert Tokens (bzw URLs mit Token) aus einer Liste von Email-Addressen. <br>
Bei Klick auf den generierten Link wird sofort ein Account zur Email angelegt. <br>
Als Passwort wird das Token gesetzt. Man kann sich mit dem Link danach wieder in den selben Account einloggen.
</p>
<p>
!! Emails werden erst verschickt, wenn die Checkbox unten angeklickt ist
</p>
<form method="POST" action="EmailZuToken.php">
<p>
<label for="helfer-status">Status des Accounts, den der Link erstellt:</label>
<select style="width:260px" id="helfer-status" name="helfer-status">
<!-- TODO: aus DB abfragen -->
<option value="2"<?php if($level==2){echo "selected";}?>>Teilnehmer</option>
<option value="1" <?php if($level==1){echo "selected";}?>>Dauerhelfer</option>
</select>
</p><p>
Subject der Email: <br>
<input id="email-subject" name="email-subject" type="textbox" value="<?=htmlspecialchars($email_subject??'');?>">
</p><p>
CC (Kopie) der Email geht an: <br>
<input id="email-cc" name="email-cc" type="textbox" value="drophelfer@gmail.com">
</p><p>
Emailtext (XXtokenXX an die Stelle schreiben, an der der Link im Emailtext stehen soll):
</p><p>
<textarea id="email-text" name="email-text" rows="20" cols="80">
<?=htmlspecialchars($email_text??'');?>
</textarea>
</p>
<p>
Liste von Emails, an die Anschreiben verschickt wird (Eine Email pro Zeile, nur die Email xxx@yyy.zz, keine Leerzeichen):<br>
<textarea id="helfer-email-liste" name="helfer-email-liste" rows="20" cols="80"></textarea> <br>
</p>
<div>
<input type="checkbox" id="sendmail" name="sendmail" value="1" style="align:left;width:40px;!important">
<label for="sendmail">Emails verschicken</label>
</div>
<br>
<button name="email-liste" value="1">Token generieren</button>
</form>
</p>
<?php
if(isset($_POST['email-liste'])) {
// TODO: check if email-text contains tokentext to substitute
// TODO: check if subject is set
// get email addresses from textarea
$email_list = $_POST['helfer-email-liste'];
// Aufteilen der Textbox in einzelne Emails
//mit explode: jede Email in einer Zeile, andere Leerzeichen koennen zur Email werden
// $emails = explode("\n", $email_list);
//preg_split, um bei allen Leerzeichen zu trennen
$email_array = preg_split('/\s+/', $email_list); // Trennzeichen: 1 oder mehr Whitespace-Zeichen
foreach ($email_array as $email) {
$email=trim($email);
$encrypted_data=encode_string($secret_key, $email,$level,$secret_verification);
$token_url = "$urlprefix?token=$encrypted_data";
// Ausgabe des verschluesselten Textes in der URL
$decrypted_data = decode_string($secret_key, urldecode($encrypted_data),$secret_verification);
$email_subst_text = str_replace('XXtokenXX', $token_url, $email_text);
if($sendmail != 1){
// keine Emails verschicken, wir gebeben die Inhalte unten als Text aus
echo "Verschicken nicht ausgew&auml;hlt. Zeige Emails an:<br>";
echo $sendmail ."<br>";
echo "=======================================<br>";
echo "To: ".$decrypted_data['email']." (level: ".$decrypted_data['level']."):<br>";
echo "CC: ".$email_cc."<br>";
echo "<pre>".$email_subst_text."</pre><br>";
echo "$email: <a href='$token_url'> $token_url</a> (check: ".$decrypted_data['email'].", lv: ".$decrypted_data['level'].")<br>";
} 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.";
}
}
}
}
?>
</body>
</html>
<!--Einzelne Email
<p>
<form method="GET">
<input id="helfer-email" name="helfer-email" type="textbox" value="<?=htmlspecialchars($HelferEmail??'')?>">
<button name="sent" value="1">Token generieren</button>
</form>
</p>
-->
<?php
//single email
#if(isset($_GET['helfer-email'])) {
# $email = $_GET['helfer-email'];
# echo "email: $email <br> \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: <a href='$linktext'> $urlprefix/$linktext</a>(check: $decrypted_data ) <br>";
# exit;
#}
?>

13
html/Info.php Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html>
<head>
<title>Helfer Drop am See Home</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta http-equiv="Refresh" content="0; url=<?php require_once ('konfiguration.php'); echo INFORMATIONS_URL;?>" />
<meta name="viewport" content="width=480" />
</head>
<body>
<!-- hier Infos zur eigenen Con oder Helferdiensten allgemein angeben -->
</body>
</html>

198
html/Kalender-all.html Normal file
View File

@ -0,0 +1,198 @@
<!DOCTYPE html>
<html>
<head>
<title> Helferdienste </title>
<meta charset="utf-8">
<!--meta name="viewport" content="width=device-width, initial-scale=1 ,user-scalable=1"-->
<script src="../scheduler/codebase/dhtmlxscheduler.js"></script>
<!--link href="../scheduler/codebase/dhtmlxscheduler.css" rel="stylesheet" type="text/css" charset="utf-8"-->
<link href="../scheduler/codebase/dhtmlxscheduler_contrast_black.css" rel="stylesheet" type="text/css" charset="utf-8">
<link rel="stylesheet" href="../scheduler/samples/common/controls_styles.css">
<style>
html, body{
margin:0px;
padding:0px;
height:100%;
overflow:hidden;
}
.dhx_cal_event_line,.dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{
border:none !important;
border-radius:3px 3px 3px 3px !important;
}
.dhx_scale_holder {background-image: url('Bilder/calendar_lines1.png') !important; background-blend-mode:color-dodge;}
</style>
<!-- darkstyle
style type="text/css" >
.filters_wrapper {
background-color: black;
color: white;
font: 500 14px Roboto;
padding-left: 15px;
padding-right: 15px;
}
.filters_wrapper span {
font-weight: bold;
padding-left: 15px;
padding-right: 15px;
color: rgba(0,0,0,0.7);
}
.filters_wrapper label {
padding-left: 15px;
padding-right: 15px;
}
</style-->
</head>
<body>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'Admin.php';"><b>&larrhk;</b></button><br>
<div class="filters_wrapper" id="filters_wrapper">
&nbsp;
Mehrtagesdienste anzeigen: <input id="multidaycheck" class="sch_radio" type="checkbox" checked onchange="toggleMultiday(this)">
Einfärben: <input type="text" id="colorize"> <!--onchange="markEntries(this.value);" onpaste = "this.onchange();" onsubmit="markEntries(this.value);"-->
Filtern: <input type="text" id="filterWrap">
<br/>
<!--Achtung: Ende Nachtdienste wird falsch angezeigt (immer Mitternacht) - Popup-Fenster zeigt richtige Zeiten-->
</div>
<div id="scheduler_here" class="dhx_cal_container" style='width:100%; height:100%;'>
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button">&nbsp;</div>
<div class="dhx_cal_next_button">&nbsp;</div>
<div class="dhx_cal_today_button"></div>
<div class="dhx_cal_date"></div>
<div class="dhx_cal_tab" name="day_tab"></div>
<div class="dhx_cal_tab" name="week_tab"></div>
<div class="dhx_cal_tab" name="month_tab"></div>
<div class="dhx_cal_tab" data-tab="con" style="right:280px;"></div>
<div class="dhx_cal_tab" data-tab="prep" style="right:280px;" ></div>
</div>
<div class="dhx_cal_header"></div>
<div class="dhx_cal_data"></div>
</div>
<script>
//https://docs.dhtmlx.com/scheduler/filtering.html
var filter = document.querySelector("#filterWrap");
filter.addEventListener("input", function(){
scheduler.setCurrentView();
})
scheduler.filter_month = scheduler.filter_day = scheduler.filter_week = scheduler.filter_con = scheduler.filter_prep = function(id, event) {
if(filter.value == ""){
return true;
}
if(event.text.toLowerCase().includes(filter.value.toLowerCase()) ){
return true;
}
if(event.Name && event.Name.toLowerCase().includes(filter.value.toLowerCase()) ){
return true;
}
return false;
};
function toggleMultiday(element)
{
scheduler.config.multi_day = element.checked ;
scheduler.render();
//scheduler.updateView(); // this or render work both - whats the difference
}
document.getElementById('colorize').addEventListener( "change" , colorize);
document.getElementById('colorize').addEventListener( "input" , colorize);
document.getElementById('colorize').addEventListener( "paste" , colorize);
function colorize (e){ //KS
var text=e.target.value;
console.log(text);
var evs = scheduler.getEvents();
if(!evs[0].oricolor){
for (var i=0; i<evs.length; i++){
evs[i].oricolor=evs[i].color;
console.log("init "+evs[i].color);
}
}
for (var i=0; i<evs.length; i++){
if(evs[i].oricolor){evs[i].color=evs[i].oricolor;}
if(text.length>1 && evs[i].text.includes(text)){ // search description
evs[i].color="blue";
console.log("colored event: ",evs[i]," ori: ",evs[i].oricolor);
}
if(text.length>2 && evs[i].Name && evs[i].Name.includes(text)){ // search names
evs[i].color="lightblue";
console.log("colored event: ",evs[i]," ori: ",evs[i].oricolor);
}
}
scheduler.updateView();
}
scheduler.plugins({
tooltip: true,
readonly: true,
all_timed: true,
quick_info: true
});
scheduler.config.full_day=false;
scheduler.config.xml_date="%Y-%m-%d %H:%i"; // deprecated but needed for database format
scheduler.config.first_hour = 0; // only show from this hour on
scheduler.config.last_hour = 24; // last hour
scheduler.setLoadMode("day"); // dynamic loading loads only current day if needed
scheduler.config.details_on_create=true; // ???
scheduler.config.details_on_dblclick=true;
scheduler.i18n.setLocale("de"); // german
scheduler.config.default_date="%l, %d %F"; // %l long day eg Montag,
//scheduler.config.readonly = true; // doesnt show lightbox if true so disabled
scheduler.locale.labels.con_tab = "4-Tage" // for custom time ranges
scheduler.locale.labels.prep_tab = "2-Tage"
scheduler.attachEvent("onTemplatesReady",function(){ // for custom time ranges
//Con timeslot
scheduler.date.con_start = function(date){return date;}; //new Date(202x,5,16);}; // calculates start-day of range from current day
scheduler.templates.con_date = scheduler.templates.week_date;
scheduler.templates.con_scale_date = scheduler.templates.week_scale_date;
scheduler.date.add_con=function(date,inc){ return scheduler.date.add(date,inc*4,"day"); }//"next" gives you the next 4 days
scheduler.date.get_con_end=function(date){ return scheduler.date.add(date,4,"day"); }
//preparation phase 2 days
function setprep(){scheduler.setCurrentView(new Date(2023,4,16));}
scheduler.date.prep_start = function(date){return date};
scheduler.templates.prep_date = scheduler.templates.week_date;
scheduler.templates.prep_scale_date = scheduler.templates.week_scale_date;
scheduler.date.add_prep=function(date,inc){ return scheduler.date.add(date,inc*1,"day"); }//"next" gives you the next 2 days
scheduler.date.get_prep_end=function(date){ return scheduler.date.add(date,2,"day"); }
});
const dayDate = scheduler.date.date_to_str("%D %d %F %Y");
scheduler.templates.day_date = function (date) {
return dayDate(date);
};
scheduler.config.all_timed = "short"; // night events arent multi-day - events under 24h are shown
scheduler.config.lightbox.sections=[
{name:"description", height:130, map_to:"text", type:"textarea" , focus:true},
{name:"Dienstbeschreibung", height:90, type:"textarea", map_to:"Info" },
{name:"Konakt", height:200, type:"textarea", map_to:"Kontakt" },
{name:"time", height:72, type:"time", map_to:"auto"}
];
scheduler.templates.tooltip_text = function(start,end,event) {
return "<b>Helfer:</b> <pre>"+event.Name+"</pre><br/></b> ";
};
// actual init
scheduler.init('scheduler_here', new Date(2023,4,18), "con");
scheduler.load("data/api-full.php");
//https://docs.dhtmlx.com/scheduler/api__scheduler_createdataprocessor.html
//var dp = scheduler.createDataProcessor("data/api.php"); // this would be for saving
//dp.init(scheduler);
//dp.setTransactionMode("JSON"); // use to transfer data with JSON
</script>
</body>
</html>

194
html/Kalender.php Normal file
View File

@ -0,0 +1,194 @@
<!DOCTYPE html>
<html>
<head>
<title> Helferdienste </title>
<meta charset="utf-8">
<!--meta name="viewport" content="width=device-width, initial-scale=1 ,user-scalable=1"-->
<script src="../scheduler/codebase/dhtmlxscheduler.js"></script>
<!-- link href="../scheduler/codebase/dhtmlxscheduler_contrast_black.css" rel="stylesheet" type="text/css" charset="utf-8"-->
<link href="../scheduler/codebase/dhtmlxscheduler.css" rel="stylesheet" type="text/css" charset="utf-8">
<link rel="stylesheet" href="../scheduler/samples/common/controls_styles.css">
<style>
html, body{
margin:0px;
padding:0px;
height:100%;
overflow:hidden;
}
</style>
<!-- darkstyle
style type="text/css" >
.filters_wrapper {
background-color: black;
color: white;
font: 500 14px Roboto;
padding-left: 15px;
padding-right: 15px;
}
.filters_wrapper span {
font-weight: bold;
padding-left: 15px;
padding-right: 15px;
color: rgba(0,0,0,0.7);
}
.filters_wrapper label {
padding-left: 15px;
padding-right: 15px;
}
</style-->
</head>
<body>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'index.php';"><b>&larrhk;</b></button><br>
<div class="filters_wrapper" id="filters_wrapper">
&nbsp;
Mehrtagesdienste anzeigen: <input id="multidaycheck" class="sch_radio" type="checkbox" checked onchange="toggleMultiday(this)">
Einfärben: <input type="text" id="colorize"> <!--onchange="markEntries(this.value);" onpaste = "this.onchange();" onsubmit="markEntries(this.value);"-->
Filtern: <input type="text" id="filterWrap">
<br/>
Achtung: Ende Nachtdienste wird falsch angezeigt (immer Mitternacht) - Popup-Fenster zeigt richtige Zeiten
</div>
<div id="scheduler_here" class="dhx_cal_container" style='width:100%; height:100%;'>
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button">&nbsp;</div>
<div class="dhx_cal_next_button">&nbsp;</div>
<div class="dhx_cal_today_button"></div>
<div class="dhx_cal_date"></div>
<div class="dhx_cal_tab" name="day_tab"></div>
<div class="dhx_cal_tab" name="week_tab"></div>
<div class="dhx_cal_tab" name="month_tab"></div>
<div class="dhx_cal_tab" data-tab="con" style="right:280px;"></div>
<div class="dhx_cal_tab" data-tab="prep" style="right:280px;" ></div>
</div>
<div class="dhx_cal_header"></div>
<div class="dhx_cal_data"></div>
</div>
<script>
//https://docs.dhtmlx.com/scheduler/filtering.html
var filter = document.querySelector("#filterWrap");
filter.addEventListener("input", function(){
scheduler.setCurrentView();
})
scheduler.filter_month = scheduler.filter_day = scheduler.filter_week = scheduler.filter_con = scheduler.filter_prep = function(id, event) {
if(filter.value == ""){
return true;
}
if(event.text.toLowerCase().includes(filter.value.toLowerCase()) ){
return true;
}
if(event.Name && event.Name.toLowerCase().includes(filter.value.toLowerCase()) ){
return true;
}
return false;
};
function toggleMultiday(element)
{
scheduler.config.multi_day = element.checked ;
scheduler.render();
//scheduler.updateView(); // this or render work both - whats the difference
}
document.getElementById('colorize').addEventListener( "change" , colorize);
document.getElementById('colorize').addEventListener( "input" , colorize);
document.getElementById('colorize').addEventListener( "paste" , colorize);
function colorize (e){ //KS
var text=e.target.value;
console.log(text);
var evs = scheduler.getEvents();
if(!evs[0].oricolor){
for (var i=0; i<evs.length; i++){
evs[i].oricolor=evs[i].color;
console.log("init "+evs[i].color);
}
}
for (var i=0; i<evs.length; i++){
if(evs[i].oricolor){evs[i].color=evs[i].oricolor;}
if(text.length>1 && evs[i].text.includes(text)){ // search description
evs[i].color="blue";
console.log("colored event: ",evs[i]," ori: ",evs[i].oricolor);
}
if(text.length>2 && evs[i].Name && evs[i].Name.includes(text)){ // search names
evs[i].color="lightblue";
console.log("colored event: ",evs[i]," ori: ",evs[i].oricolor);
}
}
scheduler.updateView();
}
scheduler.plugins({
tooltip: true,
readonly: true,
all_timed: true,
quick_info: true
});
scheduler.config.full_day=false;
scheduler.config.xml_date="%Y-%m-%d %H:%i"; // deprecated but needed for database format
scheduler.config.first_hour = 0; // only show from this hour on
scheduler.config.last_hour = 24; // last hour
scheduler.setLoadMode("day"); // dynamic loading loads only current day if needed
scheduler.config.details_on_create=true; // ???
scheduler.config.details_on_dblclick=true;
scheduler.i18n.setLocale("de"); // german
scheduler.config.default_date="%l, %d %F"; // %l long day eg Montag,
//scheduler.config.readonly = true; // doesnt show lightbox if true so disabled
scheduler.locale.labels.con_tab = "4-Tage" // for custom time ranges
scheduler.locale.labels.prep_tab = "2-Tage"
scheduler.attachEvent("onTemplatesReady",function(){ // for custom time ranges
//Con timeslot
scheduler.date.con_start = function(date){return date;}; //new Date(202,5,16);}; // calculates start-day of range from current day
scheduler.templates.con_date = scheduler.templates.week_date;
scheduler.templates.con_scale_date = scheduler.templates.week_scale_date;
scheduler.date.add_con=function(date,inc){ return scheduler.date.add(date,inc*4,"day"); }//"next" gives you the next 4 days
scheduler.date.get_con_end=function(date){ return scheduler.date.add(date,4,"day"); }
//preparation phase 2 days
function setprep(){scheduler.setCurrentView(new Date(2023,4,16));}
scheduler.date.prep_start = function(date){return date};
scheduler.templates.prep_date = scheduler.templates.week_date;
scheduler.templates.prep_scale_date = scheduler.templates.week_scale_date;
scheduler.date.add_prep=function(date,inc){ return scheduler.date.add(date,inc*1,"day"); }//"next" gives you the next 2 days
scheduler.date.get_prep_end=function(date){ return scheduler.date.add(date,2,"day"); }
});
const dayDate = scheduler.date.date_to_str("%D %d %F %Y");
scheduler.templates.day_date = function (date) {
return dayDate(date);
};
scheduler.config.all_timed = "short"; // night events arent multi-day - events under 24h are shown
scheduler.config.lightbox.sections=[
{name:"description", height:130, map_to:"text", type:"textarea" , focus:true},
{name:"Dienstbeschreibung", height:90, type:"textarea", map_to:"Info" },
{name:"Konakt", height:200, type:"textarea", map_to:"Kontakt" },
{name:"time", height:72, type:"time", map_to:"auto"}
];
scheduler.templates.tooltip_text = function(start,end,event) {
return "<b>Helfer:</b> <pre>"+event.Name+"</pre><br/></b> ";
};
// actual init
scheduler.init('scheduler_here', new Date(2023,4,18), "con");
scheduler.load("data/api-helfer.php");
//https://docs.dhtmlx.com/scheduler/api__scheduler_createdataprocessor.html
//var dp = scheduler.createDataProcessor("data/api.php"); // this would be for saving
//dp.init(scheduler);
//dp.setTransactionMode("JSON"); // use to transfer data with JSON
</script>
</body>
</html>

352
html/MeineSchichten.php Normal file
View File

@ -0,0 +1,352 @@
<!doctype html>
<html>
<head>
<title>Admin Drop am See</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'index.php';"><b>&larrhk;</b></button>
<div style="width: 100%;">
<?php
SESSION_START();
require_once ('konfiguration.php');
//require_once ('SQL.php');
include 'SQL.php';
$db_link = mysqli_connect (
MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK
);
/// Detailinformation zu ausgewaehlten Schicht Holen
////////////////////////////////////////////////////////
if(isset($_POST['CloseInfo']))
{
UNSET($InfoMeineSchichtID);
UNSET($InfoAlleSchichtID);
}
if(isset($_POST['InfoMeineSchichtID']))
{
$InfoMeineSchichtID = $_POST['InfoMeineSchichtID'];
UNSET($InfoAlleSchichtID);
//echo "<b>". $SchichtID . "</b><br>";
$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 "<b>". $SchichtID . "</b><br>";
$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 '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
if(!isset($_SESSION["HelferID"]))
{
?>
<form method="post" action="#Info">
<fieldset>
<legend>Login</legend>
<table border="0" style="border: 0px solid black;">
<tr>
<td style="border: 0px solid black;">Email</td></tr><tr><td style="border: 0px solid black;">
<input name="helfer-email" type="text" value="<?=htmlspecialchars($HelferEmail??'')?>" required>
</td>
<tr>
<tr>
<td style="border: 0px solid black;">Passwort</td></tr><tr><td style="border: 0px solid black;">
<input name="helfer-passwort" type="password" value="<?=htmlspecialchars($HelferHandy??'')?>" required>
</td>
<tr>
</table>
</fieldset>
<p><button name="login" value="1">Login</button></p>
</form>
<?php
exit;
}
$HelferID = $_SESSION["HelferID"];
$AdminID = $_SESSION["AdminID"];
if(isset($_POST['HelferID']))
{
$HelferID = $_POST['HelferID'];
}
if(isset($_POST['ShowHelfer'])) {
$HelferID=$_POST['HelperSearch'];
}
$_SESSION["HelferID"] = $HelferID;
/// 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,$HelferID,$EinzelSchichtID);
} else {
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
// Helferliste Anzeigen
////////////////////////////////////////////////////////
?>
<form method="post" action="MeineSchichten.php#Info">
<?php
// Neu Schicht fuer Helfer Eintragen
///////////////////////////////////////////////////////////
if(isset($_POST['sent'])) {
$messages = [];
$SchichtId = $_POST['sent'];
// 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))
{
// Helfer Schicht zuweisen
$db_erg = HelferSchichtZuweisen($db_link,$HelferID,$SchichtId);
// Erfolg vermelden und Skript beenden, damit Formular nicht erneut ausgegeben wird
$HelferName = '';
$HelferEmail = '';
$HelferHandy = '';
//die('<div class="Helfer wurde angelegt.</div>');
}
else
{
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message)
{
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
/// 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 '<table id="customers">';
echo "<thead>";
echo "<tr>";
echo "<th colspan=4>". "Meine Schichten (".$iSQLCount." Schichten)</th>";
echo "</tr><tr>";
echo "<th></th>";
echo "<th style='width:180px'>". "Von" . "</th>";
echo "<th style='width:180px'>". "Bis" . "</th>";
echo "<th style='width:90px'>". "Del" . "</th>";
echo "</tr>";
echo "</thead>";
while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
{
//echo '<tr title="Details anzeigen" onclick="parent.DetailsSchichten.location.href=\'DetailsSchichten.php?InfoAlleSchichtID='.$zeile['SchichtID'].'#Info\';" >';
echo '<tr title="Details anzeigen" onclick="window.location.href=\'DetailsSchichten.php?InfoAlleSchichtID='.$zeile['SchichtID'].'#Info\';" >';
echo "<td>". $zeile['Was'] . "</td>";
echo "<td>". $zeile['Ab'] . "</td>";
echo "<td>". $zeile['Bis'] . "</td>";
echo "<td>". "<button title='Schicht entfernen' name='Del' value='". $zeile['EinzelSchichtID'] ."'>-</button>" . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<br><br>";
$iAlleSchichtenCount = AlleSchichtenCount($db_link);
$iBelegteSchichtenCount = AlleBelegteSchichtenCount($db_link);
echo '<table id="customers" onclick="window.location.href=\'AlleSchichten.php\'">';
echo "<tr>";
echo "<th>".'<img src="Bilder/PfeilRechts2.png" style="width:30px;height:30px;align:middle;">'. " Alle Schichten der Con (".$iBelegteSchichtenCount."/".$iAlleSchichtenCount.")</th>";
echo "</tr>";
echo "</table>";
mysqli_free_result( $db_erg );
?>
</form>
</div>
</body>
</html>

62
html/ReadLog.php Normal file
View File

@ -0,0 +1,62 @@
<!doctype html>
<html>
<head>
<title>Helfer - Logs </title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<!--meta name="viewport" content="width=480" /-->
<?php
require_once ('konfiguration.php');
SESSION_START();
// if we are not logged in, we redirect in the header back to the main page
if(!isset($_SESSION["HelferID"]) || ! $_SESSION["HelferID"] > 0) {
echo ' <meta http-equiv="Refresh" content="0; URL=index.php" />
';
}
// print top of page if we are logged in and not redirecting
echo " </head> \n <body> \n";
echo '<button name="BackHelferdaten" value="1" onclick="window.location.href = \'index.php\';"><b>&larrhk;</b></button><br>'."\n";
echo '<H1> Helferdaten - Log </H1>';
echo '<p>Hier werden alle Aktionen, die einen Helfer betreffen aufgelistet</p>';
echo '<table id="customers">'."\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:<zahl> - 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 "<form>";
echo "Nur Admins: Suchbegriff (Per Default der selbe Suchtext, wie bei nicht-Admin Helfern):<input name='suche' type='text' size=35 value='$regex'><br> \n";
echo "Der Suchbegriff ist ein <a href='https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck'>Regul&auml;rer Ausdruck</a><br><br>";
echo "</form>";
}
$regex = "/"."$regex"."/";
foreach(file(LOGFILE) as $line) {
#echo "not: $line<br>\n";
if(preg_match($regex,$line,$matches)){
echo "<tr><td> $line</td></tr>";
}
}
?>
</table>
</body>
</html>

935
html/SQL.php Normal file
View File

@ -0,0 +1,935 @@
<?php
require_once ('konfiguration.php');
function ConnectDB(){
$db_link = mysqli_connect (
MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK
);
return $db_link;
}
function CreateHelfer($db_link,$HelferName,$HelferEmail, $HelferHandy,$HelferPasswort,$HelferLevel=1)
{
$HelferName=mysqli_real_escape_string($db_link, $HelferName);
$HelferEmail=mysqli_real_escape_string($db_link, $HelferEmail);
$HelferHandy=mysqli_real_escape_string($db_link, $HelferHandy);
// level: Teilnehmer/Dauerhelfer/(Teamleiter)
$HelferLevel=mysqli_real_escape_string($db_link, $HelferLevel);
//$HelferName=mysqli_real_escape($db_link,$HelferName);
$HelferPasswort = "".$HelferPasswort."ß";
//echo "<b>".$HelferPasswort."</b>";
$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<br>";
// 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 "<b>".$HelferPasswort."</b><br>";
//echo "<b>".$zeile['Passwort']."</b><br>";
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<br>";
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<br>\n";
echo "sql:$sql<br>\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 "<li>Helferdaten geändert</li>";
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 "<li>Passwort geändert</li>";
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<br>";
echo $sql;
die('<br>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<br>";
}
$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<br>";
echo "$sql <br>";
return -2;
}
else
{
echo "Helfer $HelferName (HelferID:$HelferID) wurde erfolgreich geloescht<br>";
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<br>";
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 <br>";
# 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 '<script> console.log("Schicht zuweiweisen: '.$sql.'")</script>';
$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 "<script>" . $js_code . "</script>";
#} else {
# echo "Keine Ergebnisse gefunden.";
#}
#
// direkte ausgabe in Seite
echo "<table>";
if(mysqli_num_rows($db_erg) > 0) {
// Tabellenkopf ausgeben
echo "<tr>";
$fields = mysqli_fetch_fields($db_erg);
foreach($fields as $field) {
echo "<th>" . $field->name . "</th>";
}
echo "</tr>";
// Tabelleninhalt ausgeben
while($row = mysqli_fetch_row($db_erg)) {
echo "<tr>";
foreach($row as $value) {
echo "<td>" . $value . "</td>";
}
echo "</tr>";
}
} else {
echo "<tr><td>Keine Ergebnisse gefunden.</td></tr>";
}
echo "</table>";
}
?>

95
html/UrlLogin.php Normal file
View File

@ -0,0 +1,95 @@
<?php
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
include '_crypt.php';
$head="<!doctype html>
<head></head> <body> ";
$foot="</body></html>";
$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!<br> $foot";
exit;
}
if($success != 1) {
// if ( $db_erg ) {
// echo ' <meta http-equiv="Refresh" content="0; URL=index.php" />';
// } else {
echo "$head Kein g&uuml;ltiges Token!<br>$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, "<br>\n";
//echo "Passwort: ",$token,"<br>\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 '<html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
exit;
}
?>

164
html/Userdaten.php Normal file
View File

@ -0,0 +1,164 @@
<!doctype html>
<html>
<head>
<title>Drop am See Helferdaten ändern</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<meta name="viewport" content="width=480" />
</head>
<body>
<?php
SESSION_START();
$HelferID = $_SESSION["HelferID"];
$AdminID = $_SESSION["AdminID"];
require_once ('konfiguration.php');
//require_once ('SQL.php');
include 'SQL.php';
$db_link = mysqli_connect (
MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK
);
/// Helferdaten Aendern
////////////////////////////////////////////////////////
if(isset($_POST['change'])) {
$messages = [];
// Eingaben überprüfen:
if(strlen($_POST['helfer-newpasswort'])<8 and $_POST['helfer-newpasswort']!="")
{
$messages[] = 'Neues Passwort zu kurz';
}
//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'];
$HelferHandy = $_POST['helfer-handy'];
$HelferNewPasswort = $_POST['helfer-newpasswort'];
if(empty($messages)) {
// Helferdaten Ändern
HelferdatenAendern($db_link,$HelferName,$HelferEmail,$HelferHandy,$HelferNewPasswort,$HelferID);
} else {
// Fehlermeldungen ausgeben:
echo '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
////////////////////////////////////////////////////////////////
// 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 '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
?>
<table id="customers">
<tr>
<th><button name="BackHelferdaten" value="1" onclick="window.location.href = 'index.php';"><b>&larrhk;</b></button> Helferdaten</th>
</tr>
<form method="post">
<tr>
<td>Name</td></tr><tr><td>
<input name="helfer-name" type="text" value="<?=htmlspecialchars($HelferName??'')?>" required>
</td>
</tr>
<tr>
<td>Email</td></tr><tr><td>
<input name="helfer-email" type="email " value="<?=htmlspecialchars($HelferEmail??'')?>" required>
</td>
</tr>
<tr>
<td>Handy</td></tr><tr><td>
<input name="helfer-handy" type="tel" value="<?=htmlspecialchars($HelferHandy??'')?>" >
</td>
</tr>
<tr>
<td>Altes Helfer Passwort</td></tr><tr><td>
<input name="helfer-passwort" type="password" value="<?=htmlspecialchars($HelferPasswort??'')?>" >
</td>
</tr>
<tr>
<td>Neues Helfer Passwort</td></tr><tr><td>
<input name="helfer-newpasswort" type="text" value="<?=htmlspecialchars($HelferPasswort??'')?>" >
</td>
</tr>
</table>
<p><button name="change" style="width:150px !important" value="1">&Auml;ndern</button></p>
</form>
<button name="BackHelferdaten" value="1" onclick="window.location.href = 'index.php';"><b>&larrhk;</b></button>
</body>
</html>

61
html/_crypt.php Normal file
View File

@ -0,0 +1,61 @@
<?php
function encode_string($key, $email, $level, $verification) {
// String verification anfuegen am Ende, um abgeschnittene URLs zu verhindern
$token_content = $email . '|' . $level . '|' . $verification;
// Erstellen eines Cipher-Objekts für die Verschlüsselung
$cipher_method = "AES-256-CBC";
$iv_length = openssl_cipher_iv_length($cipher_method);
$iv = openssl_random_pseudo_bytes($iv_length);
$cipher_options = OPENSSL_RAW_DATA;
// sha256 hash des passworts, damit das Geheimnis lang genug ist
$cipher_key = openssl_digest($key, 'SHA256', true);
$cipher_text = openssl_encrypt($token_content, $cipher_method, $cipher_key, $cipher_options, $iv);
if(isset($debug)) {
echo "<br>encode: cipher:".chunk_split(bin2hex($cipher_text),4,' ')." <br>iv:".chunk_split(bin2hex($iv),4,' ')." <br>iv_length:$iv_length<br>cipher_key ".chunk_split(bin2hex($cipher_key),4,' ')."<br>";
}
$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 "<br>decode: cipher:".chunk_split(bin2hex($cipher_text),4,' '). " <br>iv:".chunk_split(bin2hex($iv),4,' '). " <br>iv_length:$iv_length<br>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 "<br> decrypted_data " . $decrypted_data." end<br>";}
$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<br>\n");
return array(
'success' => 0
);
}
}
?>

90
html/_login.php Normal file
View File

@ -0,0 +1,90 @@
<?php
/// Logout
////////////////////////////////////////////////////////
if(isset($_GET['logout']) || isset($_POST['logout']))
{
// remove all session variables
session_unset();
// destroy the session
session_destroy();
echo '<!doctype html><html><head><meta http-equiv="Refresh" content="0; URL=index.php" /></head></html>';
}
/// 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 '<div class="error"><ul>';
foreach($messages as $message) {
echo '<li>'.htmlspecialchars($message).'</li>';
}
echo '</ul></div>';
}
}
if(!isset($_SESSION["HelferID"]))
{
?>
<form method="post" action="#Info">
<fieldset>
<legend>Login</legend>
<table border="0" style="border: 0px solid black;">
<tr>
<td style="border: 0px solid black;">Email</td></tr><tr><td style="border: 0px solid black;">
<input name="helfer-email" type="text" size=35 value="<?=htmlspecialchars($HelferEmail??'')?>" required>
</td>
<tr>
<tr>
<td style="border: 0px solid black;">Passwort</td></tr>
<tr><td style="border: 0px solid black;">
<input name="helfer-passwort" id="helfer-passwort" type="password" size=35 value="<?=htmlspecialchars($HelferHandy??'')?>" required>
</td><td style="border: 0px solid black;">
<input type="button" value="Passwort zeigen" style="width:180px !important" onclick="showPassword('helfer-passwort')">
</td>
<tr>
</table>
</fieldset>
<p><button style="width: 100px" name="login" value="1">Login</button></p>
</form>
<?php
exit;
}
$HelferID = $_SESSION["HelferID"];
$HelferName = $_SESSION["HelferName"];
$AdminID = $_SESSION["AdminID"];
//TODO vereinheitlichen. index.php verwendet HelferIsAdmin
$HelferIsAdmin=$AdminStatus = $_SESSION["AdminStatus"];
$HelferLevel= $_SESSION["HelferLevel"];
?>

80
html/css/style_common.css Normal file
View File

@ -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;
}

View File

@ -0,0 +1,10 @@
@import "style_common.css";
html, body {
font-size: 17;
}
button,select {
font-size: 20px;
}

10
html/css/style_mobile.css Normal file
View File

@ -0,0 +1,10 @@
@import "style_common.css";
html, body {
font-size: 25;
}
button,select {
font-size: 27;
}

19
html/css/style_print.css Normal file
View File

@ -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;
}

57
html/data/api-full.php Normal file
View File

@ -0,0 +1,57 @@
<?php
require_once("../konfiguration.php");
$options=[];
$db = new PDO($dsn, MYSQL_BENUTZER, MYSQL_KENNWORT, $options);
function read($db, $requestParams){
$queryParams = [];
$queryText = "
select Schicht.SchichtID as id,
Schicht.Von as start_date,
Schicht.Bis as end_date,
concat(Dienst.Was, ' [',Dienst.Wo,'](', SchichtUebersicht.C,'/',SchichtUebersicht.Soll,')') as text,
group_concat(Helfer.Name separator '\\n' ) as Name,
group_concat(concat(Helfer.Name,'+',Helfer.Handy) separator '\\n' ) as Kontakt,
Dienst.Info,
CASE WHEN (SchichtUebersicht.Soll-SchichtUebersicht.C)<=0 THEN '#005d00'
WHEN SchichtUebersicht.C>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);
?>

55
html/data/api-helfer.php Normal file
View File

@ -0,0 +1,55 @@
<?php
require_once("../konfiguration.php");
$options=[];
SESSION_START();
$db = new PDO($dsn, MYSQL_BENUTZER, MYSQL_KENNWORT, $options);
if(!isset($_SESSION["HelferID"])){ exit ; }
$HelferID = $_SESSION["HelferID"];
function read_from_db($db, $requestParams,$HelferID){
$queryParams = [];
$queryText = "
select Schicht.SchichtID as id,
Schicht.Von as start_date,
Schicht.Bis as end_date,
concat(Dienst.Was, ' [',Dienst.Wo,'](', SchichtUebersicht.C,'/',SchichtUebersicht.Soll,')') as text,
group_concat(Helfer.Name separator '\\n' ) as Name,
group_concat(concat(Helfer.Name,'+',Helfer.Handy) separator '\\n' ) as Kontakt,
Dienst.Info,
CASE WHEN (SchichtUebersicht.Soll-SchichtUebersicht.C)<=0 THEN 'darkgreen'
WHEN SchichtUebersicht.C>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);
?>

163
html/index.php Normal file
View File

@ -0,0 +1,163 @@
<!doctype html>
<html lang=de>
<head>
<title>Helfer Drop am See Home</title>
<link rel="stylesheet" href="css/style_desktop.css" media="screen and (min-width:781px)"/>
<link rel="stylesheet" href="css/style_mobile.css" media="screen and (max-width:780px)"/>
<script src=js/helferdb.js></script>
<meta name="viewport" content="width=480" />
<meta charset="utf-8">
</head>
<body>
<?php
SESSION_START();
require_once ('konfiguration.php');
include 'SQL.php';
$db_link = mysqli_connect (
MYSQL_HOST,
MYSQL_BENUTZER,
MYSQL_KENNWORT,
MYSQL_DATENBANK
);
DatenbankAufDeutsch($db_link);
include '_login.php';
// wird von _login.php miterledigt
// TODO: hier wird HelferIsAdmin verwendet, woanders ist es AdminStatus
//$db_erg = Helferdaten($db_link,$HelferID);
//while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
//{
// $HelferName=$zeile['Name'];
// $HelferIsAdmin=$zeile['Admin'];
//}
?>
<div style="width: 100%;">
<table id="customers" >
<tr onclick="window.location.href='Info.php';">
<th><img src="Bilder/Info.jpeg" style="width:30px;height:30px;"> &nbsp; <b>Drop am See 2023</b></th>
</tr>
<tr onclick="window.location.href='Userdaten.php';">
<td > <img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;">
<b>
<?php
if($HelferIsAdmin)
{
echo "Admin ";
}
else
{
echo "Helfer ";
}
echo $HelferName;
?>
</b> </td>
</tr>
<tr onclick="window.location.href='MeineSchichten.php';">
<td>
<img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"> <b>Nächste Helferschichten:</b>
<ul style="display: block; list-style-type: none; margin-left: 20px;margin-top: 0px;margin-bottom: 0px">
<?php
//<li>Fr 08:00 Leitung Halle</li>
//<li>So 12:00 Abbau</li>
/// 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 "<li>". $zeile['Ab'] . " ". $zeile['Was'] . "</li>";
$iCount++;
}
?>
</ul>
</td>
</tr>
<!--
<tr onclick="window.location.href='Ereignisse.php';">
<td>
<img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"> <b>Nächste Ereignisse:</b>
<ul style="display: block; list-style-type: none; margin-left: 20px;margin-top: 0px;margin-bottom: 0px">
<li>Sa 20:00 Show im Milchwerk</li>
<li>So 15:00 Gaukelgames</li>
</ul>
</td>
</tr>
<tr onclick="window.location.href='Workshop.php';">
<td>
<img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"> <b>Nächste Workshops:</b>
<ul style="display: block; list-style-type: none; margin-left: 20px;margin-top: 0px;margin-bottom: 0px">
<li>Sa 14:00 8 Bälle für Anfänger</li>
<li>Sa 15:00 Devilstick Hubschrauber beidseitig</li>
</ul>
</td>
</tr>
<tr onclick="window.location.href='Wichtig.php';">
<td>
<img src="Bilder/PfeilRunter.jpeg" style="width:30px;height:30px;"> <b>Wichtig:</b>
<ul style="display: block; list-style-type: none; margin-left: 20px;margin-top: 0px;margin-bottom: 0px">
<li>Warnung vor Sturm ab 21 Uhr</li>
</ul>
</td>
</tr>
-->
<tr onclick="window.location.href='AlleSchichten.php';">
<td><img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"><b>Schicht Hinzufügen</b></td>
</tr>
<tr onclick="window.location.href='Kalender.php';">
<td><img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"><b> Kalenderansicht</b></td>
</tr>
<tr onclick="window.location.href='ReadLog.php';">
<td><img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"><b> Logs</b></td>
</tr>
<?php
if ($HelferIsAdmin)
{
?>
<tr onclick="window.location.href='Admin.php';">
<td><img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"><b> Admin</b></td>
</tr>
<?php
}
?>
</tr>
<tr onclick="window.location.href='index.php?logout=1';">
<td><img src="Bilder/PfeilRechts2.jpeg" style="width:30px;height:30px;"><b> Logout</b></td>
</tr>
</table>
</body>
</html>

46
html/js/helferdb.js Normal file
View File

@ -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() {});
}

52
html/konfiguration.php Normal file
View File

@ -0,0 +1,52 @@
<?php
// datenbank-defines extern
require_once('/etc/helferdb_konfiguration.php');
// die folgenden Zeilen ohne Kommentarzeichen nach /etc/helferdb_konfiguration.php
// kopieren und an die eigene Datenbank anpassen
#define( 'MYSQL_HOST', 'localhost' );
#define( 'MYSQL_BENUTZER', 'benutzername_der_datenbank' );
#define( 'MYSQL_KENNWORT', 'passwort_des_db_nutzers' );
#define( 'MYSQL_DATENBANK', 'name_der_datenbank' );
#define( 'LOGFILE', "/pfad/zu/einer/www-schreibbaren/datei");
#define( VERANSTALTUNGSNAME, "dubbelcon");
#define( INFORMATIONS_URL, "http://drop-am-see.de/Gelaende");
date_default_timezone_set('Europe/Berlin');
setlocale(LC_TIME, "de_DE.UTF-8");
$start_date = new DateTimeImmutable("2023-05-18");
define ('TAGE_DAUER', 4);
// Geheimer Schlüssel für die Verschlüsselung von Tokens
// das ist das Passwort, mit dem sich aus den Tokens auch wieder der Username/Email extrahieren lässt
# $secret_key = "irgendwasZufaelliges";
// Geheimes Wort, das an die Email angehaengt wird, um zu ueberpruefen, dass die Addresse nicht abgeschnitten ist
// das Wort darf kein "|" enthalten, das wird als Trenner verwendet
# $secret_verification = "irgendwasanderes,istegalwas";
// urlprefix: https Addresse des php Scripts, das die Tokens empfaengt und einen Account anlegt
// volle URL, da sie u.a. per Email ersetzt wird
# $urlprefix="https://meinserver.de/2023dev/UrlLogin.php";
// muss nicht angepasst werden // no changes needed
// Zeitbereich: -1 davor, 0 kein Limit, 1-N Tag N der Con, 1000: nach der Con
$ZeitBereichWerte=range(-1,TAGE_DAUER);
array_push($ZeitBereichWerte,1000);
define('ZEITBEREICHWERTE', $ZeitBereichWerte);
$TageNamenDeutsch=array("So","Mo","Di","Mi","Do","Fr","Sa");
//Kalender-Konfiguration
$dsn = "mysql:host=localhost;dbname=".MYSQL_DATENBANK; # dsn fuer Kalender
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
);
?>