From 4d8839e802cab1f5618f918a72aa1439e2e76af1 Mon Sep 17 00:00:00 2001 From: hatame Date: Wed, 19 Aug 2026 14:59:26 +0330 Subject: [PATCH] git add . git commit "feat: implement activity logging for tours and flights" --- .../Admin/ActivityLogController.php | 20 ++ .../Admin/Auth/DashboardController.php | 10 +- .../Controllers/Admin/FlightController.php | 24 ++- app/Http/Controllers/Admin/TourController.php | 27 ++- app/Models/ActivityLog.php | 49 +++++ app/Models/Admin.php | 4 + .../views/admin/activityLog/index.blade.php | 182 ++++++++++++++++++ .../views/admin/layouts/sidebar.blade.php | 10 + routes/admin.php | 3 + 9 files changed, 326 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/Admin/ActivityLogController.php create mode 100644 app/Models/ActivityLog.php create mode 100644 resources/views/admin/activityLog/index.blade.php diff --git a/app/Http/Controllers/Admin/ActivityLogController.php b/app/Http/Controllers/Admin/ActivityLogController.php new file mode 100644 index 0000000..4e523b3 --- /dev/null +++ b/app/Http/Controllers/Admin/ActivityLogController.php @@ -0,0 +1,20 @@ +latest() + ->paginate(4); + + return view('admin.activityLog.index',compact('logs')); + } +} diff --git a/app/Http/Controllers/Admin/Auth/DashboardController.php b/app/Http/Controllers/Admin/Auth/DashboardController.php index 118797f..2ba1946 100644 --- a/app/Http/Controllers/Admin/Auth/DashboardController.php +++ b/app/Http/Controllers/Admin/Auth/DashboardController.php @@ -20,8 +20,16 @@ class DashboardController extends Controller $flightsCount = Flight::count(); + $tourViews= Tour::query() + ->selectRaw('DATE(create_at) as date,SUM(views) as total') + ->where('created_at','>=',now()->subDays(9)) + ->qroupBy('date') + ->orderBy('date') + ->get(); + + return view('admin.dashboard',compact('adminsCount', - 'usersCount','toursCount','flightsCount' + 'usersCount','toursCount','flightsCount','tourViews' )); } } diff --git a/app/Http/Controllers/Admin/FlightController.php b/app/Http/Controllers/Admin/FlightController.php index 4888114..50e6384 100644 --- a/app/Http/Controllers/Admin/FlightController.php +++ b/app/Http/Controllers/Admin/FlightController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\FlightStoreRequest; +use App\Models\ActivityLog; use App\Models\Flight; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -48,8 +49,15 @@ class FlightController extends Controller $data['created_by'] = auth('admin')->id(); - Flight::create($data); + $flight = Flight::create($data); + ActivityLog::create([ + 'admin_id' => auth('admin')->id(), + 'action' => 'create', + 'model' => 'Flight', + 'model_id' => $flight->id, + 'description' => 'ثبت پرواز جدید', + ]); DB::commit(); @@ -107,6 +115,13 @@ class FlightController extends Controller $flight->update($data); + ActivityLog::create([ + 'admin_id' => auth('admin')->id(), + 'action' => 'update', + 'model' => 'Flight', + 'model_id' => $flight->id, + 'description' => 'ویرایش اطلاعات پرواز', + ]); DB::commit(); @@ -136,6 +151,13 @@ class FlightController extends Controller } + ActivityLog::create([ + 'admin_id' => auth('admin')->id(), + 'action' => 'delete', + 'model' => 'Flight', + 'model_id' => $flight->id, + 'description' => 'حذف پرواز', + ]); $flight->delete(); diff --git a/app/Http/Controllers/Admin/TourController.php b/app/Http/Controllers/Admin/TourController.php index b5e6d70..a6dbbea 100644 --- a/app/Http/Controllers/Admin/TourController.php +++ b/app/Http/Controllers/Admin/TourController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\TourStoreRequest; +use App\Models\ActivityLog; use App\Models\Tour; use App\Models\TravelType; use Illuminate\Http\Request; @@ -50,7 +51,15 @@ class TourController extends Controller $data['created_by'] = auth('admin')->id(); - Tour::create($data); + $tour = Tour::create($data); + + ActivityLog::create([ + 'admin_id' => auth('admin')->id(), + 'action' => 'create', + 'model' => 'Tour', + 'model_id' => $tour->id, + 'description' => 'ثبت تور جدید', + ]); DB::commit(); @@ -109,6 +118,14 @@ class TourController extends Controller $tour->update($data); + ActivityLog::create([ + 'admin_id' => auth('admin')->id(), + 'action' => 'create', + 'model' => 'Tour', + 'model_id' => $tour->id, + 'description' => 'ویرایش تور', + ]); + DB::commit(); @@ -138,6 +155,14 @@ class TourController extends Controller } + ActivityLog::create([ + 'admin_id' => auth('admin')->id(), + 'action' => 'create', + 'model' => 'Tour', + 'model_id' => $tour->id, + 'description' => 'حذف تور', + ]); + $tour->delete(); diff --git a/app/Models/ActivityLog.php b/app/Models/ActivityLog.php new file mode 100644 index 0000000..9d693fb --- /dev/null +++ b/app/Models/ActivityLog.php @@ -0,0 +1,49 @@ + 'int', + 'model_id' => 'int' + ]; + + protected $fillable = [ + 'admin_id', + 'action', + 'model', + 'model_id', + 'description' + ]; + + public function admin() + { + return $this->belongsTo(Admin::class); + } + +} diff --git a/app/Models/Admin.php b/app/Models/Admin.php index 78c4aa6..96862ee 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -103,4 +103,8 @@ class Admin extends User }) ->exists(); } + public function activityLogs() + { + return $this->hasMany(ActivityLog::class); + } } diff --git a/resources/views/admin/activityLog/index.blade.php b/resources/views/admin/activityLog/index.blade.php new file mode 100644 index 0000000..56d66a8 --- /dev/null +++ b/resources/views/admin/activityLog/index.blade.php @@ -0,0 +1,182 @@ +@extends('admin.layouts.app') + +@section('breadcrumb') + + گزارش فعالیت‌ها + +@endsection + +@section('content') + +
+ + +
+ +
+ + +
+ گزارش تغییرات سیستم +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @forelse($logs as $log) + + + + + + + + + + + + + + + + + + + + + + + + @empty + + + + + + + + + @endforelse + + + + +
+ شناسه + + کاربر + + عملیات + + بخش + + شناسه مورد + + توضیحات + + تاریخ +
+ {{ $loop->iteration }} + + {{ $log->admin->name ?? '-' }} + + + @switch($log->action) + + @case('create') + + ایجاد + + @break + + + @case('update') + + ویرایش + + @break + + + @case('delete') + + حذف + + @break + + + @default + {{ $log->action }} + + @endswitch + + + + @if($log->model == 'Flight') + + پرواز + + @elseif($log->model == 'Tour') + + تور + + @else + + {{ $log->model }} + + @endif + + + {{ $log->model_id }} + + {{ $log->description }} + + {{ $log->created_at->toJalali()->format('Y/m/d H:i') }} +
+ + موردی یافت نشد + +
+ +
+ + {{ $logs->links() }} + + +
+ +
+ + +
+ +@endsection diff --git a/resources/views/admin/layouts/sidebar.blade.php b/resources/views/admin/layouts/sidebar.blade.php index 27e421b..96aa3ac 100644 --- a/resources/views/admin/layouts/sidebar.blade.php +++ b/resources/views/admin/layouts/sidebar.blade.php @@ -70,6 +70,16 @@ + + diff --git a/routes/admin.php b/routes/admin.php index b272e07..350b062 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -1,6 +1,7 @@ name('admin.')->group(function (){ Route::put('permissions', 'updatePermissions')->name('permissions.update'); }); }); + Route::get('/activity-logs', [ActivityLogController::class, 'index']) + ->name('activity-logs.index'); }); });