auditionadmin/app/Http/Controllers/EntryController.php

52 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Events\AuditionChange;
use App\Models\Audition;
use App\Models\Entry;
use App\Models\School;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use function abort;
class EntryController extends Controller
{
// TODO authorization policies
public function index()
{
$entries = Auth::user()->entries()->with(['student','audition'])->get();
$auditions = Audition::deadlineNotPast();
$students = Auth::user()->students;
return view('entries.index',['entries' => $entries, 'students' => $students, 'auditions' => $auditions]);
}
public function store(Request $request)
{
if ($request->user()->cannot('create', Entry::class)) abort(403);
// TODO write custom rule to verify the combination of student and audition is unique
$request->validate([
'student_id' => ['required', 'exists:students,id'],
'audition_id' => ['required', 'exists:auditions,id']
]);
$entry = Entry::create([
'student_id' => request('student_id'),
'audition_id' => request('audition_id')
]);
AuditionChange::dispatch();
return redirect('/entries');
}
public function destroy(Request $request, Entry $entry)
{
if ($request->user()->cannot('delete', $entry)) abort(403);
$entry->delete();
AuditionChange::dispatch();
return redirect('/entries')->with('success','The ' . $entry->audition->name . 'entry for ' . $entry->student->full_name(). 'has been deleted.');
}
}