1041 lines
38 KiB
PHP
1041 lines
38 KiB
PHP
<?php
|
|
|
|
require_once 'konfiguration.php';
|
|
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
|
|
|
|
function ConnectDB()
|
|
{
|
|
$db_link = mysqli_connect(
|
|
MYSQL_HOST,
|
|
MYSQL_BENUTZER,
|
|
MYSQL_KENNWORT,
|
|
MYSQL_DATENBANK
|
|
);
|
|
DatenbankAufDeutsch($db_link);
|
|
return $db_link;
|
|
}
|
|
function debug_sql($sql, $types, $params) {#stmtnoneed
|
|
$i = 0;
|
|
$parts = explode('?', $sql);
|
|
$reconstructed = '';
|
|
foreach ($parts as $part) {
|
|
$reconstructed .= $part;
|
|
if ($i < strlen($types)) {
|
|
$val = $params[$i];
|
|
$type = $types[$i];
|
|
if ($type === 's') {
|
|
$reconstructed .= "'" . addslashes($val) . "'";
|
|
} else {
|
|
$reconstructed .= $val;
|
|
}
|
|
$i++;
|
|
}
|
|
}
|
|
return str_replace(["\n", "\r"], ' ', $reconstructed);
|
|
}
|
|
|
|
function stmt_prepare_and_execute($db_link, $sql, $types = "", ...$params) {#stmt-func
|
|
try {
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if ($types !== "") {
|
|
mysqli_stmt_bind_param($stmt, $types, ...$params);
|
|
}
|
|
if (!mysqli_stmt_execute($stmt)) {
|
|
$err = "Execute failed: " . mysqli_stmt_error($stmt) . "\nSQL: $sql";
|
|
$err .= debug_sql($sql, $types, $params);
|
|
error_log($err);
|
|
echo nl2br($err);
|
|
return false;
|
|
}
|
|
} catch (mysqli_sql_exception $e) {
|
|
$err = "MySQLi Error: " . $e->getMessage() . "\n";
|
|
$err .= debug_sql($sql, $types, $params);
|
|
error_log($err);
|
|
echo nl2br($err); // Optional: für saubere HTML-Darstellung
|
|
return false;
|
|
}
|
|
return $stmt;
|
|
}
|
|
|
|
|
|
|
|
function CreateHelfer($db_link, $HelferName, $HelferEmail, $HelferHandy, $HelferPasswort, $HelferLevel = 1) #stmt
|
|
{
|
|
|
|
$HelferPasswort = "€" . $HelferPasswort . "ß";
|
|
$PasswortHash = password_hash($HelferPasswort, PASSWORD_DEFAULT);
|
|
|
|
// Prepared Statement erstellen
|
|
$sql = "INSERT INTO Helfer (Name, Email, Handy, Status, BildFile, DoReport, Passwort, HelferLevel)
|
|
VALUES (?, ?, ?, 1, '', 0, ?, ?)";
|
|
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ssssi", $HelferName, $HelferEmail, $HelferHandy, $PasswortHash, $HelferLevel);
|
|
if (!$stmt) { error_log("Fehler in CreateHelfer, kein stmt"); return null; }
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
if ($result !== 1) { error_log("CreateHelfer: Unerwartete Anzahl betroffener Zeilen ($result)"); }
|
|
error_log(date('Y-m-d H:i') . " CreateHelfer: $HelferName angelegt mit Email $HelferEmail Handy $HelferHandy ($result)\n", 3, LOGFILE);
|
|
return $result ?: null;
|
|
}
|
|
|
|
|
|
// Testet fuer urllogin, ob Helfer bereits existiert
|
|
function HelferIstVorhanden($db_link, $Email)#stmt
|
|
{
|
|
$sql = "SELECT COUNT(HelferID) AS Anzahl FROM Helfer WHERE Email = ?";
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if (!$stmt) {
|
|
error_log("Fehler beim Vorbereiten des Statements: " . mysqli_error($db_link));
|
|
return false;
|
|
}
|
|
mysqli_stmt_bind_param($stmt, "s", $Email);
|
|
mysqli_stmt_execute($stmt);
|
|
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
|
mysqli_stmt_close($stmt);
|
|
return $zeile['Anzahl'] ?? 0;
|
|
}
|
|
|
|
|
|
//TODO: pruefen, ob Helfer bereits eingeloggt
|
|
function HelferLogin($db_link, $HelferEmail, $HelferPasswort, $HelferStatus)#stmt
|
|
{
|
|
$sql = "SELECT HelferID, Admin, Name, Passwort, HelferLevel FROM Helfer WHERE Email = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "s", $HelferEmail);
|
|
if (!$stmt) { error_log("Fehler in HelferLogin, kein stmt"); die('Login ungültige Abfrage');}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
|
|
while ($zeile = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
|
|
$HelferPasswort = "€" . $HelferPasswort . "ß";
|
|
|
|
if (password_verify($HelferPasswort, $zeile['Passwort'])) {
|
|
$_SESSION["HelferID"] = $zeile['HelferID'];
|
|
$_SESSION["HelferName"] = $zeile['Name'];
|
|
$_SESSION["HelferEmail"] = $HelferEmail;
|
|
$_SESSION["AdminStatus"] = $zeile['Admin'];
|
|
if( $_SESSION["AdminStatus"] == 1) {
|
|
$_SESSION["AdminID"] = $zeile['HelferID'];
|
|
}
|
|
$_SESSION["HelferLevel"] = $zeile['HelferLevel'];
|
|
|
|
mysqli_stmt_close($stmt);
|
|
return 1;
|
|
} else {
|
|
echo "Falsches Passwort<br>";
|
|
mysqli_stmt_close($stmt);
|
|
return 0;
|
|
}
|
|
}
|
|
mysqli_stmt_close($stmt);
|
|
return 0;
|
|
}
|
|
|
|
|
|
// Liste der Helfer fuer Admin-Seite
|
|
//TODO: HelferLevel
|
|
|
|
function HelferListe($db_link)#stmt
|
|
{
|
|
$sql = "SELECT HelferID, Name FROM Helfer";
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if (!$stmt) {
|
|
echo "Helferliste ungültige Abfrage";
|
|
die('Ungültige Abfrage: ' . mysqli_error($db_link));
|
|
}
|
|
mysqli_stmt_execute($stmt);
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
return $result;
|
|
}
|
|
|
|
|
|
function Helferdaten($db_link, $HelferID)#stmt
|
|
{
|
|
|
|
$sql = "SELECT * FROM Helfer Where HelferID = ?";
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if (!$stmt) {
|
|
echo "Helferdaten: Fehler beim Vorbereiten des Statements<br>\n";
|
|
die('Prepare failed: ' . mysqli_error($db_link));
|
|
}
|
|
mysqli_stmt_bind_param($stmt, "i", $HelferID);
|
|
if (!mysqli_stmt_execute($stmt)) {
|
|
echo "Helferdaten: Fehler bei der Ausführung<br>\n";
|
|
die('Execution failed: ' . mysqli_stmt_error($stmt));
|
|
}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
return $result;
|
|
}
|
|
|
|
|
|
|
|
function HelferdatenAendern($db_link, $HelferName, $HelferEmail, $HelferHandy, $HelferNewPasswort, $HelferID, $HelferLevel = -1, $HelferIsAdmin = -1, $AdminID = 0)#stmt
|
|
{
|
|
$result = false;
|
|
if ($HelferLevel == -1) { $HelferLevel = $_SESSION["HelferLevel"]; }
|
|
if ($HelferNewPasswort == "") {
|
|
if ($HelferIsAdmin == -1) {
|
|
$sql = "UPDATE Helfer SET Name = ?, Email = ?, Handy = ?, HelferLevel = ? WHERE HelferId = ?";
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if (!$stmt) {
|
|
die("Prepare failed: " . mysqli_error($db_link));
|
|
}
|
|
mysqli_stmt_bind_param($stmt, "ssssi", $HelferName, $HelferEmail, $HelferHandy, $HelferLevel, $HelferID);
|
|
} else {
|
|
$sql = "UPDATE Helfer SET Name = ?, Email = ?, Handy = ?, Admin = ?, HelferLevel = ? WHERE HelferId = ?";
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if (!$stmt) {
|
|
die("Prepare failed: " . mysqli_error($db_link));
|
|
}
|
|
mysqli_stmt_bind_param($stmt, "ssssii", $HelferName, $HelferEmail, $HelferHandy, $HelferIsAdmin, $HelferLevel, $HelferID);
|
|
}
|
|
|
|
if (!mysqli_stmt_execute($stmt)) {
|
|
die("Execute failed: " . mysqli_stmt_error($stmt));
|
|
}
|
|
|
|
$result = true;
|
|
echo "<li>Helferdaten geändert</li>";
|
|
|
|
$log_prefix = ($AdminID != 0) ? "(Admin $AdminID) " : "";
|
|
error_log(date('Y-m-d H:i') . " {$log_prefix}Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy HelferLevel: $HelferLevel Admin: $HelferIsAdmin\n", 3, LOGFILE);
|
|
|
|
mysqli_stmt_close($stmt);
|
|
} else {
|
|
$HelferNewPasswort = "€" . $HelferNewPasswort . "ß";
|
|
$PasswortHash = password_hash($HelferNewPasswort, PASSWORD_DEFAULT);
|
|
|
|
if ($HelferIsAdmin == -1) {
|
|
$sql = "UPDATE Helfer SET Name = ?, Email = ?, Handy = ?, HelferLevel = ?, Passwort = ? WHERE HelferId = ?";
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if (!$stmt) {
|
|
die("Prepare failed: " . mysqli_error($db_link));
|
|
}
|
|
mysqli_stmt_bind_param($stmt, "sssssi", $HelferName, $HelferEmail, $HelferHandy, $HelferLevel, $PasswortHash, $HelferID);
|
|
} else {
|
|
$sql = "UPDATE Helfer SET Name = ?, Email = ?, Handy = ?, HelferLevel = ?, Passwort = ?, Admin = ? WHERE HelferId = ?";
|
|
$stmt = mysqli_prepare($db_link, $sql);
|
|
if (!$stmt) { die("Prepare failed: " . mysqli_error($db_link)); }
|
|
mysqli_stmt_bind_param($stmt, "ssssssi", $HelferName, $HelferEmail, $HelferHandy, $HelferLevel, $PasswortHash, $HelferIsAdmin, $HelferID);
|
|
}
|
|
|
|
if (!mysqli_stmt_execute($stmt)) { die("HelferdatenAendern failed: " . mysqli_stmt_error($stmt)); }
|
|
|
|
$result = true;
|
|
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 HelferLevel: $HelferLevel 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 HelferLevel: $HelferLevel Passwort: neu gesetzt\n", 3, LOGFILE);
|
|
}
|
|
$log_prefix = ($AdminID != 0) ? "(Admin $AdminID) " : "";
|
|
error_log(date('Y-m-d H:i') . " {$log_prefix}Helferdaten update: Name: $HelferName (HelferID:$HelferID) Email: $HelferEmail Handy: $HelferHandy HelferLevel: $HelferLevel Passwort: neu gesetzt\n", 3, LOGFILE);
|
|
|
|
mysqli_stmt_close($stmt);
|
|
}
|
|
$_SESSION["HelferName"] = $HelferName;
|
|
$_SESSION["HelferEmail"] = $HelferEmail;
|
|
|
|
return $result;
|
|
}
|
|
|
|
function AlleSchichten($db_link, $Sort, $HelferLevel = 1)#stmt
|
|
{
|
|
$sql = "SELECT SchichtID,Was,DATE_FORMAT(Von,'%a %H:%i') AS Ab,";
|
|
$sql .= "DATE_FORMAT(Bis,'%a %H:%i') AS Bis,C AS Ist,DATE_FORMAT(Von,'%W %d %M') AS Tag,Soll ";
|
|
$sql .= "FROM Dienst,SchichtUebersicht WHERE Dienst.DienstID=SchichtUebersicht.DienstID AND Dienst.Helferlevel=? ";
|
|
$sql .= ($Sort == '1')
|
|
? " ORDER BY Von"
|
|
: " ORDER BY Was,Von";
|
|
|
|
$stmt = mysqli_prepare($db_link,$sql);
|
|
if (!$stmt) { die("Alleschichten prepare failed " . mysqli_error($db_link)); }
|
|
|
|
mysqli_stmt_bind_param($stmt, "i", $HelferLevel);
|
|
if(!mysqli_stmt_execute($stmt)){die ( "AlleSchichten fehlgeschlagen. sort: $Sort err: " . mysqli_stmt_error($stmt));}
|
|
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function AlleSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
|
{
|
|
$sql = "SELECT SUM(Soll) AS Anzahl FROM SchichtUebersicht
|
|
JOIN Dienst ON SchichtUebersicht.DienstID = Dienst.DienstID WHERE 1=1";
|
|
$params = [];
|
|
$types = "";
|
|
|
|
if ($HelferLevel != -1) {
|
|
$sql .= " AND HelferLevel = ?";
|
|
$params[] = $HelferLevel;
|
|
$types .= "i";
|
|
}
|
|
|
|
if ($DienstID != -1) {
|
|
$sql .= " AND Dienst.DienstID = ?";
|
|
$params[] = $DienstID;
|
|
$types .= "i";
|
|
}
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, $types, ...$params);
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
|
return $zeile['Anzahl'] ?? 0;
|
|
}
|
|
|
|
|
|
function AlleBelegteSchichtenCount($db_link, $HelferLevel = -1, $DienstID = -1)#stmt
|
|
{
|
|
$sql = "SELECT COUNT(HelferID) AS Anzahl
|
|
FROM EinzelSchicht
|
|
JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
|
JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
|
WHERE 1=1";
|
|
|
|
$params = [];
|
|
$types = '';
|
|
|
|
if ($HelferLevel != -1) {
|
|
$sql .= " AND HelferLevel = ?";
|
|
$params[] = $HelferLevel;
|
|
$types .= 'i';
|
|
}
|
|
|
|
if ($DienstID != -1) {
|
|
$sql .= " AND Dienst.DienstID = ?";
|
|
$params[] = $DienstID;
|
|
$types .= 'i';
|
|
}
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, $types, ...$params);
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
|
|
|
return $zeile['Anzahl'];
|
|
}
|
|
|
|
function AlleBelegteSchichtenCountMitSurplus($db_link, $HelferLevel = -1, $DienstID = -1) {
|
|
$sql = "SELECT
|
|
SUM(LEAST(Soll, Belegt)) AS Besetzt,
|
|
SUM(GREATEST(0, Belegt - Soll)) AS Ueberbelegt
|
|
FROM (
|
|
SELECT
|
|
Schicht.SchichtID,
|
|
COUNT(EinzelSchicht.HelferID) AS Belegt,
|
|
Schicht.Soll
|
|
FROM Schicht
|
|
LEFT JOIN EinzelSchicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
|
JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
|
WHERE 1=1";
|
|
|
|
$params = [];
|
|
$types = "";
|
|
|
|
if ($HelferLevel != -1) {
|
|
$sql .= " AND Dienst.HelferLevel = ?";
|
|
$params[] = $HelferLevel;
|
|
$types .= "i";
|
|
}
|
|
|
|
if ($DienstID != -1) {
|
|
$sql .= " AND Dienst.DienstID = ?";
|
|
$params[] = $DienstID;
|
|
$types .= "i";
|
|
}
|
|
|
|
$sql .= " GROUP BY Schicht.SchichtID, Schicht.Soll
|
|
) AS Belegung";
|
|
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, $types, ...$params);
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
|
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
|
return [
|
|
'besetzt' => (int)($zeile['Besetzt'] ?? 0),
|
|
'ueberbelegt' => (int)($zeile['Ueberbelegt'] ?? 0)
|
|
];
|
|
}
|
|
|
|
|
|
function AlleSchichtenImZeitbereich($db_link, $Von, $Bis, $HelferLevel = -1)#stmt
|
|
{
|
|
//debug only error_log("AlleSchichtenImZeitbereich Abfrage: $Von, $Bis, $HelferLevel");
|
|
// SchichtID, Was, Ab, Bis, Ist, Tag, Soll - Ist und Soll sind die HelferStunden
|
|
# bei -1 nicht in Suche einschliessen
|
|
$sql_helferlevel = ($HelferLevel == -1)
|
|
? ""
|
|
: "and Dienst.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,
|
|
Dienst.DienstID
|
|
FROM Dienst,SchichtUebersicht
|
|
WHERE Von >= ? and Von < ? and Dienst.DienstID=SchichtUebersicht.DienstID $sql_helferlevel
|
|
ORDER BY Was,Von";
|
|
if ($HelferLevel == -1)
|
|
{
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ss", $Von, $Bis);
|
|
$debugmsg = debug_sql($sql, "ss", [$Von, $Bis]);
|
|
} else {
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ssi", $Von, $Bis, $HelferLevel);
|
|
$debugmsg = debug_sql($sql, "ssi", [$Von, $Bis, $HelferLevel]);
|
|
}
|
|
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
if(!$result){error_log("AlleSchichtenImZeitBereich Fehler");error_log("AlleSchichtenImZeitbereich $debugmsg");}
|
|
return $result ?: null;
|
|
}
|
|
|
|
|
|
function AlleSchichtenEinesHelfers($db_link, $HelferID)#stmt
|
|
{
|
|
|
|
$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=?
|
|
ORDER BY Von";
|
|
$stmt = mysqli_prepare($db_link,$sql);
|
|
if(!$stmt) { die("AlleSchichtenEinesHelfers prepare failed " . mysqli_error($db_link));}
|
|
mysqli_stmt_bind_param($stmt, "i", $HelferID);
|
|
if(!mysqli_stmt_execute($stmt)){
|
|
die("AlleSchichtenEinesHelfers execute failed HelferId $HelferID" . mysqli_stmt_error($stmt));
|
|
}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function HelferLoeschen($db_link, $HelferID, $AdminID)#stmt
|
|
{
|
|
$result = Helferdaten($db_link, $HelferID);
|
|
$HelferName = "(unbekannt)";
|
|
while ($zeile = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
|
|
$HelferName = $zeile['Name'];
|
|
}
|
|
|
|
$result = AlleSchichtenEinesHelfers($db_link, $HelferID);
|
|
$AnzahlHelferschichten = mysqli_num_rows($result);
|
|
if ($AnzahlHelferschichten > 0) {
|
|
echo "Helfer $HelferName hat noch $AnzahlHelferschichten Schichten. Bitte erst die Schichten löschen<br>";
|
|
return -1;
|
|
}
|
|
|
|
$stmt = mysqli_prepare($db_link, "DELETE FROM Helfer WHERE HelferID = ?");
|
|
if (!$stmt) {
|
|
echo "Helfer $HelferName konnte nicht gelöscht werden<br>";
|
|
die("HelferLoeschen prepare failed: " . mysqli_error($db_link));
|
|
}
|
|
|
|
mysqli_stmt_bind_param($stmt, "i", $HelferID);
|
|
if (!mysqli_stmt_execute($stmt)) {
|
|
echo "Helfer $HelferName konnte nicht gelöscht werden<br>";
|
|
die("HelferLoeschen execute failed: " . mysqli_stmt_error($stmt));
|
|
}
|
|
|
|
echo "Helfer $HelferName (HelferID:$HelferID) wurde erfolgreich gelöscht<br>";
|
|
error_log(date('Y-m-d H:i') . "(Admin $AdminID) Helfer gelöscht: Name: $HelferName (HelferID:$HelferID)\n", 3, LOGFILE);
|
|
|
|
return 1;
|
|
}
|
|
|
|
function SchichtIdArrayEinesHelfers($db_link, $HelferID)#stmt
|
|
{
|
|
|
|
// Array, um Zeilen mit von mir belegten Schichten in der Schichtuebersicht einfaerben zu koennenn
|
|
$stmt = mysqli_prepare($db_link, "SELECT SchichtID FROM EinzelSchicht WHERE HelferID = ?");
|
|
if (!$stmt) {
|
|
$err = "Fehler in SchichtIdArrayEinesHelfers " . mysqli_error($db_link);
|
|
error_log($err);
|
|
echo $err;
|
|
die($err);
|
|
}
|
|
mysqli_stmt_bind_param($stmt, "i", $HelferID);
|
|
if (!mysqli_stmt_execute($stmt)) {
|
|
echo "HelferID $HelferID konnte nicht gefunden werden<br>";
|
|
$err = "SchichtIdArrayEinesHelfers execute failed: " . mysqli_stmt_error($stmt);
|
|
error_log($err);
|
|
echo $err;
|
|
die("SchichtIdArrayEinesHelfers execute failed: " . mysqli_stmt_error($stmt));
|
|
}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
$schichtIDs = array();
|
|
while ($zeile = mysqli_fetch_array($result, MYSQLI_NUM)) {
|
|
$schichtIDs[] = $zeile[0];
|
|
}
|
|
mysqli_stmt_close($stmt);
|
|
return($schichtIDs);
|
|
}
|
|
|
|
function AlleSchichtenEinesHelfersVonJetzt($db_link, $HelferID) #stmt2
|
|
{
|
|
$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 = ?
|
|
AND Bis > ?
|
|
ORDER BY Von";
|
|
|
|
$jetzt = date("Y-m-d H:i:s");
|
|
// is : HelferID -> integer Zeitstempel -> String
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "is", $HelferID, $jetzt);
|
|
if (!$stmt) {
|
|
error_log("AlleSchichtenEinesHelfersVonJetzt: Fehler beim Prepare/Execute.");
|
|
return null;
|
|
}
|
|
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
return $result ?: null;
|
|
}
|
|
|
|
#
|
|
function SchichtenSummeEinesHelfers($db_link, $HelferID) #stmt
|
|
{
|
|
$sql = "
|
|
SELECT
|
|
COUNT(*) AS Anzahl,
|
|
SUM(TIME_TO_SEC(Schicht.Dauer)) AS Dauer
|
|
FROM EinzelSchicht
|
|
JOIN Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
|
JOIN Dienst ON Schicht.DienstID = Dienst.DienstID
|
|
WHERE HelferID = ?
|
|
";
|
|
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $HelferID);
|
|
if (!$stmt) {
|
|
error_log("Fehler in SchichtenSummeEinesHelfers");
|
|
return false;
|
|
}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
return $result;
|
|
}
|
|
|
|
|
|
|
|
function LogSchichtEingabe($db_link, $HelferID, $SchichtID, $EinzelSchichtID, $Aktion, $AdminID = 0) #stmt2
|
|
{
|
|
|
|
$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 = ?
|
|
AND ( Schicht.SchichtID = ? OR EinzelSchicht.EinzelSchichtID = ?)
|
|
";
|
|
$types = "iii";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, $types, $HelferID,$SchichtID,$EinzelSchichtID);
|
|
if (!$stmt) {error_log("Fehler in LogSchichtEingabe");}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
$num_rows = mysqli_num_rows($result);
|
|
|
|
if ($num_rows> 1) {
|
|
echo "LogSchichtEingabe: 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);
|
|
//error_log(date('Y-m-d H:i') . "sql query: XXX $sql XXX sql query end");
|
|
//error_log(date('Y-m-d H:i') . print_r(mysqli_fetch_assoc($result),true));
|
|
# wir lassen mehrfachauswahl des selben Dienstes zu, deshalb hier die Daten und Logging auskommentiert, denn das wird zum ok-Fall
|
|
} elseif ($num_rows == 1) {
|
|
//Regelfall ist $num_rows == 1, keine Ausgabe
|
|
} else {
|
|
echo "Es wurde keine Zeile zurueckgegeben.";
|
|
error_log("LogSchichtEingabe: keine Zeile aus Abfrage erhalten");
|
|
$err = debug_sql($sql, $types, [$HelferID,$SchichtID,$EinzelSchichtID]);
|
|
error_log($err);
|
|
error_log($result);
|
|
}
|
|
|
|
$row = mysqli_fetch_assoc($result);
|
|
$Von = $row["Von"] ?? "-";
|
|
$Bis = $row["Bis"] ?? "-";
|
|
$Was = $row["Was"] ?? "-";
|
|
$HelferName = $row["Name"] ?? "-";
|
|
if( $Von === "-" and $Bis === "-" ){
|
|
error_log("Leere Zeiten werden geloggt. Parameter logging-Aufruf (HelferID:$HelferID): $HelferID, $SchichtID, $EinzelSchichtID, $Aktion, $AdminID");
|
|
}
|
|
|
|
$logline = date('Y-m-d H:i') . " HelferSchicht: ";
|
|
|
|
if ($AdminID == 0) {
|
|
$logline .= "$HelferName (HelferID:$HelferID) hat Dienst $Was von $Von bis $Bis $Aktion.";
|
|
} else {
|
|
$logline .= "Admin:$AdminID hat von $HelferName (HelferID:$HelferID) den Dienst $Was von $Von bis $Bis $Aktion.";
|
|
}
|
|
error_log($logline . "\n", 3, LOGFILE);
|
|
}
|
|
|
|
function HelferSchichtZuweisen($db_link, $HelferID, $SchichtID, $AdminID = 0)#stmt2
|
|
{
|
|
// Abfrage, ob bereits eine Einzelschicht in der selben Schicht vom Helfer existiert
|
|
$sql = "SELECT EinzelSchichtID from EinzelSchicht WHERE SchichtID=? and HelferID=?";
|
|
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ii", $SchichtID, $HelferID);
|
|
if (!$stmt) {error_log("Fehler in HelferSchichtZuweisen Schichtabfrage");}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
|
|
if (mysqli_num_rows($result) > 0) {
|
|
echo "HelferSchichtZuweisen: Schicht existiert bereits!";
|
|
// abgeschaltet, damit Mehrfacheintraege fuer Familien moeglich sind
|
|
//return false;
|
|
}
|
|
|
|
// Helfer Schicht zuweisen
|
|
$sql = "INSERT INTO EinzelSchicht(SchichtID,HelferID) VALUES (?,?)";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ii", $SchichtID, $HelferID);
|
|
LogSchichtEingabe($db_link, $HelferID, $SchichtID, -1, "eingetragen", $AdminID);
|
|
|
|
return true;
|
|
}
|
|
|
|
function HelferVonSchichtLoeschen($db_link, $HelferID, $EinzelSchichtID, $AdminID = 0)#stmt2
|
|
{
|
|
// 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 = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $EinzelSchichtID);
|
|
if (!$stmt) {error_log("Fehler in HelferVonSchichtLoeschen"); return false;}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function HelferVonSchichtLoeschen_SchichtID($db_link, $HelferID, $SchichtID, $AdminID = 0)#stmt2
|
|
{
|
|
// 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 = ? AND HelferID = ? limit 1;";
|
|
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ii", $SchichtID,$HelferID);
|
|
if (!$stmt) {error_log("Fehler in HelferVonSchichtLoeschen_SchichtID"); return false;}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function DetailSchicht($db_link, $InfoSchichtID)#stmt2
|
|
{
|
|
$sql = "SELECT Was,Wo,Info,Name,Handy,Email,DATE_FORMAT(Dauer,'%H:%i') AS Dauer
|
|
FROM Dienst
|
|
JOIN Schicht ON Dienst.DienstID = Schicht.DienstID
|
|
LEFT JOIN Helfer ON Helfer.HelferID = Dienst.Leiter
|
|
WHERE SchichtID = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $InfoSchichtID);
|
|
if (!$stmt) {error_log("Fehler in DetailSchicht"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
if (!$result) {error_log("Kein Resultat in DetailSchicht"); return false;}
|
|
|
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
|
return $zeile;
|
|
}
|
|
|
|
|
|
function BeteiligteHelfer($db_link, $InfoSchichtID)#stmt2
|
|
{
|
|
$sql = "SELECT Helfer.HelferID, Name, Handy
|
|
FROM EinzelSchicht, Helfer
|
|
WHERE EinzelSchicht.HelferID = Helfer.HelferID
|
|
AND SchichtID=?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $InfoSchichtID);
|
|
if (!$stmt) {error_log("Fehler in BeteiligteHelfer"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
// Kein Fehler wenn leeres Resultat
|
|
return $result;
|
|
}
|
|
|
|
|
|
function GetDienste($db_link)
|
|
{
|
|
$sql = "SELECT DienstID, Was, Wo, Info, Leiter, ElternDienstID, HelferLevel FROM Dienst order By Was";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql);
|
|
if (!$stmt) {error_log("Fehler in GetDienste"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
if (!$result) {error_log("Keine Dienste gefunden"); return false;}
|
|
return $result;
|
|
}
|
|
|
|
function GetDiensteChilds($db_link, $DienstID)#stmt2
|
|
{
|
|
$sql = "SELECT DienstID, Was, Wo, Info, Leiter FROM Dienst where ElternDienstID=? ORDER BY Was";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $DienstID);
|
|
if (!$stmt) {error_log("Fehler in GetDiensteChilds"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
return $result;
|
|
}
|
|
|
|
|
|
function ChangeDienst($db_link, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel)#stmt2
|
|
{
|
|
$sql = "UPDATE Dienst SET Was=?, Wo=?, Info=?, Leiter=?, ElternDienstID=?, HelferLevel=? where DienstID=?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "sssiiii",$Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel, $DienstID);
|
|
if (!$stmt) {error_log("Fehler in ChangeDienst"); return false;}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function NewDienst($db_link, $DienstID, $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel)#stmt2
|
|
{
|
|
|
|
// $DienstID
|
|
// $Was //Name des Dienstes
|
|
// $Wo //Ort
|
|
// $Info //vollstaendige Beschreibung
|
|
// $Leiter // int HelferID des Leiters
|
|
// $Gruppe // ??
|
|
// $HelferLevel // int (1,2) Teilnehmer oder Dauerhelfer
|
|
|
|
$sql = "INSERT INTO Dienst (Was, Wo, Info, Leiter, ElternDienstID, HelferLevel) VALUES (?, ?, ?, ?, ?, ?)";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "sssiii", $Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel);
|
|
|
|
$HelferName = $_SESSION["HelferName"] ?? "unbekannt";
|
|
$HelferID = $_SESSION["HelferID"] ?? 0;
|
|
|
|
if (!$stmt) {
|
|
$err = mysqli_error($db_link);
|
|
echo "Fehler NewDienst: $err";
|
|
$full_sql = debug_sql($sql, "sssiii", [$Was, $Wo, $Info, $Leiter, $Gruppe, $HelferLevel]);
|
|
error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName (ID:$HelferID) konnte Schicht nicht anlegen mit Anfrage $full_sql Grund: $err\n", 3, LOGFILE);
|
|
die();
|
|
} else {
|
|
error_log(date('Y-m-d H:i') . " NeueSchicht: $HelferName (HelferID:$HelferID) hat Dienst angelegt mit Was: $Was Wo: $Wo Info: $Info Leiter: $Leiter Gruppe: $Gruppe HelferLevel: $HelferLevel\n", 3, LOGFILE);
|
|
}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function DeleteDienst($db_link, $DienstID, $Rekursiv)#stmt2
|
|
{
|
|
if ($Rekursiv) {
|
|
//TODO
|
|
return false;
|
|
} else {
|
|
// Pruefen ob noch Schichten eingetragen sind
|
|
$sql = "SELECT SchichtID FROM Schicht where DienstID=?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $DienstID);
|
|
if (!$stmt) {error_log("Fehler in DeleteDienst select"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
|
|
if (mysqli_num_rows($result) == 0) {
|
|
// Eintrag löschen
|
|
$sql = "DELETE FROM Dienst where DienstID=?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $DienstID);
|
|
if (!$stmt) {error_log("Fehler in DeleteDienst delete"); return false;}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
function GetDiensteForDay($db_link, $HelferLevel, $datestring)#stmt2
|
|
{
|
|
// TeilnehmerSchichtenAusdruck2
|
|
$unixtime = strtotime($datestring);
|
|
$date1 = date('Y-m-d', $unixtime + 24 * 60 * 60);
|
|
$date2 = date('Y-m-d', $unixtime);
|
|
$sql = "
|
|
SELECT DienstId, Was, Wo, Info,
|
|
MIN(Von) AS MinVon, MAX(Bis) AS MaxBis
|
|
FROM Dienst
|
|
INNER JOIN Schicht
|
|
USING (DienstID)
|
|
WHERE HelferLevel=?
|
|
GROUP BY DienstID
|
|
HAVING MinVon<?
|
|
AND MaxBis>?
|
|
ORDER BY MIN(Von) ASC";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "iss", $HelferLevel, $date1, $date2);
|
|
if (!$stmt) {error_log("Fehler in GetDiensteForDay select"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function GetSchichtenForDienstForDay($db_link, $DienstID, $datestring)#stmt2
|
|
{
|
|
// TeilnehmerSchichtenAusdruck2
|
|
$unixtime = strtotime($datestring);
|
|
$date1 = date('Y-m-d', $unixtime + 24 * 60 * 60);
|
|
$date2 = date('Y-m-d', $unixtime);
|
|
$sql = "
|
|
SELECT Von, Bis, Soll, Name, Handy
|
|
FROM Schicht
|
|
LEFT JOIN EinzelSchicht
|
|
USING (SchichtID)
|
|
LEFT JOIN Helfer
|
|
USING (HelferID)
|
|
WHERE DienstID=?
|
|
AND Von<?
|
|
AND Bis>?
|
|
ORDER BY Von";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "iss", $DienstID, $date1, $date2);
|
|
if (!$stmt) {error_log("Fehler in GetSchichtenForDiensteForDay select"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
return $result;
|
|
}
|
|
|
|
|
|
function GetSchichtenEinesDienstes($db_link, $DienstID)#stmt2
|
|
{
|
|
$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, DATE_FORMAT(Dauer,'%H:%i')
|
|
AS Dauer FROM Schicht
|
|
WHERE DienstID=?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $DienstID);
|
|
if (!$stmt) {error_log("Fehler in GetSchichtenEinesDienstes"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function ChangeSchicht($db_link, $SchichtID, $Von, $Bis, $Soll, $Dauer)#stmt2
|
|
{
|
|
$sql = "
|
|
UPDATE Schicht
|
|
SET Von=?, Bis=?, Soll=?, Dauer=?
|
|
WHERE SchichtID=?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ssiii", $Von, $Bis, $Soll, $Dauer, $SchichtID);
|
|
if (!$stmt) {error_log("Fehler in ChangeSchicht"); return false;}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
return $result;
|
|
}
|
|
|
|
function NewSchicht($db_link, $DienstID, $Von, $Bis, $Soll, $Dauer, $HelferName) #stmt2
|
|
{
|
|
$sql = "INSERT INTO Schicht (DienstID, Von, Bis, Soll, Dauer) values (?,?,?,?,?)";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "issii", $DienstID, $Von, $Bis, $Soll, $Dauer);
|
|
if (!$stmt) {error_log("Fehler in NewSchicht"); return false;}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
if ($result != 1) {
|
|
echo "Keine Schicht erstellt";
|
|
$full_sql = debug_sql($sql, "issii", [ $DienstID, $Von, $Bis, $Soll, $Dauer ]);
|
|
$err = " NeueSchicht: $HelferName konnte Schicht nicht angelegt mit $full_sql \n";
|
|
error_log(date('Y-m-d H:i') . $err , 3, LOGFILE);
|
|
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)#stmt2
|
|
{
|
|
|
|
if ($Rekursiv) {
|
|
// TODO rekursives loeschen
|
|
return false;
|
|
} else {
|
|
// Pruefen ob noch Helfer auf der Schicht eingetragen sind
|
|
$sql = "SELECT Name FROM EinzelSchicht JOIN Helfer ON Helfer.HelferID = EinzelSchicht.HelferID WHERE SchichtID = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $SchichtID);
|
|
if (!$stmt) {error_log("Fehler in DeleteSchicht select"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
|
|
if (mysqli_num_rows($result) === 0) {
|
|
// Eintrag löschen
|
|
$sql = "DELETE FROM Schicht where SchichtID=?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $SchichtID);
|
|
if (!$stmt) {error_log("Fehler in DeleteSchicht select"); return false;}
|
|
$result = mysqli_stmt_affected_rows($stmt);
|
|
if ($result === 0) {
|
|
$err = "Fehler in DeleteSchicht nichts gelöscht";
|
|
error_log($err);
|
|
echo $err;
|
|
error_log(debug_sql($sql, "i", [$SchichtID]));
|
|
return false;
|
|
}
|
|
return true;
|
|
} else {
|
|
return false; // Es sind noch Helfer eingetragen
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function AlleHelferSchichtenUebersicht($db_link, $HelferLevel)
|
|
{
|
|
$sql = "
|
|
SELECT
|
|
Helfer.HelferID AS AliasHelferID, -- Alias für HelferID
|
|
Helfer.HelferLevel,
|
|
Name,
|
|
Email,
|
|
Handy,
|
|
Was,
|
|
COALESCE(SUM(Dauer)/10000, 0) AS Dauer
|
|
FROM
|
|
Helfer
|
|
LEFT JOIN
|
|
EinzelSchicht ON Helfer.HelferID = EinzelSchicht.HelferID
|
|
LEFT JOIN
|
|
Schicht ON EinzelSchicht.SchichtID = Schicht.SchichtID
|
|
LEFT JOIN
|
|
Dienst ON Schicht.DienstID = Dienst.DienstID
|
|
WHERE Helfer.HelferLevel = ?
|
|
GROUP BY
|
|
Helfer.HelferID,
|
|
Was";
|
|
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $HelferLevel);
|
|
if (!$stmt) {error_log("Fehler in AlleHelferSchichtenUebersicht select"); return false;}
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
mysqli_stmt_close($stmt);
|
|
return $result;
|
|
}
|
|
|
|
|
|
function DatenbankAufDeutsch($db_link)#stmt_brauchtnicht
|
|
{
|
|
$sql = "SET lc_time_names = 'de_DE'";
|
|
$result = mysqli_query($db_link, $sql);
|
|
|
|
if (! $result) {
|
|
echo "ungueltiges umstellen auf Deutsch";
|
|
die('Ungueltige Abfrage: ' . mysqli_error($db_link));
|
|
}
|
|
}
|
|
|
|
function LastInsertId($db_link)
|
|
{
|
|
$sql = "SELECT LAST_INSERT_ID()";
|
|
$result = mysqli_query($db_link, $sql);
|
|
|
|
if (! $result) {
|
|
echo "ungueltige Last InsertID";
|
|
die('Ungueltige Abfrage: ' . mysqli_error($db_link));
|
|
}
|
|
|
|
$zeile = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
|
return $zeile['LAST_INSERT_ID()'];
|
|
}
|
|
|
|
function HelferLevel($db_link)
|
|
{
|
|
$sql = "select HelferLevel, HelferLevelBeschreibung, linkcode from HelferLevel order by HelferLevel";
|
|
$result = mysqli_query($db_link, $sql);
|
|
if (! $result) {
|
|
echo "Konnte HelferLevel nicht abfragen";
|
|
die('Ungueltige Abfrage: ' . mysqli_error($db_link));
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function alleHelferLevel($db_link)
|
|
{
|
|
$alleHelferLevel = array();
|
|
$result = HelferLevel($db_link);
|
|
while ($zeile = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
|
|
$HelferLevel = $zeile['HelferLevel'];
|
|
$HelferLevelBeschreibung = $zeile['HelferLevelBeschreibung'];
|
|
$alleHelferLevel[$HelferLevel] = $HelferLevelBeschreibung;
|
|
};
|
|
return $alleHelferLevel;
|
|
}
|
|
|
|
|
|
function HelferLevelAusEinladung($db_link, string $linkcode): array|false {
|
|
$sql = "SELECT HelferLevel, HelferLevelBeschreibung FROM HelferLevel WHERE linkcode = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "s", $linkcode);
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
|
|
if (!$result || $result->num_rows === 0) {
|
|
return false;
|
|
}
|
|
|
|
return $result->fetch_assoc();
|
|
}
|
|
|
|
function AlleHelferLevelAlles($db_link)
|
|
{
|
|
$result = HelferLevel($db_link);
|
|
$alle = [];
|
|
while ($zeile = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
|
|
$level = $zeile['HelferLevel'];
|
|
$alle[$level] = [
|
|
'HelferLevelBeschreibung' => $zeile['HelferLevelBeschreibung'],
|
|
'linkcode' => $zeile['linkcode'],
|
|
];
|
|
}
|
|
return $alle;
|
|
}
|
|
|
|
function HelferLevelUpdate($db_link, int $level, string $beschreibung, string $linkcode): bool {
|
|
$sql = "UPDATE HelferLevel SET HelferLevelBeschreibung = ?, linkcode = ? WHERE HelferLevel = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ssi", $beschreibung, $linkcode, $level);
|
|
if (!$stmt) {
|
|
return false;
|
|
}
|
|
mysqli_stmt_close($stmt);
|
|
return true;
|
|
}
|
|
|
|
function HelferLevelInsert($db_link, string $beschreibung, string $linkcode): bool {
|
|
$sql = "INSERT INTO HelferLevel (HelferLevelBeschreibung, linkcode) VALUES (?, ?)";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "ss", $beschreibung, $linkcode);
|
|
return $stmt !== false;
|
|
}
|
|
|
|
function HelferLevelDelete($db_link, int $level): bool {
|
|
$sql = "DELETE FROM HelferLevel WHERE HelferLevel = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $level);
|
|
return $stmt !== false;
|
|
}
|
|
|
|
function AnzahlAccountsMitHelferLevel($db_link, int $level): int {
|
|
$sql = "SELECT COUNT(*) AS Anzahl FROM Helfer WHERE HelferLevel = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, "i", $level);
|
|
$result = mysqli_stmt_get_result($stmt);
|
|
if ($result && ($row = mysqli_fetch_assoc($result))) {
|
|
return (int)$row['Anzahl'];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function AnzahlDiensteMitHelferLevel($db_link, $level) {
|
|
$sql = "SELECT COUNT(*) FROM Dienst WHERE HelferLevel = ?";
|
|
$stmt = stmt_prepare_and_execute($db_link, $sql, 'i', $level);
|
|
$stmt->bind_result($anzahl);
|
|
$stmt->fetch();
|
|
return $anzahl;
|
|
}
|
|
|
|
|
|
|
|
// falls man sowohl nach HelferLevel, Beschreibung oder Invite Code filtern will
|
|
//function HelferLevelAbfrage($db_link, string $spalte, string $wert): array|false {
|
|
// // Nur bestimmte Spalten zulassen, um SQL-Injection zu verhindern
|
|
// $erlaubteSpalten = ['linkcode', 'HelferLevel', 'HelferLevelBeschreibung'];
|
|
// if (!in_array($spalte, $erlaubteSpalten, true)) {
|
|
// return false;
|
|
// }
|
|
//
|
|
// $sql = "SELECT HelferLevel, HelferLevelBeschreibung, linkcode FROM HelferLevel WHERE $spalte = ?";
|
|
// $result = stmt_prepare_and_execute($db_link, $sql, "s", $wert);
|
|
//
|
|
// if (!$result || $result->num_rows === 0) {
|
|
// return false;
|
|
// }
|
|
//
|
|
// return $result->fetch_assoc();
|
|
//}
|
|
|