Steuerkram/src/Controllers/EventController.php

84 lines
2.2 KiB
PHP

<?php
declare(strict_types=1);
namespace Steuerkram\Controllers;
use Steuerkram\Models\EventLog;
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(),
'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;
}
}