diff --git a/partials/landing/account/dashboard.php b/partials/landing/account/dashboard.php index 6449fdc..66139d8 100644 --- a/partials/landing/account/dashboard.php +++ b/partials/landing/account/dashboard.php @@ -119,6 +119,32 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { 'status' => 'published', ]); $info = 'Event gespeichert.'; + } elseif ($action === 'event_delete') { + $eventId = (int)($_POST['event_id'] ?? 0); + $stmt = $pdo->prepare('SELECT id, created_by, status, (SELECT COUNT(*) FROM event_participants ep WHERE ep.event_id = events.id) AS participant_count FROM events WHERE id = :id LIMIT 1'); + $stmt->execute(['id' => $eventId]); + $ev = $stmt->fetch(PDO::FETCH_ASSOC); + if (!$ev || (int)$ev['created_by'] !== $userId) { + throw new RuntimeException('Event nicht gefunden.'); + } + if ((int)$ev['participant_count'] > 0) { + throw new RuntimeException('Event hat Anmeldungen und kann nicht gelöscht werden.'); + } + $pdo->prepare('DELETE FROM events WHERE id = :id')->execute(['id' => $eventId]); + $info = 'Event gelöscht.'; + } elseif ($action === 'event_cancel') { + $eventId = (int)($_POST['event_id'] ?? 0); + $stmt = $pdo->prepare('SELECT id, created_by FROM events WHERE id = :id LIMIT 1'); + $stmt->execute(['id' => $eventId]); + $ev = $stmt->fetch(PDO::FETCH_ASSOC); + if (!$ev || (int)$ev['created_by'] !== $userId) { + throw new RuntimeException('Event nicht gefunden.'); + } + $pdo->prepare('UPDATE events SET status = :st, updated_at = NOW() WHERE id = :id')->execute([ + 'st' => 'cancelled', + 'id' => $eventId, + ]); + $info = 'Event wurde abgesagt.'; } } catch (Throwable $e) { $error = $e->getMessage(); @@ -160,10 +186,27 @@ foreach ($childrenRaw as $c) { $children[] = $c; } -$events = []; -$stmt = $pdo->prepare('SELECT id, title, teaser_public, starts_at, city, visibility FROM events WHERE created_by = :id ORDER BY starts_at DESC'); +$eventsUpcoming = []; +$eventsPast = []; +$stmt = $pdo->prepare( + 'SELECT e.id, e.title, e.teaser_public, e.starts_at, e.city, e.visibility, e.status, + (SELECT COUNT(*) FROM event_participants ep WHERE ep.event_id = e.id) AS participant_count + FROM events e + WHERE e.created_by = :id AND e.starts_at >= NOW() + ORDER BY e.starts_at ASC' +); $stmt->execute(['id' => $userId]); -$events = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: []; +$eventsUpcoming = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: []; + +$stmt = $pdo->prepare( + 'SELECT e.id, e.title, e.teaser_public, e.starts_at, e.city, e.visibility, e.status, + (SELECT COUNT(*) FROM event_participants ep WHERE ep.event_id = e.id) AS participant_count + FROM events e + WHERE e.created_by = :id AND e.starts_at < NOW() + ORDER BY e.starts_at DESC' +); +$stmt->execute(['id' => $userId]); +$eventsPast = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: []; ?>
@@ -225,26 +268,76 @@ $events = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: [];
-
+
Deine Events
- -

Noch keine Events angelegt.

+
+ +
+ +

Keine zukünftigen Events angelegt.

-
    - -
  • , ()
  • +
      + +
    • +
      +
      + + + Abgesagt + +
      + · · + · Anmeldungen: +
      +
      +
      + +
      + + + +
      + + +
      + + + +
      + + +
      +
      +
    -
-
- -
-
-
Eigenes Event
-

Neuen Termin erstellen

- +
+ Vergangene Events anzeigen + +

Keine vergangenen Events.

+ +
    + +
  • +
    +
    + + + Abgesagt + +
    + · · + · Anmeldungen: +
    +
    +
    +
  • + +
+ +
diff --git a/public/assets/css/app.css b/public/assets/css/app.css index 0c2b789..41cd833 100644 --- a/public/assets/css/app.css +++ b/public/assets/css/app.css @@ -150,6 +150,8 @@ body { .form-grid.single { grid-template-columns: 1fr; } @media (max-width: 900px){ .auth-grid { grid-template-columns: 1fr; } .form-grid { grid-template-columns: 1fr; } } +.modal .panel { max-height: 90vh; overflow: auto; } + .dash-grid { display:grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 16px; } .dash-grid-2 { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 16px; } .dash-card { padding: 18px; }