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).
122 lines
3.9 KiB
PHP
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"; ?>
|