validate([ 'ensemble' => ['required', 'array'], 'ensemble.*' => ['required', 'integer', 'min:0'], ]); $proposedSeatingArray = []; try { $rankedEntries = $ranker($audition, 'seating'); } catch (AuditionAdminException $e) { return redirect()->route('seating.audition', ['audition' => $audition->id]) ->with('error', $e->getMessage()); } $rankedEntries = $rankedEntries->reject(function ($entry) { return $entry->hasFlag('declined'); }); $rankedEntries->load(['student.school']); $rankedEnsembles = Ensemble::orderBy('rank')->where('event_id', $audition->event_id)->get(); $ensembleRankOn = 1; foreach ($rankedEnsembles as $ensemble) { if (! Arr::has($validated['ensemble'], $ensemble->id)) { continue; } $proposedSeatingArray[$ensembleRankOn]['ensemble_id'] = $ensemble->id; $proposedSeatingArray[$ensembleRankOn]['ensemble_name'] = $ensemble->name; $proposedSeatingArray[$ensembleRankOn]['accept_count'] = $validated['ensemble'][$ensemble->id]; for ($n = 1; $n <= $validated['ensemble'][$ensemble->id]; $n++) { // Escape the loop if we're out of entries if ($rankedEntries->isEmpty()) { break; } $thisEntry = $rankedEntries->shift(); $proposedSeatingArray[$ensembleRankOn]['seats'][$n]['seat'] = $n; $proposedSeatingArray[$ensembleRankOn]['seats'][$n]['entry_id'] = $thisEntry->id; $proposedSeatingArray[$ensembleRankOn]['seats'][$n]['entry_name'] = $thisEntry->student->full_name(); $proposedSeatingArray[$ensembleRankOn]['seats'][$n]['entry_school'] = $thisEntry->student->school->name; } $ensembleRankOn++; } $sessionKeyName = 'proposedSeatingArray-'.$audition->id; $request->session()->put($sessionKeyName, $proposedSeatingArray); return redirect()->route('seating.audition', ['audition' => $audition->id]); } public function clearDraft( Audition $audition ) { session()->forget('proposedSeatingArray-'.$audition->id); return redirect()->route('seating.audition', ['audition' => $audition->id]); } }