Files
kaffeekasse-saas/namenanpassen.php
T
clemensandClaude Opus 4.8 d18c55eef5 Formular-Abstaende korrigiert und Anleitungsseite ergaenzt
Abstaende:
Im Template hat das Label 1em Abstand nach unten, das Eingabefeld aber gar
keinen, und die Formular-Grids nutzen keinen vertikalen Gutter (gtr-uniform).
Dadurch war der Abstand vom Feld zum naechsten Label 0, waehrend Label zu
eigenem Feld 1em betrug - das Label wirkte, als gehoere es zum Feld darueber.
Jetzt sitzt das Label eng an seinem eigenen Feld (0,5em) und die Felder haben
1,5em Abstand nach unten.

Ausserdem stylt main.css die Typen number, date, datetime-local und file gar
nicht; diese Felder erschienen als kleine native Kaestchen zwischen den sonst
einheitlichen Feldern (z. B. "Listenfenster in Tagen" und "Zeilenhoehe im
Ausdruck"). Sie bekommen jetzt dasselbe Aussehen wie die Textfelder.

Die Anpassungen liegen in einer eigenen assets/css/app.css, damit main.css als
Template-Datei unveraendert bleibt. Nebenbei: .hint-box.error war nirgends
definiert, obwohl es die haeufigste Variante ist - Fehlermeldungen erschienen
ungefaerbt wie neutrale Hinweise.

In faq.php, hinweise.php, namenanpassen.php und stricheintragen.php standen
<br>/<br><br> als Abstandsersatz hinter Labels und Feldern; mit den neuen
Abstaenden waere daraus doppelter Leerraum geworden. Entfernt, das Layout
kommt jetzt aus dem CSS.

Anleitung:
Neue Seite anleitung.php mit den wichtigsten Funktionen, gegliedert nach
Zielgruppe. Die Abschnitte fuer Kassenwart bzw. Administration werden nur
eingeblendet, wenn die Rolle sie auch nutzen kann - sonst stuenden dort
Hinweise auf Menuepunkte, die es fuer den Nutzer nicht gibt. Verlinkt im Menue
unter "Kaffeeliste" und im Smoke-Test abgedeckt.

Geprueft: alle 12 Formularseiten rendern fehlerfrei, http-smoke 34/0,
role-matrix 55/0, tenant-isolation 12/0, settings-flow 15/0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 11:51:14 +02:00

113 lines
3.6 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);
}
$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>
<input type="text" name="neuerName" id="neuerName" maxlength="20" required>
<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"; ?>