auditionadmin/app/Http/Controllers/DoublerRequestController.php

90 lines
3.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\AuditLogEntry;
use App\Models\DoublerRequest;
use App\Models\Event;
use App\Models\Student;
use App\Services\DoublerService;
use Barryvdh\Debugbar\Facades\Debugbar;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use function auth;
use function compact;
use function request;
use function to_route;
class DoublerRequestController extends Controller
{
public function index(DoublerService $doublerService)
{
$events = Event::all();
$students = auth()->user()->school->students;
$studentIds = $students->pluck('id');
$existingRequests = DoublerRequest::whereIn('student_id', $studentIds)->get();
$doublers = [];
foreach ($events as $event) {
$event_doublers = $doublerService->doublersForEvent($event);
$doublers[$event->id] = $event_doublers;
}
return view('doubler_request.index', compact('events', 'doublers', 'students', 'existingRequests'));
}
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function makeRequest()
{
foreach (request()->get('doubler_requests') as $event_id => $requests) {
if (! Event::find($event_id)->exists()) {
return to_route('doubler_request.index')->with('error', 'Invalid event id specified');
}
$thisEvent = Event::find($event_id);
foreach ($requests as $student_id => $request) {
if (! Student::find($student_id)->exists()) {
return to_route('doubler_request.index')->with('error', 'Invalid student id specified');
}
$thisStudent = Student::find($student_id);
if (! $request) {
$oldRequest = DoublerRequest::where('student_id', $student_id)
->where('event_id', $event_id)
->first();
if ($oldRequest) {
Debugbar::info('hit');
AuditLogEntry::create([
'user' => auth()->user()->email,
'ip_address' => request()->ip(),
'message' => 'Removed doubler request for '.$thisStudent->full_name().' in '.$thisEvent->name,
'affected' => ['students' => [$student_id]],
]);
$oldRequest->delete();
}
continue;
}
DoublerRequest::upsert([
'event_id' => $event_id,
'student_id' => $student_id,
'request' => $request,
],
uniqueBy: ['event_id', 'student_id'],
update: ['request']
);
AuditLogEntry::create([
'user' => auth()->user()->email,
'ip_address' => request()->ip(),
'message' => 'Made doubler request for '.$thisStudent->full_name().' in '.$thisEvent->name.'<br>Request: '.$request,
'affected' => ['students' => [$student_id]],
]);
}
}
echo 'hi';
return to_route('doubler_request.index')->with('success', 'Recorded doubler requests');
}
}