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

121 lines
4.0 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\ScoringGuide;
use App\Models\SubscoreDefinition;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use function abort;
use function dd;
use function request;
use function response;
use function sendMessage;
class ScoringGuideController extends Controller
{
public function index()
{
if (! Auth::user()->is_admin) abort(403);
$guides = ScoringGuide::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']);
}
}