auditionadmin/app/Http/Controllers/Admin/SplitScoreDefinitionControl...

79 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\EditSplitScoreDefinitionRequest;
use App\Models\Audition;
use App\Models\SplitScoreDefinition;
use Illuminate\Http\Request;
class SplitScoreDefinitionController extends Controller
{
public function index()
{
$splitScores = SplitScoreDefinition::all();
return view('admin.split_score_definitions.index', compact('splitScores'));
}
public function create()
{
$availableAuditions = Audition::doesntHave('splitScoreDefinition')->get();
return view('admin.split_score_definitions.create', compact('availableAuditions'));
}
public function store(Request $request)
{
$validated = $request->validate([
'audition_id' => 'required|exists:auditions,id|unique:split_score_definitions,audition_id',
]);
$newSplit = SplitScoreDefinition::create([
'audition_id' => $validated['audition_id'],
'splits' => [],
]);
return redirect()->route('admin.split_score_definitions.edit', $newSplit)->with('success',
'Split score definition created');
}
public function edit(SplitScoreDefinition $splitScoreDefinition)
{
$subscores = $splitScoreDefinition->audition->scoringGuide->subscores;
$judges = $splitScoreDefinition->audition->room->judges;
return view('admin.split_score_definitions.edit', compact('splitScoreDefinition', 'subscores', 'judges'));
}
public function update(EditSplitScoreDefinitionRequest $request, SplitScoreDefinition $splitScoreDefinition)
{
$savedSplits = $splitScoreDefinition->splits;
if ($request->validated()['split'] ?? false) {
$newSplit = [];
$submittedSplitData = $request->validated()['split'];
foreach ($submittedSplitData as $splitName => $splitData) {
$name = $splitName;
$judges = array_values($splitData['judges'] ?? []);
$subscores = array_values($splitData['subscores'] ?? []);
$newSplit[$name] = ['judges' => $judges, 'subscores' => $subscores];
}
$splitScoreDefinition->splits = $newSplit;
$splitScoreDefinition->save();
}
if ($request->validated()['new_split'] ?? false) {
$savedSplits[$request->validated()['new_split']] = ['judges' => [], 'subscores' => []];
$splitScoreDefinition->splits = $savedSplits;
$splitScoreDefinition->save();
}
return redirect()->route('admin.split_score_definitions.edit', $splitScoreDefinition);
}
public function destroy(SplitScoreDefinition $scoreDefinition)
{
}
}