Files
2026-08-22 15:15:01 +03:30

231 lines
6.7 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\AdminStoreRequest;
use App\Http\Requests\Admin\AdminUpdateRequest;
use App\Models\Admin;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
class AdminController extends Controller
{
public function index(Request $request)
{
$admins = Admin::query()
->when($request->filled('search'), function (Builder $query) use ($request) {
$search = $request->input('search');
$query->whereAny([
'first_name',
'last_name',
'username',
'id',
'status',
'email',
'created_at'
], 'LIKE', "%$search%");
})
->when($request->filled('sort'), function (Builder $query) use ($request) {
switch ($request->input('sort')) {
case 'newest':
$query->orderByDesc('created_at');
break;
case 'email':
$query->orderBy('email');
break;
case 'name_desc':
$query
->orderByDesc('first_name')
->orderByDesc('last_name');
break;
default:
$query
->orderBy('first_name')
->orderBy('last_name');
break;
}
})
->paginate();
return view('admin.admins.index', compact('admins'));
}
public function create()
{
return view('admin.admins.create');
}
public function store(AdminStoreRequest $request)
{
$inputs = $request->validated();
try {
DB::beginTransaction();
$inputs['password'] = Hash::make($inputs['password']);
$admin = Admin::create($inputs);
$admin->permission()->create([
'admin_view' => $request->boolean('admin_view'),
'admin_create' => $request->boolean('admin_create'),
'admin_edit' => $request->boolean('admin_edit'),
'admin_delete' => $request->boolean('admin_delete'),
'user_view' => $request->boolean('user_view'),
'user_edit' => $request->boolean('user_edit'),
'user_delete' => $request->boolean('user_delete'),
'tour_view' => $request->boolean('tour_view'),
'tour_create' => $request->boolean('tour_create'),
'tour_edit' => $request->boolean('tour_edit'),
'tour_delete' => $request->boolean('tour_delete'),
'flight_view' => $request->boolean('flight_view'),
'flight_create' => $request->boolean('flight_create'),
'flight_edit' => $request->boolean('flight_edit'),
'flight_delete' => $request->boolean('flight_delete'),
]);
DB::commit();
} catch (\Exception $exception) {
DB::rollBack();
Log::error($exception);
return back()
->withErrors([
'general' => 'خطایی رخ داده است'
])
->withInput();
}
return redirect()
->route('admin.admins.index')
->with('success', 'مدیر با موفقیت ایجاد شد.');
}
public function edit(Admin $admin)
{
$adminPermission = $admin->permission;
return view('admin.admins.edit', compact(
'admin',
'adminPermission'
));
}
public function update(AdminUpdateRequest $request, Admin $admin)
{
$inputs = $request->validated();
try {
DB::beginTransaction();
if (!empty($inputs['password'])) {
$inputs['password'] = Hash::make($inputs['password']);
} else {
unset($inputs['password']);
}
$admin->update($inputs);
$admin->permission()->updateOrCreate(
[
'admin_id' => $admin->id,
],
[
'admin_view' => $request->boolean('admin_view'),
'admin_create' => $request->boolean('admin_create'),
'admin_edit' => $request->boolean('admin_edit'),
'admin_delete' => $request->boolean('admin_delete'),
'user_view' => $request->boolean('user_view'),
'user_edit' => $request->boolean('user_edit'),
'user_delete' => $request->boolean('user_delete'),
'tour_view' => $request->boolean('tour_view'),
'tour_create' => $request->boolean('tour_create'),
'tour_edit' => $request->boolean('tour_edit'),
'tour_delete' => $request->boolean('tour_delete'),
'flight_view' => $request->boolean('flight_view'),
'flight_create' => $request->boolean('flight_create'),
'flight_edit' => $request->boolean('flight_edit'),
'flight_delete' => $request->boolean('flight_delete'),
]
);
DB::commit();
} catch (\Exception $exception) {
DB::rollBack();
Log::error($exception);
return back()
->withErrors([
'general' => 'خطایی رخ داده است'
])
->withInput();
}
return redirect()
->route('admin.admins.index')
->with('success', 'عملیات با موفقیت انجام شد.');
}
public function destroy(Admin $admin)
{
try {
DB::beginTransaction();
$admin->permission()->delete();
$admin->delete();
DB::commit();
} catch (\Exception $exception) {
DB::rollBack();
Log::error($exception);
return back()
->withErrors([
'general' => 'خطایی در حذف مدیر رخ داده است.'
]);
}
return redirect()
->route('admin.admins.index')
->with('success', 'مدیر با موفقیت حذف شد.');
}
}