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', compact('students', 'schools', 'grades')); } public function create() { $minGrade = $this->minimumGrade(); $maxGrade = $this->maximumGrade(); $schools = School::orderBy('name')->get(); return view('admin.students.create', ['schools' => $schools, 'minGrade' => $minGrade, 'maxGrade' => $maxGrade]); } public function store(StudentStoreRequest $request, CreateStudent $creator) { /** @noinspection PhpUnhandledExceptionInspection */ $creator([ 'first_name' => $request['first_name'], 'last_name' => $request['last_name'], 'grade' => $request['grade'], 'school_id' => $request['school_id'], 'optional_data' => $request->optional_data, ]); return redirect(route('admin.students.index'))->with('success', 'Student created successfully'); } public function edit(Student $student) { $minGrade = $this->minimumGrade(); $maxGrade = $this->maximumGrade(); $schools = School::orderBy('name')->get(); $student->loadCount('entries'); $event_entries = $student->entries()->with('audition.flags')->get()->groupBy('audition.event_id'); $events = Event::all(); return view('admin.students.edit', compact('student', 'schools', 'minGrade', 'maxGrade', 'events', 'event_entries')); } public function update(StudentStoreRequest $request, Student $student) { $student->update([ 'first_name' => $request['first_name'], 'last_name' => $request['last_name'], 'grade' => $request['grade'], 'school_id' => $request['school_id'], 'optional_data' => $request->optional_data, ]); 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', 'Student has entries and cannot be deleted'); } $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.'); } private function minimumGrade(): int { $nomMin = NominationEnsemble::min('minimum_grade'); $normMin = Audition::min('minimum_grade'); if (is_null($nomMin)) { $minGrade = $normMin; } else { $minGrade = min($nomMin, $normMin); } return $minGrade; } private function maximumGrade(): int { $nomMax = NominationEnsemble::max('maximum_grade'); $normMax = Audition::max('maximum_grade'); if (is_null($nomMax)) { $maxGrade = $normMax; } else { $maxGrade = max($nomMax, $normMax); } return $maxGrade; } }