render('layout/base.php', [ 'pageTitle' => 'Benutzerverwaltung', 'content' => $this->renderView('useradmin/list', [ 'users' => $users, 'errors' => [], ]), ]); } public function store(array $params): void { $username = trim($_POST['username'] ?? ''); $password = $_POST['password'] ?? ''; $errors = []; if ($username === '') { $errors['username'] = 'Pflichtfeld'; } elseif (strlen($username) > 64) { $errors['username'] = 'Maximal 64 Zeichen'; } elseif (User::findByUsername($username)) { $errors['username'] = 'Benutzername bereits vergeben'; } if (strlen($password) < 8) { $errors['password'] = 'Mindestens 8 Zeichen erforderlich'; } if ($errors) { $view = new View(); $view->render('layout/base.php', [ 'pageTitle' => 'Benutzerverwaltung', 'content' => $this->renderView('useradmin/list', [ 'users' => User::all(), 'errors' => $errors, 'formData' => ['username' => $username], ]), ]); return; } User::create($username, $password); View::redirect('/useradmin', 'Benutzer angelegt.'); } public function update(array $params): void { $id = (int)($params['id'] ?? 0); $username = trim($_POST['username'] ?? ''); $password = $_POST['password'] ?? ''; $errors = []; if (!User::find($id)) { View::redirect('/useradmin', 'Benutzer nicht gefunden.', 'error'); return; } if ($username === '') { $errors['username'] = 'Pflichtfeld'; } elseif (strlen($username) > 64) { $errors['username'] = 'Maximal 64 Zeichen'; } else { $existing = User::findByUsername($username); if ($existing && (int)$existing['id'] !== $id) { $errors['username'] = 'Benutzername bereits vergeben'; } } if ($password !== '' && strlen($password) < 8) { $errors['password'] = 'Mindestens 8 Zeichen erforderlich'; } if ($errors) { $view = new View(); $view->render('layout/base.php', [ 'pageTitle' => 'Benutzerverwaltung', 'content' => $this->renderView('useradmin/list', [ 'users' => User::all(), 'errors' => $errors, 'formData' => ['username' => $username, 'edit_id' => $id], ]), ]); return; } User::update($id, $username, $password); View::redirect('/useradmin', 'Benutzer gespeichert.'); } public function delete(array $params): void { $id = (int)($params['id'] ?? 0); // Letzten aktiven Benutzer nicht löschen if (User::count() <= 1) { View::redirect('/useradmin', 'Der letzte Benutzer kann nicht gelöscht werden.', 'error'); return; } User::delete($id); View::redirect('/useradmin', 'Benutzer gelöscht.'); } public function toggleActive(array $params): void { $id = (int)($params['id'] ?? 0); $user = User::find($id); if (!$user) { View::redirect('/useradmin', 'Benutzer nicht gefunden.', 'error'); return; } $newState = !(bool)$user['active']; // Letzten aktiven Benutzer nicht deaktivieren if (!$newState) { $activeCount = count(array_filter(User::all(), fn($u) => $u['active'])); if ($activeCount <= 1) { View::redirect('/useradmin', 'Der letzte aktive Benutzer kann nicht deaktiviert werden.', 'error'); return; } } User::setActive($id, $newState); $msg = $newState ? 'Benutzer aktiviert.' : 'Benutzer deaktiviert.'; View::redirect('/useradmin', $msg); } }