diff --git a/app/Http/Controllers/Admin/EnsembleController.php b/app/Http/Controllers/Admin/EnsembleController.php new file mode 100644 index 0000000..f666b65 --- /dev/null +++ b/app/Http/Controllers/Admin/EnsembleController.php @@ -0,0 +1,51 @@ +get(); + return view('admin.ensembles.index',compact('events')); + } + + public function store(Request $request) + { + if(! Auth::user()->is_admin) abort(403); + request()->validate([ + 'name' => 'required', + 'code' => 'required', + 'event_id' => ['required','exists:events,id'] + ]); + + Ensemble::create([ + 'name' => request('name'), + 'code' => request('code'), + 'event_id' => request('event_id'), + ]); + + return redirect()->route('admin.ensembles.index')->with('success','Ensemble created successfully'); + } + + public function updateEnsembleRank(Request $request) + { + $order = $request->input('order'); + $eventId = $request->input('event_id'); + + foreach ($order as $item) { + Ensemble::where('id', $item['id']) + ->where('event_id', $eventId) + ->update(['rank' => $item['rank']]); + } + + return response()->json(['status' => 'success']); + } +} diff --git a/app/Models/Ensemble.php b/app/Models/Ensemble.php new file mode 100644 index 0000000..8760051 --- /dev/null +++ b/app/Models/Ensemble.php @@ -0,0 +1,18 @@ +belongsTo(Event::class); + } +} diff --git a/app/Models/Event.php b/app/Models/Event.php index f904010..2df0d6a 100644 --- a/app/Models/Event.php +++ b/app/Models/Event.php @@ -15,4 +15,10 @@ class Event extends Model { return $this->hasMany(Audition::class); } + + public function ensembles(): HasMany + { + return $this->hasMany(Ensemble::class) + ->orderBy('rank'); + } } diff --git a/database/migrations/2024_06_18_220009_create_ensembles_table.php b/database/migrations/2024_06_18_220009_create_ensembles_table.php new file mode 100644 index 0000000..91c7773 --- /dev/null +++ b/database/migrations/2024_06_18_220009_create_ensembles_table.php @@ -0,0 +1,32 @@ +id(); + $table->foreignIdFor(Event::class)->constrained()->cascadeOnUpdate()->cascadeOnDelete(); + $table->string('name'); + $table->string('code'); + $table->integer('rank')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('ensembles'); + } +}; diff --git a/resources/views/admin/ensembles/index-event-table.blade.php b/resources/views/admin/ensembles/index-event-table.blade.php new file mode 100644 index 0000000..ed6237e --- /dev/null +++ b/resources/views/admin/ensembles/index-event-table.blade.php @@ -0,0 +1,29 @@ + + Ensembles for {{ $event->name }} + + + + +   + Code + Name +   + + + + @foreach($event->ensembles as $ensemble) + + + + + +{{-- --}} + {{ $ensemble->code }} + {{ $ensemble->name }} + + @endforeach + + + diff --git a/resources/views/admin/ensembles/index-help-modal.blade.php b/resources/views/admin/ensembles/index-help-modal.blade.php new file mode 100644 index 0000000..60bbf81 --- /dev/null +++ b/resources/views/admin/ensembles/index-help-modal.blade.php @@ -0,0 +1,10 @@ + + About Ensembles in AuditionAdmin + + diff --git a/resources/views/admin/ensembles/index.blade.php b/resources/views/admin/ensembles/index.blade.php new file mode 100644 index 0000000..10f0375 --- /dev/null +++ b/resources/views/admin/ensembles/index.blade.php @@ -0,0 +1,67 @@ + + Ensembles + @include('admin.ensembles.index-help-modal') + + Create New Ensemble + + + + + + Event + + @foreach($events as $event) + + @endforeach + + Create + + + + +
+ @foreach($events as $event) + @include('admin.ensembles.index-event-table') + @endforeach +
+ + + +
diff --git a/resources/views/components/layout/navbar/menus/setup.blade.php b/resources/views/components/layout/navbar/menus/setup.blade.php index c7be6aa..6586a9b 100644 --- a/resources/views/components/layout/navbar/menus/setup.blade.php +++ b/resources/views/components/layout/navbar/menus/setup.blade.php @@ -18,10 +18,12 @@ From: "opacity-100 translate-y-0" To: "opacity-0 translate-y-1" --> + {{-- TODO conver to named routes --}}
Events Auditions + Ensembles Scoring Rooms Judges diff --git a/resources/views/components/table/table.blade.php b/resources/views/components/table/table.blade.php index 82d178a..b66d47e 100644 --- a/resources/views/components/table/table.blade.php +++ b/resources/views/components/table/table.blade.php @@ -5,6 +5,10 @@ 'subtitle' => false, 'sortable' => true ]) +@php + if ($title) $with_title_area = true; +@endphp +
@if($with_title_area)
diff --git a/routes/web.php b/routes/web.php index d1de6f0..952e0b1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -58,6 +58,13 @@ Route::middleware(['auth','verified',CheckIfAdmin::class])->prefix('admin/')->gr Route::post('/auditions/roomUpdate',[\App\Http\Controllers\Admin\AuditionController::class,'roomUpdate']); // Endpoint for JS assigning auditions to rooms Route::post('/scoring/assign_guide_to_audition',[\App\Http\Controllers\Admin\AuditionController::class,'scoringGuideUpdate']); // Endpoint for JS assigning scoring guides to auditions + // Admin Ensemble Routes + Route::prefix('ensembles')->controller(\App\Http\Controllers\Admin\EnsembleController::class)->group(function() { + Route::get('/','index')->name('admin.ensembles.index'); + Route::post('/','store')->name('admin.ensembles.store'); + Route::post('/updateEnsembleRank','updateEnsembleRank')->name('admin.ensembles.updateEnsembleRank'); + }); + // Admin Event Routes Route::prefix('events')->controller(\App\Http\Controllers\Admin\EventController::class)->group(function() { Route::get('/','index')->name('admin.events.index');