diff --git a/app/Http/Controllers/admin/TourController.php b/app/Http/Controllers/admin/TourController.php
index cbe4042..5a7bb34 100644
--- a/app/Http/Controllers/admin/TourController.php
+++ b/app/Http/Controllers/admin/TourController.php
@@ -5,43 +5,72 @@ namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\TourStoreRequest;
use App\Models\Tour;
+use App\Models\TravelType;
use Illuminate\Http\Request;
class TourController extends Controller
{
public function index()
{
- $tour = Tour::latest()->paginate(10);
- return view('admin.tours.index', compact($tour));
- }
+ $tours = Tour::latest()->paginate(10);
+ return view('admin.tours.index', compact('tours'));
+ }
- public function create()
+ public function create()
{
return view('admin.tours.create');
- }
+ }
- public function store(TourStoreRequest $request)
+ public function store(TourStoreRequest $request)
{
- Tour::create($request->validated());
+// Tour::create($request->validated());
+
+
+ $tour = Tour::create($request->only([
+ 'travel_type_id', 'title', 'slug', 'description',
+ 'start_date', 'end_date', 'price', 'capacity', 'status'
+ ]));
+
+ $this->uploadImages($tour, $request->file('images'));
return view('admin.tours.index')
->with('success', 'تور با موفقیت ایجاد شد.');
- }
+ }
+
public function show(Tour $tour)
{
return view('admin.tours.show', compact('tour'));
}
+
public function edit(Tour $tour)
{
- return view('admin.tours.edit', compact('tour'));
+ $travelTypes = TravelType::all();
+ return view('admin.tours.edit', compact('tour', 'travelTypes'));
}
+
public function update(TourStoreRequest $request, Tour $tour)
{
$tour->update($request->validated());
+
+ // ذخیره فایل و گرفتن مسیر (بدون پسوند)
+ $path = $request->file('image')->store('photos', 'public');
+
+ $extension = $request->file('image')->getClientOriginalExtension();
+
+// ایجاد رکورد
+ $tour->files()->create([
+ 'name' => $path,
+ 'extension' => $extension,
+ 'size' => $request->file('image')->getSize(),
+ 'original_name' => $request->file('image')->getClientOriginalName(),
+ ]);
+
+
return redirect()->route('admin.tours.index')
->with('success', 'تور با موفقیت بهروزرسانی شد.');
}
+
public function destroy(Tour $tour)
{
$tour->delete();
@@ -50,7 +79,7 @@ class TourController extends Controller
->with('success', 'تور با موفقیت حذف شد.');
}
- public function removeImage(Tour $tour, $image)
+ public function removeImage(Tour $tour, $image)
{
// منطق حذف تصویر — بسته به جدول تصاویر
return back()->with('success', 'تصویر حذف شد.');
diff --git a/app/Http/Requests/TourStoreRequest.php b/app/Http/Requests/TourStoreRequest.php
index 8673ff1..0ee6785 100644
--- a/app/Http/Requests/TourStoreRequest.php
+++ b/app/Http/Requests/TourStoreRequest.php
@@ -74,6 +74,18 @@ class TourStoreRequest extends FormRequest
'required',
'integer',
'min:0'],
+ 'images' =>
+ [
+ 'required',
+ 'array'
+ ],
+ 'images.*' =>
+ [
+ 'image',
+ 'mimes:jpeg,png,jpg,webp',
+ 'max:2048'
+ ],
+
'status' =>
[
'nullable',
diff --git a/app/Models/Tour.php b/app/Models/Tour.php
index 28dcd21..d8e774b 100644
--- a/app/Models/Tour.php
+++ b/app/Models/Tour.php
@@ -38,12 +38,17 @@ class Tour extends Model
public static $snakeAttributes = false;
protected $casts = [
- 'travel_type_id' => 'int',
- 'start_date' => 'datetime',
- 'end_date' => 'datetime',
- 'price' => 'float',
- 'capacity' => 'int',
- 'status' => 'int'
+ 'start_date' => 'date',
+ 'end_date' => 'date',
+ 'price' => 'decimal:2',
+ 'status' => 'integer',
+
+// 'travel_type_id' => 'int',
+// 'start_date' => 'datetime',
+// 'end_date' => 'datetime',
+// 'price' => 'float',
+// 'capacity' => 'int',
+// 'status' => 'int'
];
protected $fillable = [
@@ -56,7 +61,8 @@ class Tour extends Model
'end_date',
'price',
'capacity',
- 'status'
+ 'status',
+ 'image',
];
public function travelType()
@@ -93,5 +99,10 @@ class Tour extends Model
return 'slug';
}
+ public function getStatusLabelAttribute()
+ {
+ return $this->status == 1 ? 'فعال' : 'پیشنویس';
+ }
+
}
diff --git a/resources/views/admin/tours/create.blade.php b/resources/views/admin/tours/create.blade.php
index 6072aca..e0547e3 100644
--- a/resources/views/admin/tours/create.blade.php
+++ b/resources/views/admin/tours/create.blade.php
@@ -1,3 +1,62 @@
-
-
-
+@extends('admin.layouts.app')
+
+@section('content')
+
+@endsection
+
diff --git a/resources/views/admin/tours/edit.blade.php b/resources/views/admin/tours/edit.blade.php
index 6710885..ff8da3a 100644
--- a/resources/views/admin/tours/edit.blade.php
+++ b/resources/views/admin/tours/edit.blade.php
@@ -1,3 +1,86 @@
-
-
-
+@extends('admin.layouts.app')
+
+@section('content')
+
+
+
ویرایش تور: {{ $tour->title }}
+
بازگشت
+
+
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ - {{ $error }}
+ @endforeach
+
+
+ @endif
+
+
+
+
+
+
+
+@endsection
diff --git a/resources/views/admin/tours/index.blade.php b/resources/views/admin/tours/index.blade.php
index 0b6c400..b3dcc29 100644
--- a/resources/views/admin/tours/index.blade.php
+++ b/resources/views/admin/tours/index.blade.php
@@ -1,3 +1,61 @@
-
-
-
+@extends('admin.layouts.app') {{-- فرض بر وجود لایوت ادمین --}}
+
+@section('content')
+
+
+
مدیریت تورها
+
افزودن تور جدید
+
+
+ @if(session('success'))
+
{{ session('success') }}
+ @endif
+
+
+
+
+
+
+ | تصویر |
+ عنوان تور |
+ قیمت (تومان) |
+ عملیات |
+
+
+
+ @forelse($tours as $tour)
+
+
+
+ |
+ {{ $tour->title }} |
+ {{ number_format($tour->price) }} |
+
+
+ |
+
+ @empty
+
+ | هیچ توری یافت نشد. |
+
+ @endforelse
+
+
+
+ {{-- بخش بسیار مهم برای آزمون: نمایش لینکهای صفحهبندی --}}
+
+ {{ $tours->links() }}
+
+
+
+
+@endsection
diff --git a/resources/views/admin/tours/show.blade.php b/resources/views/admin/tours/show.blade.php
index 404fad5..7e19e79 100644
--- a/resources/views/admin/tours/show.blade.php
+++ b/resources/views/admin/tours/show.blade.php
@@ -1,3 +1,80 @@
-
-
-
+@extends('admin.layouts.app')
+
+@section('title', 'جزئیات تور')
+
+@section('content')
+ {{-- هدر صفحه --}}
+
+
+ {{-- کارت اطلاعات --}}
+
+
+
+
+
+
+ | عنوان |
+ {{ $tour->title }} |
+
+
+ | مبدا |
+ {{ $tour->origin }} |
+
+
+ | مقصد |
+ {{ $tour->destination }} |
+
+
+ | تاریخ شروع |
+ {{ \Carbon\Carbon::parse($tour->start_date)->format('Y/m/d') }} |
+
+
+ | تاریخ پایان |
+ {{ \Carbon\Carbon::parse($tour->end_date)->format('Y/m/d') }} |
+
+
+ | قیمت |
+ {{ number_format($tour->price) }} تومان |
+
+
+ | ظرفیت |
+ {{ $tour->capacity }} نفر |
+
+
+ | وضعیت |
+
+ @if($tour->status == 0)
+ غیرفعال
+ @elseif($tour->status == 1)
+ فعال / پیشنویس
+ @elseif($tour->status == 2)
+ منتشرشده
+ @else
+ نامشخص
+ @endif
+ |
+
+
+ | توضیحات |
+ {!! nl2br(e($tour->description)) !!} |
+
+
+
+
+
+@endsection