Skip to content
Snippets Groups Projects
Verified Commit b7290434 authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

feat: add best referrers and origins to admin dashboard

- Updated HomeController to include best referrers and origins based on logged visits.
- Enhanced SQL queries to join additional URL information for referrer and origin URLs.
- Modified admin home view to display tables for best referrers and origins with visit counts.
parent b9abf4fe
No related branches found
No related tags found
No related merge requests found
Pipeline #1088 passed
...@@ -30,12 +30,18 @@ public function index(Request $request): View ...@@ -30,12 +30,18 @@ public function index(Request $request): View
$visits = LoggedRequest::select([ $visits = LoggedRequest::select([
'logged_requests.url_id', 'logged_requests.url_id',
'logged_requests.referer_url_id',
'logged_requests.origin_url_id',
'logged_requests.ip_address_id', 'logged_requests.ip_address_id',
'ip_address_metadata.country_code', 'ip_address_metadata.country_code',
'logged_requests.created_at', 'logged_requests.created_at',
'urls.url']) 'urls.url',
'referer_url.url as referer_url',
'origin_url.url as origin_url'])
->distinct('logged_requests.url_id', 'logged_requests.ip_address_id') ->distinct('logged_requests.url_id', 'logged_requests.ip_address_id')
->join('urls', 'logged_requests.url_id', '=', 'urls.id') ->join('urls', 'logged_requests.url_id', '=', 'urls.id')
->leftJoin('urls as referer_url', 'logged_requests.referer_url_id', '=', 'referer_url.id')
->leftJoin('urls as origin_url', 'logged_requests.origin_url_id', '=', 'origin_url.id')
->join('user_agent_metadata', 'logged_requests.user_agent_id', '=', 'user_agent_metadata.user_agent_id') ->join('user_agent_metadata', 'logged_requests.user_agent_id', '=', 'user_agent_metadata.user_agent_id')
->join('ip_address_metadata', 'logged_requests.ip_address_id', '=', 'ip_address_metadata.ip_address_id') ->join('ip_address_metadata', 'logged_requests.ip_address_id', '=', 'ip_address_metadata.ip_address_id')
->whereLike('urls.url', config('app.url').'%') ->whereLike('urls.url', config('app.url').'%')
...@@ -89,6 +95,20 @@ public function index(Request $request): View ...@@ -89,6 +95,20 @@ public function index(Request $request): View
->sortByDesc('count') ->sortByDesc('count')
->values(); ->values();
$bestsReferrers = $visits->where('created_at', '>=', $startDate)
->where('created_at', '<=', $dateEnd)
->groupBy('referer_url')
->map(fn ($group, $url) => ['url' => $url, 'count' => $group->count()])
->sortByDesc('count')
->values();
$bestOrigins = $visits->where('created_at', '>=', $startDate)
->where('created_at', '<=', $dateEnd)
->groupBy('origin_url')
->map(fn ($group, $url) => ['url' => $url, 'count' => $group->count()])
->sortByDesc('count')
->values();
return view('admin.home', [ return view('admin.home', [
'totalVisitsPastTwentyFourHours' => $totalVisitsPastTwentyFourHours, 'totalVisitsPastTwentyFourHours' => $totalVisitsPastTwentyFourHours,
'totalVisitsPastSevenDays' => $totalVisitsPastSevenDays, 'totalVisitsPastSevenDays' => $totalVisitsPastSevenDays,
...@@ -97,6 +117,8 @@ public function index(Request $request): View ...@@ -97,6 +117,8 @@ public function index(Request $request): View
'visitsPerDay' => $visitsPerDay, 'visitsPerDay' => $visitsPerDay,
'visitsByCountry' => $visitsByCountry, 'visitsByCountry' => $visitsByCountry,
'mostVisitedPages' => $mostVisitedPages, 'mostVisitedPages' => $mostVisitedPages,
'bestsReferrers' => $bestsReferrers,
'bestOrigins' => $bestOrigins,
'periods' => $periods, 'periods' => $periods,
'selectedPeriod' => $selectedPeriod, 'selectedPeriod' => $selectedPeriod,
]); ]);
......
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
<div class="row g-4"> <div class="row g-4">
<!-- Pages les plus visitées --> <!-- Pages les plus visitées -->
<div class="g-col-12"> <div class="g-col-12 mb-4">
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<h5 class="card-title">Pages les plus visitées</h5> <h5 class="card-title">Pages les plus visitées</h5>
...@@ -103,6 +103,66 @@ ...@@ -103,6 +103,66 @@
</div> </div>
</div> </div>
</div> </div>
<!-- Meilleurs referers -->
<div class="g-col-12 mb-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">
Referers (sites référents) les plus fréquents
</h5>
<div class="table-responsive">
<table class="table table-striped align-middle">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Referer</th>
<th scope="col">Nombre de visites</th>
</tr>
</thead>
<tbody>
@foreach ($bestsReferrers as $index => $referer)
<tr>
<th scope="row">{{ $index + 1 }}</th>
<td>{{ $referer['url'] }}</td>
<td>{{ $referer['count'] }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Meilleures origines -->
<div class="g-col-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">Origines les plus fréquentes</h5>
<div class="table-responsive">
<table class="table table-striped align-middle">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Origine</th>
<th scope="col">Nombre de visites</th>
</tr>
</thead>
<tbody>
@foreach ($bestOrigins as $index => $origin)
<tr>
<th scope="row">{{ $index + 1 }}</th>
<td>{{ $origin['url'] }}</td>
<td>{{ $origin['count'] }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
@vite('resources/js/pages/admin/home.js') @vite('resources/js/pages/admin/home.js')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment