121 lines
4.1 KiB
PHP
121 lines
4.1 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()
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
request()->validate([
|
|
'student_id' => ['required', 'exists:students,id'],
|
|
'audition_id' => ['required', 'exists:auditions,id'],
|
|
]);
|
|
|
|
Entry::create([
|
|
'student_id' => request('student_id'),
|
|
'audition_id' => request('audition_id'),
|
|
]);
|
|
|
|
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(Entry $entry)
|
|
{
|
|
if(! Auth::user()->is_admin) abort(403);
|
|
request()->validate([
|
|
'student_id' => ['required', 'exists:students,id'],
|
|
'audition_id' => ['required', 'exists:auditions,id'],
|
|
]);
|
|
|
|
$entry->update([
|
|
'student_id' => request('student_id'),
|
|
'audition_id' => request('audition_id'),
|
|
]);
|
|
|
|
return redirect('/admin/entries');
|
|
}
|
|
|
|
|
|
}
|