diff --git a/app/Http/Controllers/EntryController.php b/app/Http/Controllers/EntryController.php index 2932b4f..744c690 100644 --- a/app/Http/Controllers/EntryController.php +++ b/app/Http/Controllers/EntryController.php @@ -41,6 +41,7 @@ class EntryController extends Controller public function destroy(Request $request, Entry $entry) { + if ($request->user()->cannot('delete', $entry)) abort(403); $entry->delete(); return redirect('/entries')->with('success','The ' . $entry->audition->name . 'entry for ' . $entry->student->full_name(). 'has been deleted.'); diff --git a/app/Http/Controllers/JudgingController.php b/app/Http/Controllers/JudgingController.php index a531089..8857ab2 100644 --- a/app/Http/Controllers/JudgingController.php +++ b/app/Http/Controllers/JudgingController.php @@ -33,7 +33,8 @@ class JudgingController extends Controller public function entryScoreSheet(Entry $entry) { // TODO verify user is assigned to judge this audition - return view('judging.entry_score_sheet',compact('entry')); + $oldSheet = ScoreSheet::where('user_id',Auth::id())->where('entry_id',$entry->id)->value('subscores') ?? null; + return view('judging.entry_score_sheet',compact('entry','oldSheet')); } public function saveScoreSheet(Request $request, Entry $entry) @@ -64,5 +65,31 @@ class JudgingController extends Controller } + public function updateScoreSheet(Request $request, Entry $entry) + { + $scoreSheet = ScoreSheet::where('user_id',Auth::id())->where('entry_id',$entry->id)->first(); + if (!$scoreSheet) return redirect()->back()->with('error','Attempt to edit non existent entry'); + Gate::authorize('update',$scoreSheet); + + $scoringGuide = $entry->audition->scoringGuide()->with('subscores')->first(); + $scoreValidation = $scoringGuide->validateScores($request->input('score')); + if ($scoreValidation != 'success') { + return redirect(url()->previous())->with('error', $scoreValidation)->with('oldScores',$request->all()); + } + $scoreSheetArray = []; + foreach($scoringGuide->subscores as $subscore) { + $scoreSheetArray[$subscore->id] = [ + 'score' => $request->input('score')[$subscore->id], + 'subscore_id' => $subscore->id, + 'subscore_name' => $subscore->name + ]; + } + + $scoreSheet->update([ + 'subscores' => $scoreSheetArray + ]); + return redirect('/judging/audition/' . $entry->audition_id)->with('success','Updated scores for ' . $entry->audition->name . ' ' . $entry->draw_number); + } + } diff --git a/app/Policies/EntryPolicy.php b/app/Policies/EntryPolicy.php index abd0e6e..e080f66 100644 --- a/app/Policies/EntryPolicy.php +++ b/app/Policies/EntryPolicy.php @@ -50,6 +50,11 @@ class EntryPolicy public function delete(User $user, Entry $entry): bool { if($user->is_admin) return true; + // Return false if $entry->audition->entry_deadline is in the past, continue if not + if ($entry->audition->entry_deadline < now()) { + return false; + } + return $user->school_id == $entry->student()->school_id; } diff --git a/app/Policies/ScoreSheetPolicy.php b/app/Policies/ScoreSheetPolicy.php index 3b3f900..c83ebdd 100644 --- a/app/Policies/ScoreSheetPolicy.php +++ b/app/Policies/ScoreSheetPolicy.php @@ -39,7 +39,7 @@ class ScoreSheetPolicy */ public function update(User $user, ScoreSheet $scoreSheet): bool { - // + return $user->id == $scoreSheet->user_id; } /** diff --git a/phpunit.xml b/phpunit.xml index 506b9a3..c1c967f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -22,8 +22,8 @@ - - + + diff --git a/resources/views/admin/users/index.blade.php b/resources/views/admin/users/index.blade.php index 26fdece..4379bab 100644 --- a/resources/views/admin/users/index.blade.php +++ b/resources/views/admin/users/index.blade.php @@ -22,7 +22,7 @@ @foreach($users as $user) {{ $user->full_name(true) }} - {{ $user->has_school() ? $user->school->name : ' ' }} {{-- TODO link to the school --}} + {{ $user->has_school() ? $user->school->name : ' ' }} {{ $user->email }} {{ $user->cell_phone }} {{ $user->judging_preference }} diff --git a/resources/views/entries/index.blade.php b/resources/views/entries/index.blade.php index ad5f4bf..7da0984 100644 --- a/resources/views/entries/index.blade.php +++ b/resources/views/entries/index.blade.php @@ -56,16 +56,16 @@ {{ $entry->student->full_name(true) }} {{ $entry->student->grade }} {{ $entry->audition->name }} -{{-- TODO block deletion of entries past the deadline--}} -
- @csrf - @method('DELETE') - Delete -
- + @if( $entry->audition->entry_deadline >= now()) +
+ @csrf + @method('DELETE') + Delete +
+ @endif
@endforeach diff --git a/resources/views/judging/entry_score_sheet.blade.php b/resources/views/judging/entry_score_sheet.blade.php index c4abad5..36054ba 100644 --- a/resources/views/judging/entry_score_sheet.blade.php +++ b/resources/views/judging/entry_score_sheet.blade.php @@ -16,15 +16,27 @@ + @if($oldSheet) {{-- if there are existing sores, make this a patch request --}} + @method('PATCH') + @endif @foreach($entry->audition->scoringGuide->subscores()->orderBy('display_order')->get() as $subscore) + @php + if($oldScores) { + $value = $oldScores['score'][$subscore->id]; + } elseif ($oldSheet) { + $value = $oldSheet[$subscore->id]['score']; + } else { + $value = ''; + } + @endphp
  • diff --git a/routes/web.php b/routes/web.php index 509f2db..c5b9a2d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,7 +17,7 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Route; Route::get('/test',[TestController::class,'flashTest'])->middleware('auth','verified'); -Route::view('/','welcome')->middleware('guest'); +Route::view('/','welcome')->middleware('guest')->name('home'); // Judging Routes Route::middleware(['auth','verified',CheckIfCanJudge::class])->prefix('judging')->controller(JudgingController::class)->group(function() { @@ -25,6 +25,7 @@ Route::middleware(['auth','verified',CheckIfCanJudge::class])->prefix('judging') Route::get('/audition/{audition}','auditionEntryList'); Route::get('/entry/{entry}','entryScoreSheet'); Route::post('/entry/{entry}','saveScoreSheet'); + Route::patch('/entry/{entry}','updateScoreSheet'); }); // Tabulation Routes diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php deleted file mode 100644 index 8b5843f..0000000 --- a/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,7 +0,0 @@ -get('/'); - - $response->assertStatus(200); -}); diff --git a/tests/Feature/PagesResponseTest.php b/tests/Feature/PagesResponseTest.php new file mode 100644 index 0000000..ae55d1d --- /dev/null +++ b/tests/Feature/PagesResponseTest.php @@ -0,0 +1,9 @@ +assertOk(); +});