auditionadmin/app/Http/Controllers/NominationEnsembles/MeobdaNominationEnsembleCon...

130 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers\NominationEnsembles;
use App\Http\Controllers\Controller;
use App\Models\NominationEnsemble;
use Illuminate\Validation\Rule;
use function redirect;
class MeobdaNominationEnsembleController extends Controller implements NominationEnsembleController
{
public function index()
{
$ensembles = NominationEnsemble::all();
return view('nomination_ensembles.meobda.admin.ensembles', compact('ensembles'));
}
public function show(NominationEnsemble $ensemble)
{
// TODO: Implement show() method.
}
public function create()
{
// TODO: Implement create() method.
}
public function store()
{
$validated = request()->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.');
}
}