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', 'split_names' => 'nullable|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, ]; } $split_names = explode(',', $validated['split_names']); if (count($split_names) == 1) { $split_names[0] = $validated['ensemble_name']; } $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; $data['split_names'] = $split_names; $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', 'split_names' => 'nullable|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, ]; } $split_names = explode(',', $validated['split_names']); if (count($split_names) == 1) { $split_names[0] = $validated['ensemble_name']; } $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; $data['split_names'] = $split_names; $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.'); } }