diff --git a/app/Http/Controllers/Admin/HomeController.php b/app/Http/Controllers/Admin/HomeController.php index 527b6218fa3a3562ae24be47644489a200ff1070..6c119307d9c3c4fd5631c82e04315cb4acaa8e4f 100644 --- a/app/Http/Controllers/Admin/HomeController.php +++ b/app/Http/Controllers/Admin/HomeController.php @@ -30,12 +30,18 @@ public function index(Request $request): View $visits = LoggedRequest::select([ 'logged_requests.url_id', + 'logged_requests.referer_url_id', + 'logged_requests.origin_url_id', 'logged_requests.ip_address_id', 'ip_address_metadata.country_code', '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') ->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('ip_address_metadata', 'logged_requests.ip_address_id', '=', 'ip_address_metadata.ip_address_id') ->whereLike('urls.url', config('app.url').'%') @@ -89,6 +95,20 @@ public function index(Request $request): View ->sortByDesc('count') ->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', [ 'totalVisitsPastTwentyFourHours' => $totalVisitsPastTwentyFourHours, 'totalVisitsPastSevenDays' => $totalVisitsPastSevenDays, @@ -97,6 +117,8 @@ public function index(Request $request): View 'visitsPerDay' => $visitsPerDay, 'visitsByCountry' => $visitsByCountry, 'mostVisitedPages' => $mostVisitedPages, + 'bestsReferrers' => $bestsReferrers, + 'bestOrigins' => $bestOrigins, 'periods' => $periods, 'selectedPeriod' => $selectedPeriod, ]); diff --git a/resources/views/admin/home.blade.php b/resources/views/admin/home.blade.php index 2ecf3e23d8592b7dd83e41a2ac5cabb1299f823e..65c1ae2470c0d1fe13d53c426d84be4666f88b76 100644 --- a/resources/views/admin/home.blade.php +++ b/resources/views/admin/home.blade.php @@ -76,7 +76,7 @@ <div class="row g-4"> <!-- Pages les plus visitées --> - <div class="g-col-12"> + <div class="g-col-12 mb-4"> <div class="card"> <div class="card-body"> <h5 class="card-title">Pages les plus visitées</h5> @@ -103,6 +103,66 @@ </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> @vite('resources/js/pages/admin/home.js')