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

142 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Audition;
use App\Models\Entry;
use App\Models\School;
use App\Models\Student;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use function compact;
class EntryController extends Controller
{
public function index()
{
if (! Auth::user()->is_admin) {
abort(403);
}
$filters = session('adminEntryFilters') ?? null;
$minGrade = Audition::min('minimum_grade');
$maxGrade = Audition::max('maximum_grade');
$auditions = Audition::orderBy('score_order')->get();
$schools = School::orderBy('name')->get();
$entries = Entry::with(['student.school', 'audition']);
$entries->orderBy('updated_at', 'DESC');
if ($filters) {
if ($filters['id']) {
$entries->where('id', $filters['id']);
}
if ($filters['audition']) {
$entries->where('audition_id', $filters['audition']);
}
if ($filters['school']) {
$entries->whereHas('student', function ($query) use ($filters) {
$query->where('school_id', '=', $filters['school']);
});
}
if ($filters['grade']) {
$entries->whereHas('student', function ($query) use ($filters) {
$query->where('grade', $filters['grade']);
});
}
if ($filters['first_name']) {
$entries->whereHas('student', function ($query) use ($filters) {
$query->where('first_name', 'like', '%'.$filters['first_name'].'%');
});
}
if ($filters['last_name']) {
$entries->whereHas('student', function ($query) use ($filters) {
$query->where('last_name', 'like', '%'.$filters['last_name'].'%');
});
}
}
$entries = $entries->paginate(10);
return view('admin.entries.index', ['entries' => $entries,
'auditions' => $auditions,
'schools' => $schools,
'minGrade' => $minGrade,
'maxGrade' => $maxGrade,
'filters' => $filters]);
}
public function create()
{
if (! Auth::user()->is_admin) {
abort(403);
}
$students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get();
$auditions = Audition::orderBy('score_order')->get();
return view('admin.entries.create', ['students' => $students, 'auditions' => $auditions]);
}
public function store(Request $request)
{
if (! Auth::user()->is_admin) {
abort(403);
}
$validData = request()->validate([
'student_id' => ['required', 'exists:students,id'],
'audition_id' => ['required', 'exists:auditions,id'],
]);
$validData['for_seating'] = $request->get('for_seating') ? 1 : 0;
$validData['for_advancement'] = $request->get('for_advancement') ? 1 : 0;
Entry::create([
'student_id' => $validData['student_id'],
'audition_id' => $validData['audition_id'],
'for_seating' => $validData['for_seating'],
'for_advancement' => $validData['for_advancement'],
]);
return redirect('/admin/entries');
}
public function edit(Entry $entry)
{
if (! Auth::user()->is_admin) {
abort(403);
}
$students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get();
$auditions = Audition::orderBy('score_order')->get();
$scores = $entry->scoreSheets()->get();
// return view('admin.entries.edit', ['entry' => $entry, 'students' => $students, 'auditions' => $auditions]);
return view('admin.entries.edit', compact('entry', 'students', 'auditions', 'scores'));
}
public function update(Request $request, Entry $entry)
{
if (! Auth::user()->is_admin) {
abort(403);
}
$validData = request()->validate([
'student_id' => ['required', 'exists:students,id'],
'audition_id' => ['required', 'exists:auditions,id'],
]);
$validData['for_seating'] = $request->get('for_seating') ? 1 : 0;
$validData['for_advancement'] = $request->get('for_advancement') ? 1 : 0;
$entry->update([
'student_id' => $validData['student_id'],
'audition_id' => $validData['audition_id'],
'for_seating' => $validData['for_seating'],
'for_advancement' => $validData['for_advancement'],
]);
return redirect('/admin/entries');
}
}