90 lines
3.4 KiB
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');
|
|
}
|
|
}
|