131 lines
4.4 KiB
PHP
131 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Audition;
|
|
use App\Models\Event;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Session;
|
|
use function abort;
|
|
use function redirect;
|
|
use function request;
|
|
use function response;
|
|
use function route;
|
|
|
|
class AuditionController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
$auditions = Audition::with(['event','entries'])->orderBy('score_order')->orderBy('created_at','desc')->get();
|
|
return view('admin.auditions.index', ['auditions' => $auditions] );
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
$events = Event::orderBy('name')->get();
|
|
return view('admin.auditions.create',['events'=> $events]);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
|
|
$validData = request()->validate([
|
|
'event_id' => ['required', 'exists:events,id'],
|
|
'name' => ['required'],
|
|
'entry_deadline' => ['required', 'date'],
|
|
'entry_fee' => ['required', 'numeric'],
|
|
'minimum_grade' => ['required', 'integer'],
|
|
'maximum_grade' => 'required|numeric|gt:minimum_grade',
|
|
], [
|
|
'maximum_grade.gt' => 'The maximum grade must be greater than the minimum grade.',
|
|
]);
|
|
|
|
Audition::create([
|
|
'event_id' => $validData['event_id'],
|
|
'name' => $validData['name'],
|
|
'entry_deadline' => $validData['entry_deadline'],
|
|
'entry_fee' => $validData['entry_fee'] * 100,
|
|
'minimum_grade' => $validData['minimum_grade'],
|
|
'maximum_grade' => $validData['maximum_grade'],
|
|
]);
|
|
|
|
return redirect('/admin/auditions');
|
|
}
|
|
|
|
public function edit(Audition $audition)
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
$events = Event::orderBy('name')->get();
|
|
return view('admin.auditions.edit', ['audition' => $audition,'events'=> $events]);
|
|
}
|
|
|
|
public function update(Audition $audition)
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
|
|
$validData = request()->validate([
|
|
'event_id' => ['required', 'exists:events,id'],
|
|
'name' => ['required'],
|
|
'entry_deadline' => ['required', 'date'],
|
|
'entry_fee' => ['required', 'numeric'],
|
|
'minimum_grade' => ['required', 'integer'],
|
|
'maximum_grade' => 'required|numeric|gt:minimum_grade',
|
|
], [
|
|
'maximum_grade.gt' => 'The maximum grade must be greater than the minimum grade.',
|
|
]);
|
|
|
|
$audition->update([
|
|
'event_id' => $validData['event_id'],
|
|
'name' => $validData['name'],
|
|
'entry_deadline' => $validData['entry_deadline'],
|
|
'entry_fee' => $validData['entry_fee'] * 100,
|
|
'minimum_grade' => $validData['minimum_grade'],
|
|
'maximum_grade' => $validData['maximum_grade'],
|
|
]);
|
|
|
|
return redirect('/admin/auditions');
|
|
}
|
|
|
|
public function reorder(Request $request)
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
$order = $request->order;
|
|
foreach ($order as $index => $id) {
|
|
$audition = Audition::find($id);
|
|
$audition->update(['score_order' => $index]);
|
|
}
|
|
return response()->json(['status' => 'success']);
|
|
}
|
|
|
|
public function roomUpdate(Request $request)
|
|
{
|
|
$auditions = $request->all();
|
|
|
|
foreach ($auditions as $audition) {
|
|
Audition::where('id', $audition['id'])
|
|
->update([
|
|
'room_id' => $audition['room_id'],
|
|
'order_in_room' => $audition['room_order']
|
|
]);
|
|
}
|
|
|
|
return response()->json(['status' => 'success']);
|
|
}
|
|
|
|
public function destroy(Audition $audition)
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
// if($audition->entries->count() > 0) abort(403, 'Cannot delete an audition with entries.'
|
|
if($audition->entries->count() > 0) {
|
|
return redirect()->route('adminAuditionIndex')->with('error', 'Cannot delete an audition with entries.');
|
|
}
|
|
$audition->delete();
|
|
return redirect('/admin/auditions');
|
|
}
|
|
}
|