51 lines
1.2 KiB
PHP
51 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Audit;
|
|
|
|
use App\Models\AuditEvent;
|
|
use Illuminate\Support\Collection;
|
|
use Livewire\Attributes\Layout;
|
|
use Livewire\Component;
|
|
|
|
#[Layout('layouts.app')]
|
|
class Index extends Component
|
|
{
|
|
/** Freitext-Filter über Akteur / Aktion / Ziel / Server. */
|
|
public string $q = '';
|
|
|
|
/**
|
|
* Letzte Audit-Ereignisse, optional gefiltert. Echte Daten aus der DB;
|
|
* die Filterung läuft im Speicher über die geladenen 50 Einträge.
|
|
*/
|
|
protected function events(): Collection
|
|
{
|
|
$events = AuditEvent::with('server')->latest()->limit(50)->get();
|
|
|
|
$needle = trim($this->q);
|
|
|
|
if ($needle === '') {
|
|
return $events;
|
|
}
|
|
|
|
$needle = mb_strtolower($needle);
|
|
|
|
return $events->filter(function (AuditEvent $e) use ($needle): bool {
|
|
$haystack = mb_strtolower(implode(' ', array_filter([
|
|
$e->actor,
|
|
$e->action,
|
|
$e->target,
|
|
$e->server?->name,
|
|
])));
|
|
|
|
return str_contains($haystack, $needle);
|
|
})->values();
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.audit.index', [
|
|
'events' => $this->events(),
|
|
])->title(__('audit.title'));
|
|
}
|
|
}
|