Zwei Mehrmandanten-Bugs vor Go-Live behoben
footer.php: Einzahlung/Striche/Mitglieder/Hinweise/Jahresabschluss waren nur fuer den alten Default-Mandanten-Admin verlinkt, nicht fuer SaaS-Mandanten-Owner/Admin/Kassenwart - die Seiten selbst erlaubten Zugriff laengst, waren aber ueber die Navigation nicht erreichbar. namenanpassen.php: nie auf das neue Mandantenmodell portiert, nutzte ausschliesslich die globale kl_Mitarbeiter-Tabelle direkt per SQL und haette fuer jeden Mandanten ausser dem Standard-Mandanten leer funktioniert. Jetzt ueber participants/saas-Rollen: normale Mitglieder koennen nur sich selbst umbenennen, Owner/Admin jedes Mitglied des eigenen Mandanten. Live getestet inkl. Tenant-Isolation (Mitglied kann nicht den Owner umbenennen).
This commit is contained in:
+6
-2
@@ -21,7 +21,7 @@ $saasCanUseLedgerNav = $saasNavUser !== null
|
|||||||
&& saas_user_has_role(['owner', 'admin', 'treasurer'], $saasNavUser);
|
&& saas_user_has_role(['owner', 'admin', 'treasurer'], $saasNavUser);
|
||||||
$legacyCanUseAdminNav = checkKaffeelisteAdmin($conn, $mailadress);
|
$legacyCanUseAdminNav = checkKaffeelisteAdmin($conn, $mailadress);
|
||||||
|
|
||||||
if($legacyCanUseAdminNav){
|
if($saasCanUseLedgerNav || $legacyCanUseAdminNav){
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<li><a href="einzahlung.php">Einzahlung eintragen</a></li>
|
<li><a href="einzahlung.php">Einzahlung eintragen</a></li>
|
||||||
@@ -34,11 +34,15 @@ if($saasCanUseLedgerNav || $legacyCanUseAdminNav){
|
|||||||
?>
|
?>
|
||||||
<li><a href="kaffeeliste.php">Kaffeeliste anzeigen</a></li>
|
<li><a href="kaffeeliste.php">Kaffeeliste anzeigen</a></li>
|
||||||
<li><a href="ledger-preview.php">Ledger Preview</a></li>
|
<li><a href="ledger-preview.php">Ledger Preview</a></li>
|
||||||
|
<li><a href="jahresauswertung.php">Jahresabschluss</a></li>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<?php
|
<?php
|
||||||
if($legacyCanUseAdminNav){
|
$saasCanManageMembersNav = $saasNavUser !== null
|
||||||
|
&& function_exists('saas_user_has_role')
|
||||||
|
&& saas_user_has_role(['owner', 'admin'], $saasNavUser);
|
||||||
|
if($saasCanManageMembersNav || $legacyCanUseAdminNav){
|
||||||
?>
|
?>
|
||||||
<li><a href="mitarbeiterverwalten.php">Mitglieder verwalten</a></li>
|
<li><a href="mitarbeiterverwalten.php">Mitglieder verwalten</a></li>
|
||||||
<li><a href="hinweise.php">Hinweise verwalten</a></li>
|
<li><a href="hinweise.php">Hinweise verwalten</a></li>
|
||||||
|
|||||||
+84
-87
@@ -1,101 +1,109 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__ . "/functions.php";
|
||||||
include "functions.php";
|
require_once __DIR__ . "/app/ledger.php";
|
||||||
|
require_once __DIR__ . "/app/audit.php";
|
||||||
app_require_csrf();
|
app_require_csrf();
|
||||||
include "header.php";
|
include "header.php";
|
||||||
include "headerline.php";
|
include "headerline.php";
|
||||||
include "nav.php";
|
include "nav.php";
|
||||||
|
|
||||||
|
$pdo = app_db_pdo();
|
||||||
|
$tenantId = 0;
|
||||||
|
$hasAccess = false;
|
||||||
|
$isAdmin = false;
|
||||||
|
$emailNorm = '';
|
||||||
|
$actorUserId = $saasUser['user_id'] ?? null;
|
||||||
|
|
||||||
|
if ($saasUser !== null) {
|
||||||
|
$tenantId = (int)$saasUser['tenant_id'];
|
||||||
|
$emailNorm = strtolower(trim((string)$saasUser['email_norm']));
|
||||||
|
$hasAccess = true;
|
||||||
|
$isAdmin = saas_user_has_role(['owner', 'admin'], $saasUser);
|
||||||
|
} elseif (checkKaffeelisteAccess($conn, $mailadress)) {
|
||||||
|
$tenant = ledger_fetch_default_tenant($pdo);
|
||||||
|
if ($tenant !== null) {
|
||||||
|
$tenantId = (int)$tenant['id'];
|
||||||
|
$hasAccess = true;
|
||||||
|
$emailNorm = strtolower(trim($mailadress));
|
||||||
|
$isAdmin = checkKaffeelisteAdmin($conn, $mailadress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$meldung = null;
|
||||||
|
$fehler = null;
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Anzeigenamen aktualisieren</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<h2>Anzeigenamen aktualisieren</h2>
|
<h2>Anzeigenamen aktualisieren</h2>
|
||||||
|
|
||||||
|
<?php if ($hasAccess): ?>
|
||||||
<?php
|
<?php
|
||||||
|
$mitglieder = ledger_fetch_participants_for_admin($pdo, $tenantId);
|
||||||
|
|
||||||
if(checkKaffeelisteAccess($conn, $mailadress)){
|
$eigenesMitglied = null;
|
||||||
|
foreach ($mitglieder as $m) {
|
||||||
|
if ($m['email_norm'] !== null && $m['email_norm'] === $emailNorm) {
|
||||||
|
$eigenesMitglied = $m;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(checkKaffeelisteAdmin($conn, $mailadress)){
|
$auswahl = $isAdmin ? $mitglieder : ($eigenesMitglied !== null ? [$eigenesMitglied] : []);
|
||||||
|
|
||||||
// SQL-Abfrage für alle Mitarbeiter
|
if ($_SERVER["REQUEST_METHOD"] === "POST" && ($_POST["aktion"] ?? '') === "aktualisieren") {
|
||||||
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter ORDER BY Name";
|
$participantId = (int)($_POST["mitarbeiterID"] ?? 0);
|
||||||
$stmtMitarbeiter = sqlsrv_query($conn, $sqlMitarbeiter);
|
$neuerName = trim((string)($_POST["neuerName"] ?? ''));
|
||||||
|
|
||||||
|
$ziel = null;
|
||||||
|
foreach ($auswahl as $m) {
|
||||||
|
if ($m['participant_id'] === $participantId) {
|
||||||
|
$ziel = $m;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ziel === null) {
|
||||||
|
$fehler = 'Dieses Mitglied konnte nicht gefunden werden.';
|
||||||
|
} elseif ($neuerName === '' || strlen($neuerName) > 60) {
|
||||||
|
$fehler = 'Bitte einen Namen mit maximal 20 Zeichen angeben.';
|
||||||
|
} elseif (ledger_update_participant($pdo, $tenantId, $participantId, $neuerName, (string)($ziel['email'] ?? ''), $ziel['paypal_name'], $ziel['active'])) {
|
||||||
|
app_audit_log($pdo, $tenantId, $actorUserId, 'participant.renamed', 'participant', $participantId, ['name' => $neuerName]);
|
||||||
|
$meldung = 'Anzeigename wurde aktualisiert.';
|
||||||
|
$mitglieder = ledger_fetch_participants_for_admin($pdo, $tenantId);
|
||||||
|
$auswahl = $isAdmin ? $mitglieder : array_values(array_filter($mitglieder, fn(array $m): bool => $m['participant_id'] === $participantId));
|
||||||
} else {
|
} else {
|
||||||
|
$fehler = 'Der Anzeigename konnte nicht aktualisiert werden.';
|
||||||
|
|
||||||
echo "Hallo " . getUserName($conn,$mailadress) . "!<br><br>Hier kannst du deinen Anzeigenamen anpassen.<br>Dieser wird auf der Kaffeeliste und E-Mail genutzt.<br>";
|
|
||||||
// SQL-Abfrage für alle Mitarbeiter
|
|
||||||
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter WHERE Email ='" . $mailadress . "'";
|
|
||||||
$stmtMitarbeiter = sqlsrv_query($conn, $sqlMitarbeiter);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Funktion zum Aktualisieren des Anzeigenamens
|
|
||||||
function aktualisiereAnzeigenamen($mitarbeiterID, $neuerName, $conn) {
|
|
||||||
try {
|
|
||||||
$sql = "UPDATE kl_Mitarbeiter SET Name = ? WHERE MitarbeiterID = ?";
|
|
||||||
$params = array($neuerName, $mitarbeiterID);
|
|
||||||
|
|
||||||
$stmt = sqlsrv_query($conn, $sql, $params);
|
|
||||||
|
|
||||||
if ($stmt === false) {
|
|
||||||
throw new Exception(print_r(sqlsrv_errors(), true));
|
|
||||||
}
|
|
||||||
|
|
||||||
return true; // Erfolgreich aktualisiert
|
|
||||||
} catch (Exception $e) {
|
|
||||||
return $e->getMessage(); // Fehlermeldung zurückgeben
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Überprüfen, ob das Formular abgesendet wurde
|
|
||||||
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["aktion"]) && $_POST["aktion"] == "aktualisieren") {
|
|
||||||
$mitarbeiterID = $_POST["mitarbeiterID"];
|
|
||||||
$neuerName = $_POST["neuerName"];
|
|
||||||
|
|
||||||
$ergebnis = aktualisiereAnzeigenamen($mitarbeiterID, $neuerName, $conn);
|
|
||||||
|
|
||||||
if ($ergebnis === true) {
|
|
||||||
echo "Anzeigename erfolgreich aktualisiert.";
|
|
||||||
} else {
|
|
||||||
echo "Fehler: $ergebnis";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<?php if (!$isAdmin): ?>
|
||||||
|
<p>Hier kannst du deinen Anzeigenamen anpassen. Dieser wird auf der Kaffeeliste und in E-Mails genutzt.</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
|
<?php if ($meldung !== null): ?>
|
||||||
|
<div class="hint-box success"><p><?php echo saas_html($meldung); ?></p></div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($fehler !== null): ?>
|
||||||
|
<div class="hint-box error"><p><?php echo saas_html($fehler); ?></p></div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if ($auswahl === []): ?>
|
||||||
|
<p>Für dein Konto wurde kein Mitglied gefunden.</p>
|
||||||
|
<?php else: ?>
|
||||||
|
<form method="post" action="namenanpassen.php">
|
||||||
<?php echo app_csrf_field(); ?>
|
<?php echo app_csrf_field(); ?>
|
||||||
<label for="mitarbeiterID">Mitarbeiter auswählen:</label><br>
|
<?php if ($isAdmin): ?>
|
||||||
|
<label for="mitarbeiterID">Mitglied auswählen:</label><br>
|
||||||
<select name="mitarbeiterID" id="mitarbeiterID">
|
<select name="mitarbeiterID" id="mitarbeiterID">
|
||||||
<?php
|
<?php foreach ($auswahl as $m): ?>
|
||||||
while ($row = sqlsrv_fetch_array($stmtMitarbeiter, SQLSRV_FETCH_ASSOC)) {
|
<option value="<?php echo (int)$m['participant_id']; ?>"><?php echo saas_html($m['display_name']); ?></option>
|
||||||
$mitarbeiterID = $row['MitarbeiterID'];
|
<?php endforeach; ?>
|
||||||
$name = $row['Name'];
|
|
||||||
echo "<option value='{$mitarbeiterID}'>{$name}</option>";
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</select>
|
</select>
|
||||||
|
<?php else: ?>
|
||||||
|
<input type="hidden" name="mitarbeiterID" value="<?php echo (int)$auswahl[0]['participant_id']; ?>">
|
||||||
|
<?php endif; ?>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<label for="neuerName">Neuer Anzeigename: (maximal 20 Zeichen)</label><br>
|
<label for="neuerName">Neuer Anzeigename: (maximal 20 Zeichen)</label><br>
|
||||||
@@ -105,20 +113,9 @@ if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["aktion"]) && $_POST["a
|
|||||||
<input type="hidden" name="aktion" value="aktualisieren">
|
<input type="hidden" name="aktion" value="aktualisieren">
|
||||||
<button type="submit">Anzeigename aktualisieren</button>
|
<button type="submit">Anzeigename aktualisieren</button>
|
||||||
</form>
|
</form>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php else: ?>
|
||||||
|
<p>Sie haben keinen Zugang zu dieser Webseite.</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
<?php
|
|
||||||
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<?php include "footer.php"; ?>
|
<?php include "footer.php"; ?>
|
||||||
|
|||||||
Reference in New Issue
Block a user