| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/ContentDirectoryStaffController.php |
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Http\Requests\Backend\ContentDirectoryStaffRequest;
use App\Models\Backend\ContentDirectoryDepartment;
use App\Models\Backend\ContentDirectoryStaff;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ContentDirectoryStaffController extends Controller
{
private function uploadPhoto($file): string
{
$name = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$filename = $name . '_' . now()->format('Ymd') . '_' . substr(uniqid(), -5) . '.' . $file->getClientOriginalExtension();
return $file->storeAs('directory-staff', $filename, 'public');
}
public function index(Request $request)
{
$search = $request->get('search');
$departmentFilter = $request->get('department');
$statusFilter = $request->get('status');
$staff = ContentDirectoryStaff::query()
->with('department')
->when($search, function ($q) use ($search) {
$q->where(function ($sub) use ($search) {
$sub->where('directory_staff_name', 'like', "%{$search}%")
->orWhere('directory_staff_email', 'like', "%{$search}%")
->orWhere('directory_staff_phone', 'like', "%{$search}%")
->orWhere('directory_staff_position', 'like', "%{$search}%");
});
})
->when($departmentFilter, fn($q) => $q->where('directory_staff_department_id', $departmentFilter))
->when($statusFilter !== null && $statusFilter !== '', fn($q) => $q->where('directory_staff_status', $statusFilter))
->when($departmentFilter, function ($q) {
$q->orderBy('directory_staff_sort')->orderBy('directory_staff_id');
}, function ($q) {
$q->orderBy('directory_staff_department_id')->orderBy('directory_staff_sort')->orderBy('directory_staff_id');
})
->paginate(10)
->onEachSide(1)
->withQueryString();
$departments = ContentDirectoryDepartment::orderBy('directory_department_name')
->pluck('directory_department_name', 'directory_department_id');
return view('backend.module.contentDirectoryStaff.index', [
'staff' => $staff,
'departments' => $departments,
'search' => $search,
'departmentFilter' => $departmentFilter,
'statusFilter' => $statusFilter,
]);
}
public function create()
{
$departments = ContentDirectoryDepartment::orderBy('directory_department_name')
->pluck('directory_department_name', 'directory_department_id');
return view('backend.module.contentDirectoryStaff.create', [
'departments' => $departments,
]);
}
public function store(ContentDirectoryStaffRequest $request)
{
$photoPath = null;
if ($request->hasFile('directory_staff_photo')) {
$photoPath = $this->uploadPhoto($request->file('directory_staff_photo'));
}
ContentDirectoryStaff::create([
'directory_staff_department_id' => $request->directory_staff_department_id,
'directory_staff_name' => $request->directory_staff_name,
'directory_staff_email' => $request->directory_staff_email,
'directory_staff_phone' => $request->directory_staff_phone,
'directory_staff_position' => $request->directory_staff_position,
'directory_staff_photo' => $photoPath,
'directory_staff_sort' => $request->directory_staff_sort,
'directory_staff_status' => $request->directory_staff_status ?? 1,
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
flash()->success('Staff created successfully!');
return redirect()->route('content-directory-staff.index');
}
public function edit($id)
{
$staff = ContentDirectoryStaff::findOrFail($id);
$departments = ContentDirectoryDepartment::orderBy('directory_department_name')
->pluck('directory_department_name', 'directory_department_id');
return view('backend.module.contentDirectoryStaff.edit', [
'staff' => $staff,
'departments' => $departments,
]);
}
public function update(ContentDirectoryStaffRequest $request, $id)
{
$staff = ContentDirectoryStaff::findOrFail($id);
$photoPath = $staff->directory_staff_photo;
if ($request->hasFile('directory_staff_photo')) {
if ($photoPath && Storage::disk('public')->exists($photoPath)) {
Storage::disk('public')->delete($photoPath);
}
$photoPath = $this->uploadPhoto($request->file('directory_staff_photo'));
}
$staff->update([
'directory_staff_department_id' => $request->directory_staff_department_id,
'directory_staff_name' => $request->directory_staff_name,
'directory_staff_email' => $request->directory_staff_email,
'directory_staff_phone' => $request->directory_staff_phone,
'directory_staff_position' => $request->directory_staff_position,
'directory_staff_photo' => $photoPath,
'directory_staff_sort' => $request->directory_staff_sort,
'directory_staff_status' => $request->directory_staff_status ?? 1,
'updated_by' => auth()->id(),
]);
flash()->success('Staff updated successfully!');
return redirect()->route('content-directory-staff.index');
}
public function destroy($id)
{
$staff = ContentDirectoryStaff::findOrFail($id);
if ($staff->directory_staff_photo && Storage::disk('public')->exists($staff->directory_staff_photo)) {
Storage::disk('public')->delete($staff->directory_staff_photo);
}
$staff->delete();
flash()->success('Staff deleted successfully.');
return redirect()->route('content-directory-staff.index');
}
public function reorder(Request $request)
{
$ids = $request->input('ids', []);
$departmentId = $request->input('department_id');
$page = (int) $request->input('page', 1);
$perPage = 10;
$offset = ($page - 1) * $perPage;
if (empty($ids) || !$departmentId) {
return response()->json(['success' => false, 'message' => 'Department filter is required to reorder.'], 422);
}
foreach ($ids as $index => $id) {
ContentDirectoryStaff::where('directory_staff_id', $id)
->where('directory_staff_department_id', $departmentId)
->update(['directory_staff_sort' => $offset + $index + 1]);
}
return response()->json(['success' => true]);
}
}