From f0331152eaebaac7e8a337ce61d8f4e76d3bf82c Mon Sep 17 00:00:00 2001 From: Admin Date: Thu, 20 Aug 2026 12:44:04 -0700 Subject: [PATCH] feat: implement site visit in controller and add visit table --- .../Controllers/Admin/DashboardController.php | 24 +++- .../Controllers/Admin/FlightController.php | 1 - app/Http/Controllers/IndexController.php | 13 +- app/Models/Flight.php | 5 +- app/Models/Tour.php | 5 +- app/Models/Visit.php | 34 +++++ resources/views/admin/dashboard.blade.php | 102 +++++++++++-- resources/views/admin/flights/index.blade.php | 6 +- resources/views/admin/layouts/app.blade.php | 2 +- resources/views/components/flight.blade.php | 135 +++++++++++++++--- resources/views/components/tour.blade.php | 69 +++++++-- 11 files changed, 344 insertions(+), 52 deletions(-) create mode 100644 app/Models/Visit.php diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php index b2c1d2e..b981c14 100644 --- a/app/Http/Controllers/Admin/DashboardController.php +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -6,15 +6,31 @@ use App\Http\Controllers\Controller; use App\Models\Booking; use App\Models\Flight; use App\Models\User; +use App\Models\Visit; +use Carbon\Carbon; class DashboardController extends Controller { public function index() { - $flightsCount = Flight::count(); - $usersCount = User::count(); - $bookingsCount = Booking::count(); - return view('admin.dashboard', compact('flightsCount', 'usersCount', 'bookingsCount')); + $startDate = Carbon::now()->subDays(9)->startOfDay(); + $endDate = Carbon::now()->endOfDay(); + + + $flightsCount = Flight::count(); + $usersCount = User::count(); + $bookingsCount = Booking::count(); + $indexPageCont = Visit::count(); + + $visits = Visit::whereBetween('created_at', [$startDate, $endDate]) + ->selectRaw('DATE(created_at) as visit_date, COUNT(*) as total') + ->groupBy('visit_date') + ->orderBy('visit_date') + ->get(); + + + return view('admin.dashboard', compact('flightsCount', 'usersCount', + 'bookingsCount', 'indexPageCont' , 'visits')); } } diff --git a/app/Http/Controllers/Admin/FlightController.php b/app/Http/Controllers/Admin/FlightController.php index c169cbb..3d03c87 100644 --- a/app/Http/Controllers/Admin/FlightController.php +++ b/app/Http/Controllers/Admin/FlightController.php @@ -288,7 +288,6 @@ class FlightController extends Controller 'status' => [ 'required', - 'in:0,1', ], ]); diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index 4be916b..a0b4dfb 100644 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -5,13 +5,24 @@ namespace App\Http\Controllers; use App\Models\Airport; use App\Models\Flight; use App\Models\Tour; +use App\Models\Visit; use Illuminate\Http\Request; class IndexController extends Controller { - public function index() + public function index(Request $request) { + if (! $request->session()->has('visited')) { + Visit::create([ + 'ip_address' => $request->ip(), + 'url' => $request->fullUrl(), + 'user_agent' => $request->userAgent(), + ]); + + $request->session()->put('visited', true); + } + $flights = Flight::query() ->where('status', \App\Enums\FlightStatus::ENABLE) ->with([ diff --git a/app/Models/Flight.php b/app/Models/Flight.php index 69f9d49..269c549 100644 --- a/app/Models/Flight.php +++ b/app/Models/Flight.php @@ -6,6 +6,7 @@ namespace App\Models; +use App\Enums\FlightStatus; use Carbon\Carbon; use Illuminate\Database\Eloquent\Attributes\Scope; use Illuminate\Database\Eloquent\Builder; @@ -52,8 +53,8 @@ class Flight extends Model 'price' => 'float', 'capacity' => 'int', 'views' => 'int', - 'status' => 'int' - ]; + 'status' => FlightStatus::class + ]; protected $fillable = [ 'title', diff --git a/app/Models/Tour.php b/app/Models/Tour.php index d8e0b58..b8a247d 100644 --- a/app/Models/Tour.php +++ b/app/Models/Tour.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Enums\TourStatus; use Carbon\Carbon; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; @@ -15,7 +16,8 @@ class Tour extends Model 'duration' => 'int', 'views' => 'int', 'price' => 'int', - 'status' => 'int', + 'status' => TourStatus::class, + 'departure_time'=> 'datetime', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; @@ -30,6 +32,7 @@ class Tour extends Model 'duration', 'views', 'price', + 'departure_time', 'status', 'created_at', ]; diff --git a/app/Models/Visit.php b/app/Models/Visit.php new file mode 100644 index 0000000..dc735bc --- /dev/null +++ b/app/Models/Visit.php @@ -0,0 +1,34 @@ + - {{-- تعداد پروازها --}} -
+
+ +
+ +
+ +
+ +
+ + + +
+ +
+ +
+ بازدید کل سایت +
+ +
+ {{ $indexPageCont }} +
+ +
+ + کل بازدیدها + +
+ +
+ +
+ +
+ +
+ +
+ +
@@ -64,9 +102,7 @@
- - {{-- تعداد کاربران --}} -
+
@@ -106,9 +142,7 @@
- - {{-- تعداد رزروها --}} -
+
@@ -150,9 +184,57 @@
+
+ +
+ +
+ +
+
+ نمودار بازدید سایت (۱۰ روز اخیر) +
+
+ +
+ +
+ +
+ +
+ +
+
+ + + @endsection -``` + diff --git a/resources/views/admin/flights/index.blade.php b/resources/views/admin/flights/index.blade.php index 099d794..a74446f 100644 --- a/resources/views/admin/flights/index.blade.php +++ b/resources/views/admin/flights/index.blade.php @@ -25,7 +25,7 @@ {{ $message }} @enderror - @error('errors') + @error('error') {{ $message }} @enderror
@@ -236,11 +236,11 @@ - @if(\App\Enums\FlightStatus::ENABLE) + @if($flight->status == \App\Enums\FlightStatus::ENABLE) فعال - @elseif(\App\Enums\FlightStatus::DISABLE) + @elseif($flight->status == \App\Enums\FlightStatus::DISABLE ) غیرفعال diff --git a/resources/views/admin/layouts/app.blade.php b/resources/views/admin/layouts/app.blade.php index 0671bcd..3ce703f 100644 --- a/resources/views/admin/layouts/app.blade.php +++ b/resources/views/admin/layouts/app.blade.php @@ -8,7 +8,7 @@ data-menu-styles="light" dir="rtl" loader="enable" - data-vertical-style="overlay"> + data-vertical-style="default"> diff --git a/resources/views/components/flight.blade.php b/resources/views/components/flight.blade.php index e98269d..46adfef 100644 --- a/resources/views/components/flight.blade.php +++ b/resources/views/components/flight.blade.php @@ -1,45 +1,140 @@ +
+
- @if(getFileUrl($flight->file_id)) - {{ $flight->title }} + + @if($flight?->file_id) + {{ $flight->title }} @else - + {{ $flight->title }} @endif - + +
+
+
+ -

{{ $flight->departure_time->toJalali()->format('Y/m/d H:i') }} + +

+ + {{ $flight->departure_time->toJalali()->format('Y/m/d H:i') }}

+
+
+
- از {{ number_format($flight->price) }} تومان + از + + {{ number_format($flight->price) }} تومان +
+ +
+
+
+ diff --git a/resources/views/components/tour.blade.php b/resources/views/components/tour.blade.php index a811765..ab602cd 100644 --- a/resources/views/components/tour.blade.php +++ b/resources/views/components/tour.blade.php @@ -1,18 +1,69 @@ + +
- {{ $tour->title }} + @if(getFileUrl($tour?->file?->id)) + {{ $tour->title }} + @else + + @endif + 'type' => 'tour', + 'id' => $tour->id + ]) }}" class="add-wishlist">