git add .
git commit "feat: implement activity logging for tours and flights"
This commit is contained in:
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\ActivityLog;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ActivityLogController extends Controller
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$logs=ActivityLog::with('admin')
|
||||||
|
->latest()
|
||||||
|
->paginate(4);
|
||||||
|
|
||||||
|
return view('admin.activityLog.index',compact('logs'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,8 +20,16 @@ class DashboardController extends Controller
|
|||||||
|
|
||||||
$flightsCount = Flight::count();
|
$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',
|
return view('admin.dashboard',compact('adminsCount',
|
||||||
'usersCount','toursCount','flightsCount'
|
'usersCount','toursCount','flightsCount','tourViews'
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin;
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Admin\FlightStoreRequest;
|
use App\Http\Requests\Admin\FlightStoreRequest;
|
||||||
|
use App\Models\ActivityLog;
|
||||||
use App\Models\Flight;
|
use App\Models\Flight;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -48,8 +49,15 @@ class FlightController extends Controller
|
|||||||
|
|
||||||
$data['created_by'] = auth('admin')->id();
|
$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();
|
DB::commit();
|
||||||
|
|
||||||
@@ -107,6 +115,13 @@ class FlightController extends Controller
|
|||||||
|
|
||||||
$flight->update($data);
|
$flight->update($data);
|
||||||
|
|
||||||
|
ActivityLog::create([
|
||||||
|
'admin_id' => auth('admin')->id(),
|
||||||
|
'action' => 'update',
|
||||||
|
'model' => 'Flight',
|
||||||
|
'model_id' => $flight->id,
|
||||||
|
'description' => 'ویرایش اطلاعات پرواز',
|
||||||
|
]);
|
||||||
|
|
||||||
DB::commit();
|
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();
|
$flight->delete();
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin;
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\TourStoreRequest;
|
use App\Http\Requests\TourStoreRequest;
|
||||||
|
use App\Models\ActivityLog;
|
||||||
use App\Models\Tour;
|
use App\Models\Tour;
|
||||||
use App\Models\TravelType;
|
use App\Models\TravelType;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -50,7 +51,15 @@ class TourController extends Controller
|
|||||||
|
|
||||||
$data['created_by'] = auth('admin')->id();
|
$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();
|
DB::commit();
|
||||||
@@ -109,6 +118,14 @@ class TourController extends Controller
|
|||||||
|
|
||||||
$tour->update($data);
|
$tour->update($data);
|
||||||
|
|
||||||
|
ActivityLog::create([
|
||||||
|
'admin_id' => auth('admin')->id(),
|
||||||
|
'action' => 'create',
|
||||||
|
'model' => 'Tour',
|
||||||
|
'model_id' => $tour->id,
|
||||||
|
'description' => 'ویرایش تور',
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
DB::commit();
|
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();
|
$tour->delete();
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Reliese Model.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ActivityLog
|
||||||
|
*
|
||||||
|
* @property int $id
|
||||||
|
* @property int|null $admin_id
|
||||||
|
* @property string $action
|
||||||
|
* @property string $model
|
||||||
|
* @property int $model_id
|
||||||
|
* @property string|null $description
|
||||||
|
* @property Carbon|null $created_at
|
||||||
|
* @property Carbon|null $updated_at
|
||||||
|
*
|
||||||
|
* @package App\Models
|
||||||
|
*/
|
||||||
|
class ActivityLog extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'activity_logs';
|
||||||
|
public static $snakeAttributes = false;
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'admin_id' => 'int',
|
||||||
|
'model_id' => 'int'
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'admin_id',
|
||||||
|
'action',
|
||||||
|
'model',
|
||||||
|
'model_id',
|
||||||
|
'description'
|
||||||
|
];
|
||||||
|
|
||||||
|
public function admin()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Admin::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -103,4 +103,8 @@ class Admin extends User
|
|||||||
})
|
})
|
||||||
->exists();
|
->exists();
|
||||||
}
|
}
|
||||||
|
public function activityLogs()
|
||||||
|
{
|
||||||
|
return $this->hasMany(ActivityLog::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,182 @@
|
|||||||
|
@extends('admin.layouts.app')
|
||||||
|
|
||||||
|
@section('breadcrumb')
|
||||||
|
<span>
|
||||||
|
گزارش فعالیتها
|
||||||
|
</span>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container mt-4">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card shadow">
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
|
||||||
|
<h5 class="mb-4">
|
||||||
|
گزارش تغییرات سیستم
|
||||||
|
</h5>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
|
||||||
|
<table class="table table-bordered text-center align-middle">
|
||||||
|
|
||||||
|
|
||||||
|
<thead class="table-light">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
شناسه
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
کاربر
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
عملیات
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
بخش
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
شناسه مورد
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
توضیحات
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
تاریخ
|
||||||
|
</th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
|
||||||
|
|
||||||
|
@forelse($logs as $log)
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ $loop->iteration }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ $log->admin->name ?? '-' }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
@switch($log->action)
|
||||||
|
|
||||||
|
@case('create')
|
||||||
|
<span class="badge bg-success">
|
||||||
|
ایجاد
|
||||||
|
</span>
|
||||||
|
@break
|
||||||
|
|
||||||
|
|
||||||
|
@case('update')
|
||||||
|
<span class="badge bg-warning">
|
||||||
|
ویرایش
|
||||||
|
</span>
|
||||||
|
@break
|
||||||
|
|
||||||
|
|
||||||
|
@case('delete')
|
||||||
|
<span class="badge bg-danger">
|
||||||
|
حذف
|
||||||
|
</span>
|
||||||
|
@break
|
||||||
|
|
||||||
|
|
||||||
|
@default
|
||||||
|
{{ $log->action }}
|
||||||
|
|
||||||
|
@endswitch
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
@if($log->model == 'Flight')
|
||||||
|
|
||||||
|
پرواز
|
||||||
|
|
||||||
|
@elseif($log->model == 'Tour')
|
||||||
|
|
||||||
|
تور
|
||||||
|
|
||||||
|
@else
|
||||||
|
|
||||||
|
{{ $log->model }}
|
||||||
|
|
||||||
|
@endif
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ $log->model_id }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ $log->description }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ $log->created_at->toJalali()->format('Y/m/d H:i') }}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
@empty
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td colspan="7">
|
||||||
|
|
||||||
|
موردی یافت نشد
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
@endforelse
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ $logs->links() }}
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -70,6 +70,16 @@
|
|||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item mb-2">
|
||||||
|
|
||||||
|
<a href="{{ route('admin.activity-logs.index') }}"
|
||||||
|
class="nav-link text-white">
|
||||||
|
|
||||||
|
گزارش فعالیت ها
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
use App\Http\Controllers\Admin\ActivityLogController;
|
||||||
use App\Http\Controllers\Admin\AdminController;
|
use App\Http\Controllers\Admin\AdminController;
|
||||||
use App\Http\Controllers\Admin\Auth\AuthController;
|
use App\Http\Controllers\Admin\Auth\AuthController;
|
||||||
use App\Http\Controllers\Admin\Auth\DashboardController;
|
use App\Http\Controllers\Admin\Auth\DashboardController;
|
||||||
@@ -102,6 +103,8 @@ Route::prefix('admin')->name('admin.')->group(function (){
|
|||||||
Route::put('permissions', 'updatePermissions')->name('permissions.update');
|
Route::put('permissions', 'updatePermissions')->name('permissions.update');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Route::get('/activity-logs', [ActivityLogController::class, 'index'])
|
||||||
|
->name('activity-logs.index');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user