From b5cb2a78701214fc5daaa43a2c0240d73fc13428 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Thu, 29 May 2025 18:20:37 -0500 Subject: [PATCH] Add admin option to reset site. --- .../YearEndProcedures/YearEndCleanup.php | 23 +++++++++------- .../Admin/YearEndResetController.php | 26 +++++++++++++++++++ .../views/admin/year_end_reset.blade.php | 23 ++++++++++++++++ .../layout/navbar/menus/admin.blade.php | 1 + routes/admin.php | 5 ++++ 5 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 app/Http/Controllers/Admin/YearEndResetController.php create mode 100644 resources/views/admin/year_end_reset.blade.php diff --git a/app/Actions/YearEndProcedures/YearEndCleanup.php b/app/Actions/YearEndProcedures/YearEndCleanup.php index ccf4861..8605c03 100644 --- a/app/Actions/YearEndProcedures/YearEndCleanup.php +++ b/app/Actions/YearEndProcedures/YearEndCleanup.php @@ -13,6 +13,7 @@ use App\Models\JudgeAdvancementVote; use App\Models\NominationEnsembleEntry; use App\Models\ScoreSheet; use App\Models\Seat; +use App\Models\Student; use Illuminate\Support\Facades\DB; use function auth; @@ -23,20 +24,20 @@ class YearEndCleanup { } - public function __invoke(): void + public function __invoke(array $options = []): void { - $this->cleanup(); + $this->cleanup($options); } /** * @param $options array array of reset options - possible values are deleteRooms - * removeAuditionsFromRoom unassignJudges - + * removeAuditionsFromRoom unassignJudges * * @throws AuditionAdminException */ - public function cleanup($options = []): true + public function cleanup(array $options = []): true { + if (! auth()->user() or ! auth()->user()->is_admin) { throw new AuditionAdminException('Only administrators may perform this action'); } @@ -54,20 +55,22 @@ class YearEndCleanup DB::table('entries')->delete(); NominationEnsembleEntry::truncate(); + Student::query()->increment('grade'); + if (in_array('deleteRooms', $options)) { DB::table('auditions')->update(['room_id' => null]); - DB::table('auditions')->update(['order_in_room' => null]); - DB::table('room_judges')->truncate(); - DB::table('rooms')->truncate(); + DB::table('auditions')->update(['order_in_room' => '0']); + DB::table('room_user')->truncate(); + DB::table('rooms')->delete(); } if (in_array('removeAuditionsFromRoom', $options)) { DB::table('auditions')->update(['room_id' => null]); - DB::table('auditions')->update(['order_in_room' => null]); + DB::table('auditions')->update(['order_in_room' => '0']); } if (in_array('unassignJudges', $options)) { - DB::table('room_judges')->truncate(); + DB::table('room_user')->truncate(); } return true; diff --git a/app/Http/Controllers/Admin/YearEndResetController.php b/app/Http/Controllers/Admin/YearEndResetController.php new file mode 100644 index 0000000..52d81d2 --- /dev/null +++ b/app/Http/Controllers/Admin/YearEndResetController.php @@ -0,0 +1,26 @@ +options; + $cleanUpProcedure($options); + auditionLog('Executed year end reset.', []); + + return redirect()->route('dashboard')->with('success', 'Year end reset completed'); + } +} diff --git a/resources/views/admin/year_end_reset.blade.php b/resources/views/admin/year_end_reset.blade.php new file mode 100644 index 0000000..47cf818 --- /dev/null +++ b/resources/views/admin/year_end_reset.blade.php @@ -0,0 +1,23 @@ + + Year End Reset + + Reset Options + + + + + + + Complete Year End Reset + + + Confirm Year End Reset + Confirm you would like to perform a year end reset. This will delete all seats, scores, entries, and log entries, + as well as any optional data you chose. It will also increment the grade of all students in the database. + This action will result in data loss and cannot be undone. + Confirm Reset + + + + + diff --git a/resources/views/components/layout/navbar/menus/admin.blade.php b/resources/views/components/layout/navbar/menus/admin.blade.php index cfae63a..00abdd5 100644 --- a/resources/views/components/layout/navbar/menus/admin.blade.php +++ b/resources/views/components/layout/navbar/menus/admin.blade.php @@ -32,6 +32,7 @@ Export Results Export Entries Print Stand Name Tags + Year End Reset diff --git a/routes/admin.php b/routes/admin.php index 13a4c17..bb55c10 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -21,6 +21,7 @@ use App\Http\Controllers\Admin\SchoolController; use App\Http\Controllers\Admin\ScoringGuideController; use App\Http\Controllers\Admin\StudentController; use App\Http\Controllers\Admin\UserController; +use App\Http\Controllers\Admin\YearEndResetController; use App\Http\Middleware\CheckIfAdmin; use Illuminate\Support\Facades\Route; @@ -33,6 +34,10 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')-> Route::get('/recap', [RecapController::class, 'selectAudition'])->name('admin.recap.selectAudition'); Route::get('/recap/{audition}', [RecapController::class, 'showRecap'])->name('admin.recap.recap'); + // Year end prodecures + Route::get('/year_end_procedures', [YearEndResetController::class, 'index'])->name('admin.year_end_procedures'); + Route::post('/year_end_procedures', [YearEndResetController::class, 'execute'])->name('admin.year_end_procedures'); + Route::post('/auditions/roomUpdate', [ AuditionController::class, 'roomUpdate', ]); // Endpoint for JS assigning auditions to rooms