86 lines
2.3 KiB
PHP
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;
|
|
}
|
|
}
|