@php
$distributions = [
['Sumber Trafik', $report->traffic, 'source_name', 'visitor_count'],
['Pelayar Web', $report->browsers, 'browser_name', 'visit_count'],
['Jenis Peranti', $report->devices, 'device_type', 'visit_count'],
['Geografi', $report->geography, 'country', 'visitor_count'],
];
$totalEmissions = $report->carbon->sum('calculated_emissions_gco2e');
@endphp
@if ($report->visitors)
@endif
@if ($report->visitors?->monthly_breakdown)
@php
// Ordered by the calendar, not by however the JSON keys happen to
// be stored — an imported report can hold them alphabetically.
$stored = $report->visitors->monthly_breakdown;
$breakdown = collect(\App\Services\VisitorTrendBuilder::MONTH_KEYS)
->mapWithKeys(fn ($month) => [$month => (int) ($stored[$month] ?? 0)]);
$peak = max(1, $breakdown->max());
@endphp
@foreach ($breakdown as $month => $value)
@endforeach
@foreach ($breakdown as $month => $value)
{{ ucfirst($month) }}
@endforeach
@endif
@foreach ($distributions as [$title, $rows, $labelKey, $countKey])
@if ($rows->isNotEmpty())
@php $max = max(1, $rows->max($countKey)); @endphp
@foreach ($rows->sortByDesc($countKey) as $row)
{{ $row->{$labelKey} }}
{{ number_format($row->{$countKey}) }}
({{ $row->percentage }}%)
@endforeach
@endif
@endforeach
@if ($report->topPages->isNotEmpty() || $report->searchQueries->isNotEmpty())
@if ($report->topPages->isNotEmpty())
@foreach ($report->topPages->sortByDesc('visit_count') as $page)
|
{{ $page->page_title ?: $page->page_url }}
{{ $page->page_url }}
|
{{ number_format($page->visit_count) }} |
@endforeach
@endif
@if ($report->searchQueries->isNotEmpty())
@foreach ($report->searchQueries->sortByDesc('search_count') as $query)
| {{ $query->query_text }} |
{{ number_format($query->search_count) }} |
@endforeach
@endif
@endif
@if ($report->incidents->isNotEmpty())
@foreach ($report->incidents as $incident)
{{ $incident->day_number }}
@endforeach
@php $active = $report->incidents->where('has_incident', true); @endphp
@if ($active->isNotEmpty())
@foreach ($active as $incident)
Hari {{ $incident->day_number }}
{{ $incident->title }}
@if ($incident->description)
{{ $incident->description }}
@endif
@endforeach
@endif
@endif
@if ($report->security->isNotEmpty())
@foreach ($report->security as $row)
| {{ $row->website->displayName() }} |
{{ $row->ssl_status ?? '—' }}
|
{{ $row->ssl_expiry?->format('d M Y') ?? '—' }} |
{{ $row->cms_name ?? '—' }} |
{{ $row->cms_version ?? '—' }}
@if ($row->isOutdated())
Perlu kemas kini
@endif
|
{{ $row->cms_latest_version ?? '—' }} |
@endforeach
@endif
@if ($report->carbon->isNotEmpty())
@foreach ($report->carbon as $row)
| {{ $row->website->displayName() }} |
{{ number_format($row->page_weight_kb, 1) }} KB |
{{ number_format($row->monthly_pageviews) }} |
{{ number_format($row->data_transfer_gb, 2) }} GB |
{{ number_format($row->emissionsKg(), 2) }} kg |
{{ $row->gramsPerVisit() }} g |
{{ $row->treesPerYear() }} |
@endforeach
@endif
@php $sections = $report->sectionContent(); @endphp
@if (collect($sections)->filter()->isNotEmpty())
@foreach (\App\Models\MonthlyReport::SECTIONS as $key => $label)
@if (! empty($sections[$key]))
@endif
@endforeach
@endif