Scobda nomination ensembles #106
|
|
@ -16,7 +16,7 @@ interface NominationEnsembleController
|
|||
|
||||
public function edit(NominationEnsemble $ensemble);
|
||||
|
||||
public function update();
|
||||
public function update(NominationEnsemble $ensemble);
|
||||
|
||||
public function destroy();
|
||||
public function destroy(NominationEnsemble $ensemble);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\NominationEnsembles;
|
|||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\NominationEnsemble;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
use function redirect;
|
||||
|
||||
|
|
@ -11,7 +12,9 @@ class ScobdaNominationEnsembleController extends Controller implements Nominatio
|
|||
{
|
||||
public function index()
|
||||
{
|
||||
return view('nomination_ensembles.scobda.index');
|
||||
$ensembles = NominationEnsemble::all();
|
||||
|
||||
return view('nomination_ensembles.scobda.index', compact('ensembles'));
|
||||
}
|
||||
|
||||
public function show(NominationEnsemble $ensemble)
|
||||
|
|
@ -28,7 +31,7 @@ class ScobdaNominationEnsembleController extends Controller implements Nominatio
|
|||
{
|
||||
//dd(request()->all());
|
||||
$validated = request()->validate([
|
||||
'ensemble_name' => 'required',
|
||||
'ensemble_name' => 'required|unique:nomination_ensembles,name',
|
||||
'entry_deadline' => 'required|date',
|
||||
'min_grade' => 'required|numeric|min:0',
|
||||
'max_grade' => 'required|numeric|gte:min_grade',
|
||||
|
|
@ -52,6 +55,7 @@ class ScobdaNominationEnsembleController extends Controller implements Nominatio
|
|||
$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();
|
||||
|
||||
|
|
@ -63,13 +67,47 @@ class ScobdaNominationEnsembleController extends Controller implements Nominatio
|
|||
// TODO: Implement edit() method.
|
||||
}
|
||||
|
||||
public function update()
|
||||
public function update(NominationEnsemble $ensemble)
|
||||
{
|
||||
// TODO: Implement update() method.
|
||||
$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()
|
||||
public function destroy(NominationEnsemble $ensemble)
|
||||
{
|
||||
// TODO: Implement destroy() method.
|
||||
$ensemble->delete();
|
||||
|
||||
// TODO: Delete associated nomionations.
|
||||
return redirect()->route('nomination.admin.ensemble.index')->with('success', 'Nomination Ensemble has been deleted.');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('nomination_ensembles', function (Blueprint $table) {
|
||||
$table->unique('name');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('nomination_ensembles', function (Blueprint $table) {
|
||||
$table->dropUnique(['name']);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" {{ $attributes }}>
|
||||
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m14.304 4.844 2.852 2.852M7 7H4a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1v-4.5m2.409-9.91a2.017 2.017 0 0 1 0 2.853l-6.844 6.844L8 14l.713-3.565 6.844-6.844a2.015 2.015 0 0 1 2.852 0Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 478 B |
|
|
@ -24,6 +24,50 @@
|
|||
<x-form.footer submit-button-text="Create Ensemble"/>
|
||||
</x-form.form>
|
||||
</x-layout.page-section>
|
||||
|
||||
<x-layout.page-section>
|
||||
<x-slot:section_name>Nomination Ensembles</x-slot:section_name>
|
||||
<div class="p-4">
|
||||
@foreach($ensembles as $ensemble)
|
||||
<x-card.card class="m-3" x-data="{ editable: false }" >
|
||||
<x-card.heading>
|
||||
{{ $ensemble->name }}
|
||||
<x-slot:right_side class="flex">
|
||||
<x-icons.pencil @click="editable = true" x-show="!editable"/>
|
||||
<x-delete-resource-modal
|
||||
title="Delete Nomination Ensemble {{$ensemble->name}}"
|
||||
method="DELETE"
|
||||
action="{{ route('nomination.admin.ensemble.destroy',[$ensemble]) }}"
|
||||
>
|
||||
Are you sure you want to delete this nomination ensemble?
|
||||
</x-delete-resource-modal>
|
||||
</x-slot:right_side>
|
||||
</x-card.heading>
|
||||
<x-form.form method="POST" action="{{ route('nomination.admin.ensemble.update',[$ensemble]) }}" class="mb-6 mt-3">
|
||||
@method('PATCH')
|
||||
<x-form.body-grid columns="9" class="max-w-full">
|
||||
<x-form.field name="ensemble_name" label_text="Ensemble Name" colspan="3" value="{{ $ensemble->name }}" x-bind:readonly="!editable" />
|
||||
<x-form.field name="entry_deadline" label_text="Entry Deadline" type="date" colspan="2" value="{{ $ensemble->entry_deadline }}" x-bind:readonly="!editable" />
|
||||
<x-form.field name="min_grade" label_text="Minimum Grade" type="number" colspan="2" value="{{ $ensemble->minimum_grade }}" x-bind:readonly="!editable" />
|
||||
<x-form.field name="max_grade" label_text="Maximum Grade" type="number" colspan="2" value="{{ $ensemble->maximum_grade }}" x-bind:readonly="!editable" />
|
||||
<x-form.field name="max_nominations" label_text="Maximum Nominations per School" type="number" colspan="3" value="{{ $ensemble->data['max_nominations'] }}" x-bind:readonly="!editable" />
|
||||
<x-form.field name="target_size" label_text="Target Ensemble Size" type="number" colspan="3" value="{{ $ensemble->data['target_size'] }}" x-bind:readonly="!editable" />
|
||||
<x-form.select name="rounding_direction" colspan="3" x-bind:disabled="!editable" >
|
||||
<x-slot:label>Round</x-slot:label>
|
||||
<option value="up" @if(($ensemble->data['rounding_direction'] ?? null) == 'up') selected @endif()>Up</option>
|
||||
<option value="down" @if(($ensemble->data['rounding_direction'] ?? null) == 'down') selected @endif()>Down</option>
|
||||
</x-form.select>
|
||||
<x-form.textarea name="instrument_list" colspan="9" x-bind:readonly="!editable" >
|
||||
<x-slot:label>Instrument List (comma separated)</x-slot:label>
|
||||
{{ implode(', ',$ensemble->data['instruments']) }}
|
||||
</x-form.textarea>
|
||||
</x-form.body-grid>
|
||||
<x-form.footer submit-button-text="Edit Ensemble" x-show="editable" x-cloak/>
|
||||
</x-form.form>
|
||||
</x-card.card>
|
||||
@endforeach
|
||||
</div>
|
||||
</x-layout.page-section>
|
||||
</x-layout.page-section-container>
|
||||
|
||||
</x-layout.app>
|
||||
|
|
|
|||
|
|
@ -8,5 +8,7 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('nomination
|
|||
Route::prefix('ensemble/')->controller(NominationEnsembleController::class)->group(function () {
|
||||
Route::get('/', 'index')->name('nomination.admin.ensemble.index');
|
||||
Route::post('/', 'store')->name('nomination.admin.ensemble.store');
|
||||
Route::patch('/{ensemble}', 'update')->name('nomination.admin.ensemble.update');
|
||||
Route::delete('/{ensemble}', 'destroy')->name('nomination.admin.ensemble.destroy');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue