{{-- Filter & Actions Panel --}}

{{ __('Audit Log') }}

{{ __('Track admin actions, system events, and security changes.') }}

{{ __('Reset') }}
{{-- Audit Log Table Panel --}}

{{ __('Log Directory') }}

{{ __('Showing') }} {{ $logs->firstItem() ?? 0 }}-{{ $logs->lastItem() ?? 0 }} {{ __('of') }} {{ $logs->total() }} {{ __('log entries.') }}

{{ __('Export') }}
{{-- List View --}}
@forelse($logs as $log) @empty @endforelse
{{ __('Date & Time') }} {{ __('Actor') }} {{ __('Event') }} {{ __('Target') }} {{ __('IP Address') }} {{ __('Details') }}
{{ \Carbon\Carbon::parse($log->created_at)->format('M j, Y H:i:s') }}
{{ strtoupper(substr($log->actor_name ?? 'SY', 0, 2)) }}
{{ $log->actor_name ?? __('System') }}

{{ ucfirst($log->actor_type ?? 'system') }}

{{ str_replace('_', ' ', ucfirst($log->event)) }} @if($log->auditable_type) {{ class_basename($log->auditable_type) }} #{{ $log->auditable_id }} @else -- @endif {{ $log->ip_address ?? '--' }} @php // Some audit rows store nested arrays inside new_values / // old_values (e.g. CSV imports, multi-field forms). The // previous code did "$k: $v" inline which triggers PHP's // "Array to string conversion" fatal when $v is an array. // json_encode the value when it's not scalar. $renderVals = function ($json) { $vals = json_decode((string) $json, true); if (!is_array($vals)) { return null; } $pairs = []; foreach ($vals as $k => $v) { if (is_array($v) || is_object($v)) { $v = json_encode($v, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } elseif (is_bool($v)) { $v = $v ? 'true' : 'false'; } elseif (is_null($v)) { $v = 'null'; } $pairs[] = "{$k}: {$v}"; } return \Illuminate\Support\Str::limit(implode(', ', $pairs), 80); }; $summary = $log->new_values ? $renderVals($log->new_values) : ($log->old_values ? $renderVals($log->old_values) : null); @endphp {{ $summary ?? '--' }}
{{ __('No audit logs found.') }}
{{-- Grid View --}}
@forelse($logs as $log)
{{ strtoupper(substr($log->actor_name ?? 'SY', 0, 2)) }}
{{ $log->actor_name ?? __('System') }}

{{ ucfirst($log->actor_type ?? 'system') }}

{{ str_replace('_', ' ', ucfirst($log->event)) }}
@if($log->auditable_type) {{ class_basename($log->auditable_type) }} #{{ $log->auditable_id }} @else -- @endif {{ $log->ip_address ?? '--' }}
{{ \Carbon\Carbon::parse($log->created_at)->format('M j, Y H:i:s') }}
@empty
{{ __('No audit logs found.') }}
@endforelse
@if($logs->hasPages())
{{ $logs->withQueryString()->links() }}
@endif