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 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 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