auditionadmin/app/Http/Controllers/Admin/RoomController.php

59 lines
2.0 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Events\RoomJudgeChange;
use App\Http\Controllers\Controller;
use App\Models\Audition;
use App\Models\Room;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use function redirect;
class RoomController extends Controller
{
public function index()
{
if(! Auth::user()->is_admin) abort(403);
#$unassignedAuditions = Audition::with('entries')->where('room_id','=','0')->orderBy('score_order')->get();
$rooms = Room::with('auditions.entries')->orderBy('name')->get();
return view('admin.rooms.index', ['rooms' => $rooms]);
}
public function judgingAssignment()
{
$usersWithoutRooms = User::doesntHave('rooms')->orderBy('last_name')->orderBy('first_name')->get();
$usersWithRooms = User::has('rooms')->orderBy('last_name')->orderBy('first_name')->get();
$rooms = Room::with(['judges.school','auditions'])->get();
return view('admin.rooms.judge_assignments', compact('usersWithoutRooms','usersWithRooms','rooms'));
}
public function updateJudgeAssignment(Request $request, Room $room)
{
$validData = $request->validate([
'judge' => 'exists:users,id'
]);
$judge = User::find($validData['judge']);
if($request->isMethod('post')) {
// attach judge on post
$room->judges()->attach($judge->id);
$message = "Assigned " . $judge->full_name() . " to " . $room->name;
} elseif ($request->isMethod('delete')) {
// detach judge on delete
$room->judges()->detach($judge->id);
$message = "Removed " . $judge->full_name() . " from " . $room->name;
} else {
return redirect('/admin/rooms/judging_assignments')->with('error', 'Invalid request method.');
}
RoomJudgeChange::dispatch();
return redirect('/admin/rooms/judging_assignments')->with('success',$message);
}
// TODO need to be able to add new rooms. Dispatch RoomJudgeChange when we do.
}