diff --git a/app/Http/Controllers/Admin/RoomController.php b/app/Http/Controllers/Admin/RoomController.php
index 5b85165..94ed219 100644
--- a/app/Http/Controllers/Admin/RoomController.php
+++ b/app/Http/Controllers/Admin/RoomController.php
@@ -5,8 +5,10 @@ namespace App\Http\Controllers\Admin;
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
{
@@ -17,4 +19,39 @@ class RoomController extends Controller
$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('users')->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.');
+ }
+
+ return redirect('/admin/rooms/judging_assignments')->with('success',$message);
+ }
+
+
+
+
}
diff --git a/app/Models/Room.php b/app/Models/Room.php
index d5c6778..233819a 100644
--- a/app/Models/Room.php
+++ b/app/Models/Room.php
@@ -4,6 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
@@ -27,4 +28,14 @@ class Room extends Model
'id' // Local key on the Auditions table
);
}
+
+ public function users(): BelongsToMany
+ {
+ return $this->belongsToMany(User::class,'room_user');
+ }
+
+ public function judges(): BelongsToMany
+ {
+ return $this->belongsToMany(User::class,'room_user','room_id','user_id');
+ }
}
diff --git a/app/Models/User.php b/app/Models/User.php
index 2679295..d9ab82f 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -6,6 +6,7 @@ namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
@@ -95,6 +96,16 @@ class User extends Authenticatable implements MustVerifyEmail
);
}
+ public function rooms(): BelongsToMany
+ {
+ return $this->belongsToMany(Room::class,'room_user');
+ }
+
+ public function judgingAssignments(): BelongsToMany
+ {
+ return $this->rooms();
+ }
+
/**
* Return an array of schools using the users email domain
* @return SchoolEmailDomain[]
diff --git a/database/migrations/2024_06_05_055202_create_user_room_pivot_table.php b/database/migrations/2024_06_05_055202_create_user_room_pivot_table.php
new file mode 100644
index 0000000..9696b92
--- /dev/null
+++ b/database/migrations/2024_06_05_055202_create_user_room_pivot_table.php
@@ -0,0 +1,31 @@
+id();
+ $table->foreignIdFor(Room::class)->constrained()->cascadeOnUpdate()->cascadeOnDelete();
+ $table->foreignIdFor(User::class)->constrained()->cascadeOnUpdate()->cascadeOnDelete();
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('user_room_pivot');
+ }
+};
diff --git a/resources/views/admin/rooms/judge_assignments.blade.php b/resources/views/admin/rooms/judge_assignments.blade.php
new file mode 100644
index 0000000..0afe203
--- /dev/null
+++ b/resources/views/admin/rooms/judge_assignments.blade.php
@@ -0,0 +1,115 @@
+ {{ $room->name }} {{ $room->description }} {{ $audition->name }}
+ {{ $judge->full_name() }},
+ Vinita
+ Admin {{ $room->name }} {{ $room->description }} {{ $audition->name }}
+ Matt Young,
+ Vinita
+ Admin
+
+ @foreach($rooms as $room)
+ @if($room->id == 0)
+ @continue
+ @endif
+
+ {{-- Judge Listing --}}
+ @foreach($room->judges as $judge)
+
+
+
+ @foreach($rooms as $room)
+ @if($room->id == 0)
+ @continue
+ @endif
+
+ {{-- Judge Listing --}}
+
+
+