diff --git a/app/Http/Controllers/Admin/StudentController.php b/app/Http/Controllers/Admin/StudentController.php index f536f88..015071f 100644 --- a/app/Http/Controllers/Admin/StudentController.php +++ b/app/Http/Controllers/Admin/StudentController.php @@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Auth; use function abort; use function auth; +use function compact; use function request; use function to_route; use function view; @@ -22,9 +23,28 @@ class StudentController extends Controller if (! Auth::user()->is_admin) { abort(403); } - $students = Student::with(['school'])->withCount('entries')->orderBy('last_name')->orderBy('first_name')->paginate(15); + $filters = session('adminStudentFilters') ?? null; + $schools = School::orderBy('name')->get(); + $students = Student::with(['school'])->withCount('entries')->orderBy('last_name')->orderBy('first_name'); + // Apply filters + if ($filters) { + if ($filters['first_name']) { + $students = $students->where('first_name', 'like', '%'.$filters['first_name'].'%'); + } + if ($filters['last_name']) { + $students = $students->where('last_name', 'like', '%'.$filters['last_name'].'%'); + } + if ($filters['school'] && $filters['school'] != 'all') { + $students = $students->where('school_id', $filters['school']); + } + if ($filters['grade'] && $filters['grade'] != 'all') { + $students = $students->where('grade', $filters['grade']); + } + } + $students = $students->paginate(15); + $grades = Student::distinct()->pluck('grade'); - return view('admin.students.index', ['students' => $students]); + return view('admin.students.index', compact('students', 'schools', 'grades')); } public function create() @@ -162,4 +182,9 @@ class StudentController extends Controller return to_route('admin.students.index')->with('success', 'Student '.$name.' deleted successfully.'); } + + public function set_filter() + { + // + } } diff --git a/app/Http/Controllers/FilterController.php b/app/Http/Controllers/FilterController.php index 2cc06bd..f22fbd1 100644 --- a/app/Http/Controllers/FilterController.php +++ b/app/Http/Controllers/FilterController.php @@ -8,7 +8,7 @@ class FilterController extends Controller { public function adminEntryFilter(Request $request) { - $filters = array(); + $filters = []; $filters['id'] = request('id_filter') ?? null; $filters['audition'] = request('audition_filter') ? request('audition_filter') : null; $filters['school'] = request('school_filter') ? request('school_filter') : null; @@ -17,12 +17,34 @@ class FilterController extends Controller $filters['last_name'] = request('last_name_filter') ? request('last_name_filter') : null; session(['adminEntryFilters' => $filters]); + return redirect('/admin/entries')->with('success', 'Filters Applied'); } public function clearAdminEntryFilter(Request $request) { session()->forget('adminEntryFilters'); + return redirect('/admin/entries')->with('success', 'Filters Cleared'); } + + public function adminStudentFilter(Request $request) + { + $filters = []; + $filters['school'] = request('school_filter') ? request('school_filter') : null; + $filters['grade'] = request('grade_filter') ? request('grade_filter') : null; + $filters['first_name'] = request('first_name_filter') ? request('first_name_filter') : null; + $filters['last_name'] = request('last_name_filter') ? request('last_name_filter') : null; + + session(['adminStudentFilters' => $filters]); + + return redirect()->back()->with('success', 'Filters Applied'); + } + + public function clearAdminStudentFilter() + { + session()->forget('adminStudentFilters'); + + return redirect(route('admin.students.index'))->with('success', 'Filters Cleared'); + } } diff --git a/resources/views/admin/students/index.blade.php b/resources/views/admin/students/index.blade.php index 37ecc07..15b7e2b 100644 --- a/resources/views/admin/students/index.blade.php +++ b/resources/views/admin/students/index.blade.php @@ -1,6 +1,36 @@ Student Administration + + Filter Students + + + + + + School + + @foreach($schools as $school) + + @endforeach + + + Grade + + @foreach($grades as $grade) + + @endforeach + + + + + Clear Filters + Apply Filters + + + + + Students diff --git a/routes/web.php b/routes/web.php index 6b1a9f7..b181fb1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -19,6 +19,8 @@ Route::get('/results', [App\Http\Controllers\ResultsPage::class, '__invoke'])->n Route::prefix('filters')->middleware(['auth', 'verified'])->controller(FilterController::class)->group(function () { Route::post('/admin_entry_filter', 'adminEntryFilter')->name('admin_entry_filter.set'); Route::get('/admin_entry_filter/clear', 'clearAdminEntryFilter')->name('admin_entry_filter.clear'); + Route::post('/admin_student_filter', 'adminStudentFilter')->name('admin.students.filter.set'); + Route::get('/admin_student_filter/clear', 'clearAdminStudentFilter')->name('admin.students.filter.clear'); }); //Route::get('/my_school', [SchoolController::class, 'my_school'])->middleware('auth','verified');