Steuerkram/src/Controllers/EventController.php
fds2610-bot 69fcc84301 Fix #208: Totmannschalter für den Nextcloud-Import
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 17:25:26 +02:00

86 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Steuerkram\Controllers;
use Steuerkram\Models\EventLog;
use Steuerkram\Services\NextcloudWatchdog;
use Steuerkram\View;
class EventController extends BaseController
{
private const LIMIT = 500;
public function index(array $params): void
{
$filter = $this->filterFromRequest();
$events = EventLog::find($filter, self::LIMIT);
$view = new View();
$view->render('layout/base.php', [
'pageTitle' => 'Ereignisse',
'content' => $this->renderView('ereignisse/index', [
'events' => $events,
'filter' => $filter,
'channels' => EventLog::channels(),
'watchdog' => NextcloudWatchdog::warning(),
'eventsHtml' => $this->renderView('ereignisse/_body', [
'events' => $events,
]),
]),
]);
}
public function indexData(array $params): void
{
$this->respondWithEvents($this->filterFromRequest());
}
public function nextcloudImport(array $params): void
{
View::redirect('/ereignisse?channel=nextcloud-import');
}
/** Datenquelle der bis Issue #165 eigenständigen Nextcloud-Ereignisseite. */
public function nextcloudImportData(array $params): void
{
$this->respondWithEvents(['channel' => 'nextcloud-import']);
}
/**
* @param array{channel?:string,level?:string} $filter
*/
private function respondWithEvents(array $filter): void
{
$events = EventLog::find($filter, self::LIMIT);
header('Content-Type: application/json');
echo json_encode([
'count' => count($events),
'html' => $this->renderView('ereignisse/_body', [
'events' => $events,
]),
], JSON_UNESCAPED_UNICODE);
}
/**
* @return array{channel?:string,level?:string}
*/
private function filterFromRequest(): array
{
$filter = [];
$channel = trim((string)($_GET['channel'] ?? ''));
if ($channel !== '') {
$filter['channel'] = $channel;
}
$level = trim((string)($_GET['level'] ?? ''));
if (in_array($level, EventLog::LEVELS, true)) {
$filter['level'] = $level;
}
return $filter;
}
}