diff --git a/html/Admin.php b/html/Admin.php index 24fecb3..cc93142 100644 --- a/html/Admin.php +++ b/html/Admin.php @@ -3,7 +3,12 @@ require_once 'konfiguration.php'; SESSION_START(); require 'SQL.php'; +require '_functions.php'; $db_link = ConnectDB(); +$pagename = "Admin-Funktionen"; // name of this page +$backlink = "index.php"; // back button in table header from table header +$header = PageHeader($pagename); +$tablehead = TableHeader($pagename,$backlink); require '_login.php'; if ($AdminStatus != 1) { @@ -11,22 +16,6 @@ if ($AdminStatus != 1) { echo ''; exit; } -$header=<<
- - - Admin <?php echo EVENTNAME ?> - - - - - - - -HEADER; // -
- - - - + + + + + - - - - - +--> diff --git a/html/AdminHelferLevel.php b/html/AdminHelferLevel.php new file mode 100644 index 0000000..3af9d20 --- /dev/null +++ b/html/AdminHelferLevel.php @@ -0,0 +1,155 @@ +'; + exit; +} +$AliasHelferID = 0; + +if (isset($_SESSION["AliasHelferID"])) { + $AliasHelferID = $_SESSION["AliasHelferID"]; +} + +$HelferLevelInfo = AlleHelferLevelAlles($db_link); + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + if (isset($_POST["AliasHelferID"])) { + $AliasHelferID = $_POST["AliasHelferID"]; + } + if (isset($_POST['save'])){ + $level = intval($_POST['save']); + $beschreibung = $_POST['beschreibung'][$level] ?? $HelferLevelInfo[$level]['HelferLevelBeschreibung'] ; + $linkcode = $_POST['linkcode'][$level] ?? $HelferLevelInfo[$level]['linkcode']; + HelferLevelUpdate($db_link, $level, $beschreibung, $linkcode); + } + + if (isset($_POST['create'])) { + $beschreibung_neu = trim($_POST['beschreibung_neu'] ?? ''); + $linkcode_neu = trim($_POST['linkcode_neu'] ?? ''); + if ($beschreibung_neu !== '' && $linkcode_neu !== '') { + HelferLevelInsert($db_link, $beschreibung_neu, $linkcode_neu); + } + } + if (isset($_POST['delete'])) { + $level = intval($_POST['delete']); + HelferLevelDelete($db_link, $level); + } + + // POST from _login.php after login + //echo var_dump($_POST); + header("Location: " . $_SERVER['PHP_SELF']); + exit; +} + + +if ($AliasHelferID != 0) { + $_SESSION["AliasHelferID"] = $AliasHelferID; +} +$db_erg = Helferdaten($db_link, $HelferID); +while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) { + $HelferName = $zeile['Name']; + $HelferIsAdmin = $zeile['Admin']; +} +echo $header; // muss nach redirect-headern fuer POST ausgegeben werden +echo $tablehead; // variablen aus _login.php +?> +

+ +HelferLevel definieren die Rollen der Accounts und helfen Aufgaben abzugrenzen. +Jeder Account ist genau einem Level zugeordnet. +Hier können Levels bearbeitet, erstellt oder unbenutzte Levels gelöscht werden. Nutzung durch Accounts und Dienste in den Spalten davor. +

+Der Button ganz rechts verlinkt eine Accounterstellungsseit pro Level (Link auf Erstellungsseite enthält jeweiligen "linkcode").
+Alternativ zur Accounterstellungsseite kann ein + + ✉️ persönlicher Einladungslink per Email verschickt werden, der automatisch einen Account "auf Klick" anlegt. + +

+ + +
-   - Admin -
+ + + HelferLevel verwalten und Accounterstellung + +
@@ -69,9 +67,9 @@ while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) {
+
persönliche Einladungslink(s) generieren @@ -80,16 +78,17 @@ while ($zeile = mysqli_fetch_array($db_erg, MYSQLI_ASSOC)) { - Helferübersicht und als Admin ändern
(Anm: dieses Menü soll die Punkte unterhalb ablösen)
+ Helferübersicht und -verwaltung
+ + - +
@@ -134,8 +130,7 @@ if( ! isset($selectedSet) or ! $selectedSet) { Schichten Hinzufügen
Admin Kalenderansicht
+ + + + + + + + + $info) { + $beschreibung = htmlspecialchars($info['HelferLevelBeschreibung']); + $linkcode = htmlspecialchars($info['linkcode']); + $accounts = AnzahlAccountsMitHelferLevel($db_link, $level); + $dienste = AnzahlDiensteMitHelferLevel($db_link, $level); + +if ($accounts == 0 && $dienste == 0) { + $loeschButton = ""; +} else { + $verwendung = []; + if ($accounts > 0) $verwendung[] = "$accounts Account(s)"; + if ($dienste > 0) $verwendung[] = "$dienste Dienst(e)"; + $verwendungsText = implode(" und ", $verwendung); + $escapedTitle = htmlspecialchars($verwendungsText, ENT_QUOTES); + + $loeschButton = <<❌ +EOL; +} + echo << + + + + + + + +EOL; +} +?> + + + + + + + + +
LevelBeschreibungLinkcodeAccountsDiensteAktion
$level$accounts$dienste + + $loeschButton + + + 🧑➕ + +
neu--
+ + + + + diff --git a/html/CreateHelfer.php b/html/CreateHelfer.php index 070890e..dd5a2af 100644 --- a/html/CreateHelfer.php +++ b/html/CreateHelfer.php @@ -5,15 +5,21 @@ SESSION_START(); require 'SQL.php'; $db_link = ConnectDB(); // Das hier wird über eine Art Token den Zugriff auf CreateHelfer erlauben -// Jedes Token ist mit einem Helferlevel verknüpft, in dem dann Helfer angelegt -$typeSecret = $_GET['invite_code'] ?? ''; -if (empty($typeSecret)) { - die("Fehlender Zugangscode."); +// Jedes Token ist mit einem Helferlevel verknüpft, in dem dann Helfer angelegt +$linkcode = $_GET['linkcode'] ?? ''; +if (empty($linkcode)) { + die("
Fehlender Einladungscode.
"); } +$HelferLevelDaten = HelferLevelAusEinladung($db_link, $linkcode); +if ($HelferLevelDaten === false) { + die("
Ungültiger Einladungscode."); +} +$HelferLevel = $HelferLevelDaten['HelferLevel']; +$HelferLevelBeschreibung = $HelferLevelDaten['HelferLevelBeschreibung']; ?> - + <?php echo EVENTNAME ?> @@ -21,8 +27,8 @@ if (empty($typeSecret)) { - - + + Hier können Sie sich selbst einen Account im Level: $HelferLevelBeschreibung ($HelferLevel) anlegen.
"; +echo 'Danach zum
Login

'; ?> -

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

@@ -121,39 +127,11 @@ if (isset($_POST['sent'])) { - - -
Helferlevel
- -
-
- +
- - - - - - + diff --git a/html/SQL.php b/html/SQL.php index 48be551..177b4e1 100644 --- a/html/SQL.php +++ b/html/SQL.php @@ -926,7 +926,7 @@ function LastInsertId($db_link) function HelferLevel($db_link) { - $sql = "select HelferLevel,HelferLevelBeschreibung from HelferLevel"; + $sql = "select HelferLevel, HelferLevelBeschreibung, linkcode from HelferLevel order by HelferLevel"; $result = mysqli_query($db_link, $sql); if (! $result) { echo "Konnte HelferLevel nicht abfragen"; @@ -948,3 +948,89 @@ function alleHelferLevel($db_link) } +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(); +//} + diff --git a/html/Userdaten.php b/html/Userdaten.php index 8f0649d..390e306 100644 --- a/html/Userdaten.php +++ b/html/Userdaten.php @@ -1,24 +1,17 @@ - - - <?php echo EVENTNAME ?> Persönliche Daten ändern - - - - - - -HEADER; //Helfer wählen:'; - echo '
'; - echo '
'; +function PageHeader ($pagename, $eventname = EVENTNAME){ + $header = <<
+ + + $pagename $eventname + + + + + + +HEADER; // + + + + +
+ +   + + $pagename $eventname +
+TABLEHEAD; // Erst Helfer auswählen

"; - 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']; - $AliasHelferLevel = $zeile['HelferLevel']; -} diff --git a/html/_login.php b/html/_login.php index 17058c4..bf0738b 100644 --- a/html/_login.php +++ b/html/_login.php @@ -102,4 +102,5 @@ $AdminID = isset($_SESSION["AdminID"]) ? $_SESSION["AdminID"] : -1; //TODO vereinheitlichen. index.php verwendet HelferIsAdmin $HelferIsAdmin = $AdminStatus = $_SESSION["AdminStatus"]; $HelferLevel = $_SESSION["HelferLevel"]; + ?> diff --git a/html/css/style_common.css b/html/css/style_common.css index 2fbe50f..143a9a8 100644 --- a/html/css/style_common.css +++ b/html/css/style_common.css @@ -64,7 +64,7 @@ input, select, textarea { width: 95%; } -.commontable button,.back button,.helfer button,#customers button { +.commontable button,.back button,.helfer button,#customers button, .buttonlink{ text-decoration: none; /* dont underline links */ display: inline-block; /* makes it possible to set top and bottom margins */ width: 45px; @@ -82,3 +82,5 @@ summary { font-size: 3px; height: 2px; } + +