is_admin) { abort(403); } $students = Student::with(['school'])->withCount('entries')->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'], ]); if (Student::where('first_name', request('first_name')) ->where('last_name', request('last_name')) ->where('school_id', request('school_id')) ->exists()) { return redirect('/admin/students/create')->with('error', 'This student already exists.'); } $student = Student::create([ 'first_name' => request('first_name'), 'last_name' => request('last_name'), 'grade' => request('grade'), 'school_id' => request('school_id'), ]); $message = 'Created student #'.$student->id.' - '.$student->full_name().'
Grade: '.$student->grade.'
School: '.$student->school->name; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $message, 'affected' => [ 'students' => [$student->id], 'schools' => [$student->school_id], ], ]); return redirect('/admin/students')->with('success', 'Created student successfully'); } 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(); $student->loadCount('entries'); return view('admin.students.edit', ['student' => $student, 'schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade]); } public function update(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'], ]); foreach ($student->entries as $entry) { if ($entry->audition->minimum_grade > request('grade') || $entry->audition->maximum_grade < request('grade')) { return redirect('/admin/students/'.$student->id.'/edit')->with('error', 'This student is entered in an audition that is not available to their new grade.'); } } if (Student::where('first_name', request('first_name')) ->where('last_name', request('last_name')) ->where('school_id', request('school_id')) ->where('id', '!=', $student->id) ->exists()) { return redirect('/admin/students/'.$student->id.'/edit')->with('error', 'A student with that name already exists at that school'); } $student->update([ 'first_name' => request('first_name'), 'last_name' => request('last_name'), 'grade' => request('grade'), 'school_id' => request('school_id'), ]); $message = 'Updated student #'.$student->id.'
Name: '.$student->full_name().'
Grade: '.$student->grade.'
School: '.$student->school->name; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $message, 'affected' => [ 'students' => [$student->id], 'schools' => [$student->school_id], ], ]); return redirect('/admin/students')->with('success', 'Student updated'); } public function destroy(Student $student) { if ($student->entries()->count() > 0) { return to_route('admin.students.index')->with('error', 'You cannot delete a student with entries.'); } $name = $student->full_name(); $message = 'Deleted student #'.$student->id.'
Name: '.$student->full_name().'
Grade: '.$student->grade.'
School: '.$student->school->name; AuditLogEntry::create([ 'user' => auth()->user()->email, 'ip_address' => request()->ip(), 'message' => $message, 'affected' => [ 'students' => [$student->id], 'schools' => [$student->school_id], ], ]); $student->delete(); return to_route('admin.students.index')->with('success', 'Student '.$name.' deleted successfully.'); } }