validate([ 'school' => 'nullable|exists:schools,id', 'section' => 'nullable|string', 'newFilterParameters' => 'string', 'split' => 'nullable|string', 'clear' => 'nullable|string', ]); if ($newFilterData['clear'] ?? false == 'clear') { $filterData = []; session()->forget('nominationAdminFilters'); } else { session()->put('nominationAdminFilters', $newFilterData); $filterData = $newFilterData; } } elseif (session()->has('nominationAdminFilters')) { $filterData = session()->get('nominationAdminFilters'); } else { $filterData = []; } // Populate variables to complete the filter form $schools = School::orderBy('name')->get(); $ensembles = NominationEnsemble::all(); $sections = []; $splits = []; foreach ($ensembles as $ensemble) { // Populate sections for each ensemble $sections[$ensemble->id.'---'.'all'] = $ensemble->name.' - ALL'; foreach ($ensemble->data['instruments'] as $instrument) { $sections[$ensemble->id.'---'.$instrument['name']] = $ensemble->name.' - '.$instrument['name']; } // Populate splits for each ensemble $splits[$ensemble->id.'---'.'all'] = $ensemble->name.' - ALL'; foreach ($ensemble->data['split_names'] as $splitName) { $splits[$ensemble->id.'---'.$splitName] = $ensemble->name.' - '.$splitName; } } // Get and filter nominations $nominations = NominationEnsembleEntry::with('student.school'); if ($filterData['school'] ?? false) { $nominations = $nominations->whereHas('student', function ($query) use ($filterData) { $query->where('school_id', $filterData['school']); }); } if ($filterData['section'] ?? false) { $sectionFilter = explode('---', $filterData['section']); $nominations = $nominations->where('nomination_ensemble_id', $sectionFilter[0]); if ($sectionFilter[1] != 'all') { $nominations = $nominations->where('data->instrument', $sectionFilter[1]); } } if ($filterData['split'] ?? false) { $splitFilter = explode('---', $filterData['split']); $nominations = $nominations->where('nomination_ensemble_id', $splitFilter[0]); if ($splitFilter[1] != 'all') { $nominations = $nominations->where('data->split', $splitFilter[1]); } } $nominations = $nominations->paginate(50); return view('nomination_ensembles.meobda.admin.nominations', compact('nominations', 'schools', 'filterData', 'ensembles', 'sections', 'splits')); } public function show(NominationEnsembleEntry $nominationEnsembleEntry) { // TODO: Implement show() method. } public function create() { // TODO: Implement create() method. } public function store() { // TODO: Implement store() method. } public function edit(NominationEnsembleEntry $nominationEnsembleEntry) { $students = Student::with('school')->get() ->sortBy('school.name'); $instrumentation = $this->get_ensemble_instrumentation($nominationEnsembleEntry->ensemble); return view('nomination_ensembles.meobda.admin.nomination-edit', compact('nominationEnsembleEntry', 'students', 'instrumentation')); } public function update(NominationEnsembleEntry $nominationEnsembleEntry) { $ensemble = $nominationEnsembleEntry->ensemble; $validSplits = $ensemble->data['split_names']; $validInstruments = []; foreach ($ensemble->data['instruments'] as $instrument) { $validInstruments[] = $instrument['name']; } $validData = request()->validate([ 'instrument' => Rule::in($validInstruments), 'split' => Rule::in($validSplits), 'seat' => 'integer', ]); $data = $nominationEnsembleEntry->data; $data['instrument'] = $validData['instrument']; $data['split'] = $validData['split']; $data['seat'] = $validData['seat']; $nominationEnsembleEntry->update([ 'data' => $data, ]); return redirect()->back(); } public function destroy(NominationEnsembleEntry $nominationEnsembleEntry) { // TODO: Implement destroy() method. } private function get_ensemble_instrumentation(NominationEnsemble $ensemble) { $entries = NominationEnsembleEntry::where('nomination_ensemble_id', $ensemble->id)->get(); $splits = $ensemble->data['split_names']; $instruments = []; foreach ($ensemble->data['instruments'] as $instrument) { $instruments[] = $instrument['name']; } $counts = []; foreach ($splits as $split) { $counts[$split] = []; foreach ($instruments as $instrument) { $counts[$split][$instrument] = 0; } } foreach ($entries as $entry) { if (! isset($entry->data['split'])) { continue; } $counts[$entry->data['split']][$entry->data['instrument']] += 1; } return $counts; } }