From 9d59832d0bfd9563fa4ced26811e5c4aab11d785 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Wed, 12 Feb 2025 22:43:36 -0600 Subject: [PATCH] Managing nomination ensembles under MEOBDA rules implemented. --- .../MeobdaNominationEnsembleController.php | 129 ++++++++++++++++++ .../meobda/admin/ensembles.blade.php | 77 +++++++++++ 2 files changed, 206 insertions(+) create mode 100644 app/Http/Controllers/NominationEnsembles/MeobdaNominationEnsembleController.php create mode 100644 resources/views/nomination_ensembles/meobda/admin/ensembles.blade.php diff --git a/app/Http/Controllers/NominationEnsembles/MeobdaNominationEnsembleController.php b/app/Http/Controllers/NominationEnsembles/MeobdaNominationEnsembleController.php new file mode 100644 index 0000000..fee8bd0 --- /dev/null +++ b/app/Http/Controllers/NominationEnsembles/MeobdaNominationEnsembleController.php @@ -0,0 +1,129 @@ +validate([ + 'ensemble_name' => 'required|unique:nomination_ensembles,name', + 'entry_deadline' => 'required|date', + 'min_grade' => 'required|numeric|min:0', + 'max_grade' => 'required|numeric|gte:min_grade', + 'max_nominations' => 'required|numeric|min:1', + 'instrument_list' => 'required|string', + ], [ + 'maximum_grade.gte' => 'The maximum grade must be greater than the minimum grade.', + 'rounding_direction.in' => 'The rounding direction must be either "up" or "down".', + ]); + $instrument_list = preg_replace('/^\s+|\s+$/m', '', $validated['instrument_list']); + $instrument_list = str_replace(["\r\n", "\r"], "\n", $instrument_list); + $instrument_array = explode("\n", $instrument_list); + $instruments = []; + foreach ($instrument_array as $instrument) { + $inst_arr = explode(':', $instrument); + $name = $inst_arr[0]; + $max = $inst_arr[1] ?? null; + $instruments[] = [ + 'name' => $name, + 'max' => $max, + ]; + } + + $ensemble = new NominationEnsemble(); + $ensemble->name = $validated['ensemble_name']; + $ensemble->entry_deadline = $validated['entry_deadline']; + $ensemble->minimum_grade = $validated['min_grade']; + $ensemble->maximum_grade = $validated['max_grade']; + $data = []; + $data['max_nominations'] = $validated['max_nominations']; + $data['instruments'] = $instruments; + $ensemble->data = $data; + $ensemble->save(); + + return redirect()->route('nomination.admin.ensemble.index')->with('success', + 'Nomination Ensemble has been created.'); + } + + public function edit(NominationEnsemble $ensemble) + { + // TODO: Implement edit() method. + } + + public function update(NominationEnsemble $ensemble) + { + $validated = request()->validate([ + 'ensemble_name' => [ + 'required', + Rule::unique('nomination_ensembles', 'name')->ignore($ensemble->id), + ], + 'entry_deadline' => 'required|date', + 'min_grade' => 'required|numeric|min:0', + 'max_grade' => 'required|numeric|gte:min_grade', + 'max_nominations' => 'required|numeric|min:1', + 'instrument_list' => 'required|string', + ], [ + 'maximum_grade.gte' => 'The maximum grade must be greater than the minimum grade.', + 'rounding_direction.in' => 'The rounding direction must be either "up" or "down".', + ]); + $instrument_list = preg_replace('/^\s+|\s+$/m', '', $validated['instrument_list']); + $instrument_list = str_replace(["\r\n", "\r"], "\n", $instrument_list); + $instrument_array = explode("\n", $instrument_list); + $instruments = []; + foreach ($instrument_array as $instrument) { + $inst_arr = explode(':', $instrument); + $name = $inst_arr[0]; + $max = $inst_arr[1] ?? null; + $instruments[] = [ + 'name' => $name, + 'max' => $max, + ]; + } + + $ensemble->name = $validated['ensemble_name']; + $ensemble->entry_deadline = $validated['entry_deadline']; + $ensemble->minimum_grade = $validated['min_grade']; + $ensemble->maximum_grade = $validated['max_grade']; + $data = []; + $data['max_nominations'] = $validated['max_nominations']; + $data['instruments'] = $instruments; + $ensemble->data = $data; + $ensemble->save(); + + return redirect()->route('nomination.admin.ensemble.index')->with('success', + 'Nomination Ensemble has been modified.'); + } + + public function destroy(NominationEnsemble $ensemble) + { + $ensemble->delete(); + + // TODO: Delete associated nomionations. + return redirect()->route('nomination.admin.ensemble.index')->with('success', + 'Nomination Ensemble has been deleted.'); + } +} diff --git a/resources/views/nomination_ensembles/meobda/admin/ensembles.blade.php b/resources/views/nomination_ensembles/meobda/admin/ensembles.blade.php new file mode 100644 index 0000000..a9adfbc --- /dev/null +++ b/resources/views/nomination_ensembles/meobda/admin/ensembles.blade.php @@ -0,0 +1,77 @@ + + Nomination Ensembles (MEOBDA Rules) + + + + Add Nomination Ensemble + + + + + + + + + Instrument List (One per line. Add :x to set a limit per school) + + + + + + + + + + Nomination Ensembles +
+ @foreach($ensembles as $ensemble) + + + {{ $ensemble->name }} + + + + Are you sure you want to delete this nomination ensemble? + + + + + @method('PATCH') + + + + + + + + + + Instrument List (One per line. Add :x to set a limit per school) + @foreach($ensemble->data['instruments'] as $instrument){{ trim($instrument['name']) }}@if($instrument['max']):{{trim($instrument['max'])}}@endif{{PHP_EOL}}@endforeach + + + + + + @endforeach +
+
+
+ + + + + +