Dateien nach "/" hochladen

This commit is contained in:
2026-07-28 10:12:57 +00:00
commit bc0dca6608
5 changed files with 554 additions and 0 deletions
+207
View File
@@ -0,0 +1,207 @@
<?php
require __DIR__ . '/includes/auth.php';
require __DIR__ . '/includes/functions.php';
$pdo = require __DIR__ . '/includes/db.php';
require_login();
$success = '';
$error = '';
// ---- Aktionen verarbeiten ----
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
csrf_check();
$action = $_POST['action'] ?? '';
if ($action === 'add_entry' || $action === 'update_entry') {
$type = ($_POST['type'] ?? '') === 'termin' ? 'termin' : 'neuigkeit';
$title = trim($_POST['title'] ?? '');
$date = trim($_POST['entry_date'] ?? '') ?: null;
$body = trim($_POST['body'] ?? '');
if ($title === '' || $body === '') {
$error = 'Bitte Titel und Text ausfüllen.';
} else {
if ($action === 'add_entry') {
$stmt = $pdo->prepare('INSERT INTO eintraege (type, title, entry_date, body, author_name) VALUES (?, ?, ?, ?, ?)');
$stmt->execute([$type, $title, $date, $body, current_user_name()]);
$success = 'Eintrag wurde gespeichert.';
} else {
$id = (int)($_POST['id'] ?? 0);
$stmt = $pdo->prepare('UPDATE eintraege SET type=?, title=?, entry_date=?, body=? WHERE id=?');
$stmt->execute([$type, $title, $date, $body, $id]);
$success = 'Eintrag wurde aktualisiert.';
}
}
}
if ($action === 'delete_entry') {
$id = (int)($_POST['id'] ?? 0);
$stmt = $pdo->prepare('DELETE FROM eintraege WHERE id=?');
$stmt->execute([$id]);
$success = 'Eintrag wurde gelöscht.';
}
if ($action === 'add_user') {
$name = trim($_POST['new_name'] ?? '');
$username = trim($_POST['new_username'] ?? '');
$password = $_POST['new_password'] ?? '';
if ($name === '' || $username === '' || strlen($password) < 8) {
$error = 'Bitte Name und Benutzername ausfüllen — das Passwort braucht mindestens 8 Zeichen.';
} else {
$exists = $pdo->prepare('SELECT COUNT(*) FROM users WHERE username = ?');
$exists->execute([$username]);
if ($exists->fetchColumn() > 0) {
$error = 'Dieser Benutzername ist bereits vergeben.';
} else {
$stmt = $pdo->prepare('INSERT INTO users (username, password_hash, name) VALUES (?, ?, ?)');
$stmt->execute([$username, password_hash($password, PASSWORD_DEFAULT), $name]);
$success = 'Neues Mitgliedskonto für ' . $name . ' wurde angelegt.';
}
}
}
}
// ---- Daten für die Anzeige laden ----
$editEntry = null;
if (isset($_GET['edit'])) {
$stmt = $pdo->prepare('SELECT * FROM eintraege WHERE id = ?');
$stmt->execute([(int)$_GET['edit']]);
$editEntry = $stmt->fetch(PDO::FETCH_ASSOC);
}
$eintraege = $pdo->query("SELECT * FROM eintraege ORDER BY (entry_date IS NULL), entry_date DESC, created_at DESC")->fetchAll(PDO::FETCH_ASSOC);
$users = $pdo->query("SELECT id, name, username, created_at FROM users ORDER BY created_at ASC")->fetchAll(PDO::FETCH_ASSOC);
if (isset($_GET['willkommen'])) {
$success = 'Konto eingerichtet — willkommen im Mitgliederbereich!';
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mitgliederbereich · Geburtsverein Ernsthausen</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600;9..144,700;9..144,800&family=Libre+Franklin:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php include __DIR__ . '/includes/nav.php'; ?>
<div class="pagehead">
<div class="pagehead-inner">
<p class="kicker on-dark">Angemeldet als <?= e(current_user_name()) ?></p>
<h1>Mitgliederbereich</h1>
<p>Hier trägst du Termine und Neuigkeiten ein, die auf der Startseite unter „Aktuelles" erscheinen — und kannst weitere Mitglieder freischalten.</p>
</div>
</div>
<section>
<?php if ($success): ?><div class="alert success"><?= e($success) ?></div><?php endif; ?>
<?php if ($error): ?><div class="alert error"><?= e($error) ?></div><?php endif; ?>
<div class="two-col">
<div>
<div class="form-card">
<h2><?= $editEntry ? 'Eintrag bearbeiten' : 'Neuen Eintrag erstellen' ?></h2>
<form method="post" novalidate>
<input type="hidden" name="csrf_token" value="<?= e(csrf_token()) ?>">
<input type="hidden" name="action" value="<?= $editEntry ? 'update_entry' : 'add_entry' ?>">
<?php if ($editEntry): ?><input type="hidden" name="id" value="<?= (int)$editEntry['id'] ?>"><?php endif; ?>
<div class="field">
<label for="type">Art</label>
<select id="type" name="type">
<option value="termin" <?= ($editEntry['type'] ?? '') === 'termin' ? 'selected' : '' ?>>Termin</option>
<option value="neuigkeit" <?= ($editEntry['type'] ?? '') === 'neuigkeit' ? 'selected' : '' ?>>Neuigkeit</option>
</select>
</div>
<div class="field">
<label for="title">Titel</label>
<input type="text" id="title" name="title" required value="<?= e($editEntry['title'] ?? '') ?>" placeholder="z. B. Generalversammlung">
</div>
<div class="field">
<label for="entry_date">Datum (optional)</label>
<input type="date" id="entry_date" name="entry_date" value="<?= e($editEntry['entry_date'] ?? '') ?>">
</div>
<div class="field">
<label for="body">Text</label>
<textarea id="body" name="body" required placeholder="z. B. 19:00 Uhr in der Schmiedebar bei Armin Kopp."><?= e($editEntry['body'] ?? '') ?></textarea>
</div>
<button type="submit" class="btn"><?= $editEntry ? 'Änderungen speichern' : 'Eintrag veröffentlichen' ?></button>
<?php if ($editEntry): ?><a href="admin.php" class="btn secondary">Abbrechen</a><?php endif; ?>
</form>
</div>
<div class="form-card" style="margin-top:24px;">
<h3>Neues Mitglied freischalten</h3>
<p style="font-size:14px; color:var(--ink-soft); margin-top:-8px;">Jedes Vereinsmitglied bekommt einen eigenen Zugang zum Mitgliederbereich.</p>
<form method="post" novalidate>
<input type="hidden" name="csrf_token" value="<?= e(csrf_token()) ?>">
<input type="hidden" name="action" value="add_user">
<div class="field">
<label for="new_name">Name</label>
<input type="text" id="new_name" name="new_name" required>
</div>
<div class="field">
<label for="new_username">Benutzername</label>
<input type="text" id="new_username" name="new_username" required>
</div>
<div class="field">
<label for="new_password">Passwort (mind. 8 Zeichen)</label>
<input type="password" id="new_password" name="new_password" required>
</div>
<button type="submit" class="btn secondary">Mitglied anlegen</button>
</form>
</div>
</div>
<div>
<h3 style="margin-bottom:12px;">Bestehende Einträge</h3>
<div class="admin-list">
<?php if (empty($eintraege)): ?>
<p class="log-empty">Noch keine Einträge vorhanden.</p>
<?php else: foreach ($eintraege as $eintrag): ?>
<div class="admin-row">
<div class="date"><?= e(format_datum($eintrag['entry_date']) ?? '—') ?></div>
<div class="content">
<span class="tag"><?= $eintrag['type'] === 'termin' ? 'Termin' : 'Neuigkeit' ?></span>
<h4><?= e($eintrag['title']) ?></h4>
<p><?= e($eintrag['body']) ?></p>
<span class="byline">eingetragen von <?= e($eintrag['author_name']) ?></span>
</div>
<div class="actions">
<a href="admin.php?edit=<?= (int)$eintrag['id'] ?>" class="btn secondary">Bearbeiten</a>
<form method="post" onsubmit="return confirm('Diesen Eintrag wirklich löschen?');">
<input type="hidden" name="csrf_token" value="<?= e(csrf_token()) ?>">
<input type="hidden" name="action" value="delete_entry">
<input type="hidden" name="id" value="<?= (int)$eintrag['id'] ?>">
<button type="submit" class="btn danger">Löschen</button>
</form>
</div>
</div>
<?php endforeach; endif; ?>
</div>
<h3 style="margin:32px 0 12px;">Mitglieder mit Zugang</h3>
<div class="admin-list">
<?php foreach ($users as $u): ?>
<div class="admin-row" style="grid-template-columns:1fr auto;">
<div class="content">
<h4><?= e($u['name']) ?></h4>
<p>Benutzername: <?= e($u['username']) ?></p>
</div>
<div></div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</section>
<?php include __DIR__ . '/includes/footer.php'; ?>
</body>
</html>