144 lines
4.4 KiB
PHP
144 lines
4.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Steuerkram\Controllers;
|
|
|
|
use Steuerkram\Models\User;
|
|
use Steuerkram\View;
|
|
|
|
class UserAdminController extends BaseController
|
|
{
|
|
public function index(array $params): void
|
|
{
|
|
$users = User::all();
|
|
$view = new View();
|
|
$view->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);
|
|
}
|
|
}
|
|
|