is_admin) { abort(403); } DB::table('auditions') ->whereNull('scoring_guide_id') ->update(['scoring_guide_id' => 0]); $guides = ScoringGuide::with('auditions')->orderBy('name')->get(); return view('admin.scoring.index', ['guides' => $guides]); } public function store() { if (! Auth::user()->is_admin) { abort(403); } request()->validate([ 'name' => ['required', 'unique:scoring_guides'], ]); $guide = ScoringGuide::create([ 'name' => request('name'), ]); return redirect('/admin/scoring'); } public function edit(Request $request, ScoringGuide $guide) { if (! Auth::user()->is_admin) { abort(403); } $tab = $request->query('tab') ?? 'detail'; if ($tab == 'tiebreakOrder') { $subscores = SubscoreDefinition::where('scoring_guide_id', $guide->id)->orderBy('tiebreak_order')->get(); } else { $subscores = SubscoreDefinition::where('scoring_guide_id', $guide->id)->orderBy('display_order')->get(); } return view('admin.scoring.edit', ['guide' => $guide, 'subscores' => $subscores, 'tab' => $tab]); } public function update(ScoringGuide $guide) { if (! Auth::user()->is_admin) { abort(403); } request()->validate([ 'name' => ['required', 'unique:scoring_guides'], ]); $guide->update([ 'name' => request('name'), ]); return redirect('/admin/scoring/guides/'.$guide->id.'/edit')->with('success', 'Scoring guide updated'); } public function destroy(ScoringGuide $guide) { if (! Auth::user()->is_admin) { abort(403); } if ($guide->auditions()->count() > 0) { return redirect('/admin/scoring')->with('error', 'Cannot delete scoring guide with auditions'); } $guide->delete(); return redirect('/admin/scoring')->with('success', 'Scoring guide deleted'); } public function subscore_store(Request $request, ScoringGuide $guide) { if (! Auth::user()->is_admin) { abort(403); } if (! $guide->exists()) { abort(409); } $validateData = request()->validate([ 'name' => ['required'], 'max_score' => ['required', 'integer'], 'weight' => ['required', 'integer'], 'for_seating' => ['nullable', 'boolean'], 'for_advance' => ['nullable', 'boolean'], ]); $for_seating = $request->has('for_seating') ? (bool) $request->input('for_seating') : false; $for_advance = $request->has('for_advance') ? (bool) $request->input('for_advance') : false; $display_order = SubscoreDefinition::where('scoring_guide_id', '=', $guide->id)->max('display_order') + 1; $tiebreak_order = SubscoreDefinition::where('scoring_guide_id', '=', $guide->id)->max('tiebreak_order') + 1; $subscore = SubscoreDefinition::create([ 'scoring_guide_id' => $guide->id, 'name' => $validateData['name'], 'max_score' => $validateData['max_score'], 'weight' => $validateData['weight'], 'display_order' => $display_order, 'tiebreak_order' => $tiebreak_order, 'for_seating' => $for_seating, 'for_advance' => $for_advance, ]); return redirect('/admin/scoring/guides/'.$guide->id.'/edit')->with('success', 'Subscore added'); } public function subscore_update(ScoringGuide $guide, SubscoreDefinition $subscore) { if (! Auth::user()->is_admin) { abort(403); } if (! $guide->exists() || ! $subscore->exists()) { abort(409); } if ($subscore->scoring_guide_id !== $guide->id) { // Make sure the subscore were updating belongs to the guide abort(409); } $validateData = request()->validate([ 'name' => ['required'], 'max_score' => ['required', 'integer'], 'weight' => ['required', 'integer'], 'for_seating' => ['nullable', 'boolean'], 'for_advance' => ['nullable', 'boolean'], ]); $for_seating = request()->has('for_seating') ? (bool) request()->input('for_seating') : false; $for_advance = request()->has('for_advance') ? (bool) request()->input('for_advance') : false; $subscore->update([ 'name' => $validateData['name'], 'max_score' => $validateData['max_score'], 'weight' => $validateData['weight'], 'for_seating' => $for_seating, 'for_advance' => $for_advance, ]); return redirect('/admin/scoring/guides/'.$guide->id.'/edit')->with('success', 'Subscore updated'); } public function subscore_destroy(ScoringGuide $guide, SubscoreDefinition $subscore) { if (! Auth::user()->is_admin) { abort(403); } if (! $guide->exists() || ! $subscore->exists()) { abort(409); } if ($subscore->scoring_guide_id !== $guide->id) { // Make sure the subscore were updating belongs to the guide abort(409); } $subscore->delete(); return redirect('/admin/scoring/guides/'.$guide->id.'/edit')->with('success', 'Subscore deleted'); } public function reorder_display(Request $request) { if (! Auth::user()->is_admin) { abort(403); } $order = $request->order; foreach ($order as $index => $id) { $subscore = SubscoreDefinition::find($id); $subscore->update(['display_order' => $index]); } return response()->json(['status' => 'success']); } public function reorder_tiebreak(Request $request) { if (! Auth::user()->is_admin) { abort(403); } $order = $request->order; foreach ($order as $index => $id) { $subscore = SubscoreDefinition::find($id); $subscore->update(['tiebreak_order' => $index]); } return response()->json(['status' => 'success']); } } // TODO need to be able to delete a scoring guide