feat:add final changes
This commit is contained in:
@@ -151,24 +151,24 @@ class AdminController extends Controller
|
|||||||
'admin_id' => $admin->id,
|
'admin_id' => $admin->id,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
// مدیران
|
|
||||||
'admin_view' => $request->boolean('admin_view'),
|
'admin_view' => $request->boolean('admin_view'),
|
||||||
'admin_create' => $request->boolean('admin_create'),
|
'admin_create' => $request->boolean('admin_create'),
|
||||||
'admin_edit' => $request->boolean('admin_edit'),
|
'admin_edit' => $request->boolean('admin_edit'),
|
||||||
'admin_delete' => $request->boolean('admin_delete'),
|
'admin_delete' => $request->boolean('admin_delete'),
|
||||||
|
|
||||||
// کاربران
|
|
||||||
'user_view' => $request->boolean('user_view'),
|
'user_view' => $request->boolean('user_view'),
|
||||||
'user_edit' => $request->boolean('user_edit'),
|
'user_edit' => $request->boolean('user_edit'),
|
||||||
'user_delete' => $request->boolean('user_delete'),
|
'user_delete' => $request->boolean('user_delete'),
|
||||||
|
|
||||||
// تورها
|
|
||||||
'tour_view' => $request->boolean('tour_view'),
|
'tour_view' => $request->boolean('tour_view'),
|
||||||
'tour_create' => $request->boolean('tour_create'),
|
'tour_create' => $request->boolean('tour_create'),
|
||||||
'tour_edit' => $request->boolean('tour_edit'),
|
'tour_edit' => $request->boolean('tour_edit'),
|
||||||
'tour_delete' => $request->boolean('tour_delete'),
|
'tour_delete' => $request->boolean('tour_delete'),
|
||||||
|
|
||||||
// پروازها
|
|
||||||
'flight_view' => $request->boolean('flight_view'),
|
'flight_view' => $request->boolean('flight_view'),
|
||||||
'flight_create' => $request->boolean('flight_create'),
|
'flight_create' => $request->boolean('flight_create'),
|
||||||
'flight_edit' => $request->boolean('flight_edit'),
|
'flight_edit' => $request->boolean('flight_edit'),
|
||||||
|
|||||||
@@ -164,7 +164,6 @@ class FlightController extends Controller
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// 1. ذخیره عکس
|
|
||||||
$image = $request->file('image');
|
$image = $request->file('image');
|
||||||
|
|
||||||
$imageName = time()
|
$imageName = time()
|
||||||
@@ -179,7 +178,6 @@ class FlightController extends Controller
|
|||||||
'public'
|
'public'
|
||||||
);
|
);
|
||||||
|
|
||||||
// 2. ایجاد رکورد فایل
|
|
||||||
$file = File::create([
|
$file = File::create([
|
||||||
'name' => $imageName,
|
'name' => $imageName,
|
||||||
'size' => $image->getSize(),
|
'size' => $image->getSize(),
|
||||||
@@ -188,7 +186,6 @@ class FlightController extends Controller
|
|||||||
'extension' => $image->extension(),
|
'extension' => $image->extension(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 3. ایجاد پرواز با file_id
|
|
||||||
$flight = Flight::create([
|
$flight = Flight::create([
|
||||||
'file_id' => $file->id,
|
'file_id' => $file->id,
|
||||||
'arrival_aiport_id' => $request->arrival_aiport_id,
|
'arrival_aiport_id' => $request->arrival_aiport_id,
|
||||||
@@ -204,6 +201,9 @@ class FlightController extends Controller
|
|||||||
'status' => $request->status,
|
'status' => $request->status,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// ثبت لاگ ایجاد پرواز
|
||||||
|
logActivity($flight, 'created');
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
} catch (Exception $exception) {
|
} catch (Exception $exception) {
|
||||||
@@ -232,7 +232,6 @@ class FlightController extends Controller
|
|||||||
|
|
||||||
$oldFile = $flight->file;
|
$oldFile = $flight->file;
|
||||||
|
|
||||||
// اطلاعات پرواز
|
|
||||||
$flight->update([
|
$flight->update([
|
||||||
'arrival_aiport_id' => $request->arrival_aiport_id,
|
'arrival_aiport_id' => $request->arrival_aiport_id,
|
||||||
'departure_airport_id' => $request->departure_airport_id,
|
'departure_airport_id' => $request->departure_airport_id,
|
||||||
@@ -246,16 +245,16 @@ class FlightController extends Controller
|
|||||||
'status' => $request->status,
|
'status' => $request->status,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// ثبت لاگ ویرایش پرواز (باید بلافاصله بعد از update صدا زده شود)
|
||||||
|
logActivity($flight, 'updated');
|
||||||
|
|
||||||
|
|
||||||
// اگر عکس جدید انتخاب شده
|
|
||||||
if ($request->hasFile('image')) {
|
if ($request->hasFile('image')) {
|
||||||
|
|
||||||
$image = $request->file('image');
|
$image = $request->file('image');
|
||||||
|
|
||||||
// ذخیره عکس جدید
|
|
||||||
$path = $image->store('flights', 'public');
|
$path = $image->store('flights', 'public');
|
||||||
|
|
||||||
// ایجاد رکورد فایل جدید
|
|
||||||
$newFile = File::create([
|
$newFile = File::create([
|
||||||
'name' => pathinfo(
|
'name' => pathinfo(
|
||||||
$image->hashName(),
|
$image->hashName(),
|
||||||
@@ -267,15 +266,13 @@ class FlightController extends Controller
|
|||||||
'path' => $path,
|
'path' => $path,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// اتصال پرواز به فایل جدید
|
|
||||||
$flight->update([
|
$flight->update([
|
||||||
'file_id' => $newFile->id,
|
'file_id' => $newFile->id,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// ثبت لاگ تغییر عکس (بهصورت جدا، چون update دومیه)
|
||||||
|
logActivity($flight, 'updated');
|
||||||
|
|
||||||
// حذف فقط فایل فیزیکی قبلی
|
|
||||||
// رکورد files قبلی را حذف نمیکنیم
|
|
||||||
// چون FK روی flights.file_id وجود دارد.
|
|
||||||
if ($oldFile) {
|
if ($oldFile) {
|
||||||
|
|
||||||
if (Storage::disk('public')->exists($oldFile->path)) {
|
if (Storage::disk('public')->exists($oldFile->path)) {
|
||||||
@@ -324,15 +321,5 @@ class FlightController extends Controller
|
|||||||
->with('success', 'پرواز با موفقیت حذف شد.');
|
->with('success', 'پرواز با موفقیت حذف شد.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function logs(Flight $flight)
|
|
||||||
{
|
|
||||||
$logs = ActivityLog::query()
|
|
||||||
->where('model_type', Flight::class)
|
|
||||||
->where('model_id', $flight->id)
|
|
||||||
->with('admin')
|
|
||||||
->orderByDesc('created_at')
|
|
||||||
->paginate(20);
|
|
||||||
|
|
||||||
return view('admin.flights.logs', compact('flight', 'logs'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ class TourController extends Controller
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// فیلتر وضعیت
|
|
||||||
->when($request->filled('status'), function (Builder $query) use ($request) {
|
->when($request->filled('status'), function (Builder $query) use ($request) {
|
||||||
|
|
||||||
$query->where(
|
$query->where(
|
||||||
@@ -69,7 +68,6 @@ class TourController extends Controller
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// ذخیره تصویر
|
|
||||||
$image = $request->file('image');
|
$image = $request->file('image');
|
||||||
|
|
||||||
$path = $image->store('tours', 'public');
|
$path = $image->store('tours', 'public');
|
||||||
@@ -85,8 +83,6 @@ class TourController extends Controller
|
|||||||
'path' => $path,
|
'path' => $path,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
// ایجاد تور
|
|
||||||
$tour = Tour::create([
|
$tour = Tour::create([
|
||||||
'title' => $request->title,
|
'title' => $request->title,
|
||||||
'summary' => $request->input('summary') ?? '',
|
'summary' => $request->input('summary') ?? '',
|
||||||
@@ -102,8 +98,6 @@ class TourController extends Controller
|
|||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
// ایجاد تاریخ تور
|
|
||||||
TourDate::create([
|
TourDate::create([
|
||||||
'tour_id' => $tour->id,
|
'tour_id' => $tour->id,
|
||||||
'start_date' => $request->start_date,
|
'start_date' => $request->start_date,
|
||||||
@@ -170,11 +164,9 @@ class TourController extends Controller
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// فایل قبلی
|
|
||||||
$fileId = $tour->file_id;
|
$fileId = $tour->file_id;
|
||||||
|
|
||||||
|
|
||||||
// اگر عکس جدید انتخاب شده باشد
|
|
||||||
if ($request->hasFile('image')) {
|
if ($request->hasFile('image')) {
|
||||||
|
|
||||||
$image = $request->file('image');
|
$image = $request->file('image');
|
||||||
@@ -195,8 +187,6 @@ class TourController extends Controller
|
|||||||
$fileId = $file->id;
|
$fileId = $file->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ویرایش اطلاعات تور
|
|
||||||
$tour->update([
|
$tour->update([
|
||||||
'title' => $request->title,
|
'title' => $request->title,
|
||||||
'summary' => $request->input('summary') ?? '',
|
'summary' => $request->input('summary') ?? '',
|
||||||
@@ -209,11 +199,8 @@ class TourController extends Controller
|
|||||||
'status' => $request->status,
|
'status' => $request->status,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
// تاریخ تور
|
|
||||||
$tourDate = $tour->tourDates()->first();
|
$tourDate = $tour->tourDates()->first();
|
||||||
|
|
||||||
|
|
||||||
if ($tourDate) {
|
if ($tourDate) {
|
||||||
|
|
||||||
$tourDate->update([
|
$tourDate->update([
|
||||||
@@ -226,7 +213,6 @@ class TourController extends Controller
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// اگر تور تاریخ نداشت، یک تاریخ جدید ایجاد شود
|
|
||||||
$tour->tourDates()->create([
|
$tour->tourDates()->create([
|
||||||
'start_date' => $request->start_date,
|
'start_date' => $request->start_date,
|
||||||
'end_date' => $request->end_date,
|
'end_date' => $request->end_date,
|
||||||
@@ -277,15 +263,5 @@ class TourController extends Controller
|
|||||||
->with('success', 'تور با موفقیت حذف شد.');
|
->with('success', 'تور با موفقیت حذف شد.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function logs(Tour $tour)
|
|
||||||
{
|
|
||||||
$logs = ActivityLog::query()
|
|
||||||
->where('model_type', Tour::class)
|
|
||||||
->where('model_id', $tour->id)
|
|
||||||
->with('admin')
|
|
||||||
->orderByDesc('created_at')
|
|
||||||
->paginate(20);
|
|
||||||
|
|
||||||
return view('admin.tours.logs', compact('tour', 'logs'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
{{-- اطلاعات مدیر --}}
|
|
||||||
<div class="card custom-card">
|
<div class="card custom-card">
|
||||||
|
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
@@ -46,7 +45,6 @@
|
|||||||
|
|
||||||
<div class="row gy-3">
|
<div class="row gy-3">
|
||||||
|
|
||||||
{{-- نام --}}
|
|
||||||
<div class="col-xl-6 col-lg-6">
|
<div class="col-xl-6 col-lg-6">
|
||||||
<label class="form-label">نام</label>
|
<label class="form-label">نام</label>
|
||||||
|
|
||||||
@@ -66,7 +64,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{{-- نام خانوادگی --}}
|
|
||||||
<div class="col-xl-6 col-lg-6">
|
<div class="col-xl-6 col-lg-6">
|
||||||
<label class="form-label">نام خانوادگی</label>
|
<label class="form-label">نام خانوادگی</label>
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,19 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<!-- End::slide -->
|
<!-- End::slide -->
|
||||||
|
<li class="slide ">
|
||||||
|
<a href="{{route('admin.activity-logs.index')}}"
|
||||||
|
class="side-menu__item {{ activeAccountSidebar('admin.activity-logs.index') }}">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="side-menu__icon" width="1em"
|
||||||
|
height="1em" viewBox="0 0 24 24">
|
||||||
|
<path fill="none" stroke="currentColor" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" stroke-width="1.5"
|
||||||
|
d="M13 2h-2C7.229 2 5.343 2 4.172 3.172S3 6.229 3 10v4c0 3.771 0 5.657 1.172 6.828S7.229 22 11 22h2c3.771 0 5.657 0 6.828-1.172S21 17.771 21 14v-4c0-3.771 0-5.657-1.172-6.828S16.771 2 13 2m8 10H3m12-5H9m6 10H9"
|
||||||
|
color="currentColor"></path>
|
||||||
|
</svg>
|
||||||
|
<span class="side-menu__label">ثبت تغییرات</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<div class="slide-right d-none" id="slide-right">
|
<div class="slide-right d-none" id="slide-right">
|
||||||
|
|||||||
Reference in New Issue
Block a user