From ddcf4a46c47fc5925482d9294ef6c2c835acf86a Mon Sep 17 00:00:00 2001 From: Matt Young Date: Sun, 2 Jun 2024 22:26:44 -0500 Subject: [PATCH] Admin page for students working --- .../Controllers/Admin/StudentController.php | 62 +++++++++++++++++++ app/Http/Controllers/StudentController.php | 3 + .../views/admin/students/create.blade.php | 30 +++++++++ resources/views/admin/students/edit.blade.php | 30 +++++++++ .../views/admin/students/index.blade.php | 1 + resources/views/admin/users/create.blade.php | 4 +- routes/web.php | 4 ++ 7 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 resources/views/admin/students/create.blade.php create mode 100644 resources/views/admin/students/edit.blade.php diff --git a/app/Http/Controllers/Admin/StudentController.php b/app/Http/Controllers/Admin/StudentController.php index 9852104..16ef58d 100644 --- a/app/Http/Controllers/Admin/StudentController.php +++ b/app/Http/Controllers/Admin/StudentController.php @@ -3,6 +3,8 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\Audition; +use App\Models\School; use App\Models\Student; use App\Models\User; use Illuminate\Http\Request; @@ -18,4 +20,64 @@ class StudentController extends Controller $students = Student::orderBy('last_name')->orderBy('first_name')->paginate(15); return view('admin.students.index', ['students' => $students]); } + + public function create() + { + if (! Auth::user()->is_admin) abort(403); + $minGrade = Audition::min('minimum_grade'); + $maxGrade = Audition::max('maximum_grade'); + $schools = School::orderBy('name')->get(); + return view('admin.students.create',['schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade]); + } + + public function store() + { + if (! Auth::user()->is_admin) abort(403); + request()->validate([ + 'first_name' => ['required'], + 'last_name' => ['required'], + 'grade' => ['required', 'integer'], + 'school_id' => ['required', 'exists:schools,id'] + ]); + + $student = Student::create([ + 'first_name' => request('first_name'), + 'last_name' => request('last_name'), + 'grade' => request('grade'), + 'school_id' => request('school_id') + ]); + + return redirect('/admin/students'); + } + + public function edit(Student $student) + { + if (! Auth::user()->is_admin) abort(403); + $minGrade = Audition::min('minimum_grade'); + $maxGrade = Audition::max('maximum_grade'); + $schools = School::orderBy('name')->get(); + return view('admin.students.edit', ['student' => $student, 'schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade]); + } + + public function update(Request $request, Student $student) + { + if (! Auth::user()->is_admin) abort(403); + request()->validate([ + 'first_name' => ['required'], + 'last_name' => ['required'], + 'grade' => ['required', 'integer'], + 'school_id' => ['required', 'exists:schools,id'] + ]); + + $student->update([ + 'first_name' => request('first_name'), + 'last_name' => request('last_name'), + 'grade' => request('grade'), + 'school_id' => request('school_id') + ]); + + return redirect('/admin/students'); + +// TODO if a students grade is changed, we need to be sure they are still eligible for the auditions in which they are entered. + } } diff --git a/app/Http/Controllers/StudentController.php b/app/Http/Controllers/StudentController.php index b46c5c8..be1b021 100644 --- a/app/Http/Controllers/StudentController.php +++ b/app/Http/Controllers/StudentController.php @@ -92,6 +92,9 @@ class StudentController extends Controller 'grade' => request('grade') ]); + // TODO if a students grade is changed, we need to be sure they are still eligible for the auditions in which they are entered. + + return redirect('/students'); } diff --git a/resources/views/admin/students/create.blade.php b/resources/views/admin/students/create.blade.php new file mode 100644 index 0000000..40bca42 --- /dev/null +++ b/resources/views/admin/students/create.blade.php @@ -0,0 +1,30 @@ + + + Create Student + + + + + + Grade + @php($n = $minGrade) + @while($n <= $maxGrade) + + @php($n++); + @endwhile + + + School + @foreach ($schools as $school) + + + @endforeach + + + + + Create Student + + + + diff --git a/resources/views/admin/students/edit.blade.php b/resources/views/admin/students/edit.blade.php new file mode 100644 index 0000000..7e3ae8a --- /dev/null +++ b/resources/views/admin/students/edit.blade.php @@ -0,0 +1,30 @@ + + + Edit Student + + + + + + Grade + @php($n = $minGrade) + @while($n <= $maxGrade) + + @php($n++); + @endwhile + + + School + @foreach ($schools as $school) + + + @endforeach + + + + + Ecit Student + + + + diff --git a/resources/views/admin/students/index.blade.php b/resources/views/admin/students/index.blade.php index c0f2ac0..9c40ddb 100644 --- a/resources/views/admin/students/index.blade.php +++ b/resources/views/admin/students/index.blade.php @@ -34,3 +34,4 @@ {{ $students->links('vendor.pagination.simple-audition') }} +{{--TODO add options to filter the page--}} diff --git a/resources/views/admin/users/create.blade.php b/resources/views/admin/users/create.blade.php index 69d0f65..5e28ea4 100644 --- a/resources/views/admin/users/create.blade.php +++ b/resources/views/admin/users/create.blade.php @@ -1,6 +1,6 @@ - Edit User + Create User @@ -19,7 +19,7 @@ - Update User + Create User diff --git a/routes/web.php b/routes/web.php index 7a70092..0bc9ff2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,6 +21,10 @@ Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->gr // Admin Student Routes Route::prefix('students')->controller(\App\Http\Controllers\Admin\StudentController::class)->group(function() { Route::get('/','index'); + Route::get('/create','create'); + Route::post('/','store'); + Route::get('/{student}/edit','edit'); + Route::patch('/{student}','update'); }); // Admin School Routes