auditionadmin/app/Http/Controllers/NominationEnsembles/ScobdaNominationEnsembleCon...

114 lines
4.4 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 ScobdaNominationEnsembleController extends Controller implements NominationEnsembleController
{
public function index()
{
$ensembles = NominationEnsemble::all();
return view('nomination_ensembles.scobda.index', compact('ensembles'));
}
public function show(NominationEnsemble $ensemble)
{
// TODO: Implement show() method.
}
public function create()
{
// TODO: Implement create() method.
}
public function store()
{
//dd(request()->all());
$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',
'target_size' => 'required|numeric|min:1',
'rounding_direction' => 'required|in:up,down',
'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*/', ',', $validated['instrument_list']);
$instrument_array = explode(',', $instrument_list);
$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['target_size'] = $validated['target_size'];
$data['instruments'] = $instrument_array;
$data['rounding_direction'] = $validated['rounding_direction'];
$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',
'target_size' => 'required|numeric|min:1',
'rounding_direction' => 'required|in:up,down',
'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*/', ',', $validated['instrument_list']);
$instrument_array = explode(',', $instrument_list);
$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['target_size'] = $validated['target_size'];
$data['instruments'] = $instrument_array;
$data['rounding_direction'] = $validated['rounding_direction'];
$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.');
}
}