130 lines
4.4 KiB
PHP
130 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Events\ScoringGuideChange;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\ScoringGuide;
|
|
use App\Models\SubscoreDefinition;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use function abort;
|
|
use function dd;
|
|
use function request;
|
|
use function response;
|
|
|
|
class ScoringGuideController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
if (! Auth::user()->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')
|
|
]);
|
|
|
|
ScoringGuideChange::dispatch();
|
|
|
|
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')
|
|
]);
|
|
ScoringGuideChange::dispatch();
|
|
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,
|
|
]);
|
|
ScoringGuideChange::dispatch();
|
|
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]);
|
|
}
|
|
ScoringGuideChange::dispatch();
|
|
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]);
|
|
}
|
|
ScoringGuideChange::dispatch();
|
|
return response()->json(['status'=>'success']);
|
|
|
|
}
|
|
}
|