142 lines
5.2 KiB
PHP
142 lines
5.2 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',
|
|
'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.');
|
|
}
|
|
}
|