Files
kaffeekasse-saas/namenanpassen.php
T
clemens e40955fffe 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).
2026-07-17 11:48:45 +02:00

122 lines
3.9 KiB
PHP

<?php
require_once __DIR__ . "/functions.php";
require_once __DIR__ . "/app/ledger.php";
require_once __DIR__ . "/app/audit.php";
app_require_csrf();
include "header.php";
include "headerline.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;
?>
<h2>Anzeigenamen aktualisieren</h2>
<?php if ($hasAccess): ?>
<?php
$mitglieder = ledger_fetch_participants_for_admin($pdo, $tenantId);
$eigenesMitglied = null;
foreach ($mitglieder as $m) {
if ($m['email_norm'] !== null && $m['email_norm'] === $emailNorm) {
$eigenesMitglied = $m;
break;
}
}
$auswahl = $isAdmin ? $mitglieder : ($eigenesMitglied !== null ? [$eigenesMitglied] : []);
if ($_SERVER["REQUEST_METHOD"] === "POST" && ($_POST["aktion"] ?? '') === "aktualisieren") {
$participantId = (int)($_POST["mitarbeiterID"] ?? 0);
$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 {
$fehler = 'Der Anzeigename konnte nicht aktualisiert werden.';
}
}
?>
<?php if (!$isAdmin): ?>
<p>Hier kannst du deinen Anzeigenamen anpassen. Dieser wird auf der Kaffeeliste und in E-Mails genutzt.</p>
<?php endif; ?>
<?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 if ($isAdmin): ?>
<label for="mitarbeiterID">Mitglied auswählen:</label><br>
<select name="mitarbeiterID" id="mitarbeiterID">
<?php foreach ($auswahl as $m): ?>
<option value="<?php echo (int)$m['participant_id']; ?>"><?php echo saas_html($m['display_name']); ?></option>
<?php endforeach; ?>
</select>
<?php else: ?>
<input type="hidden" name="mitarbeiterID" value="<?php echo (int)$auswahl[0]['participant_id']; ?>">
<?php endif; ?>
<br>
<label for="neuerName">Neuer Anzeigename: (maximal 20 Zeichen)</label><br>
<input type="text" name="neuerName" id="neuerName" maxlength="20" required>
<br><br>
<input type="hidden" name="aktion" value="aktualisieren">
<button type="submit">Anzeigename aktualisieren</button>
</form>
<?php endif; ?>
<?php else: ?>
<p>Sie haben keinen Zugang zu dieser Webseite.</p>
<?php endif; ?>
<?php include "footer.php"; ?>