auditionadmin/routes/admin.php

248 lines
14 KiB
PHP

<?php
// Admin Routes
use App\Http\Controllers\Admin\AssignMonitorsController;
use App\Http\Controllers\Admin\AuditionController;
use App\Http\Controllers\Admin\AuditionSettings;
use App\Http\Controllers\Admin\BonusScoreDefinitionController;
use App\Http\Controllers\Admin\DrawController;
use App\Http\Controllers\Admin\EnsembleController;
use App\Http\Controllers\Admin\EntryController;
use App\Http\Controllers\Admin\EventController;
use App\Http\Controllers\Admin\ExportEntriesController;
use App\Http\Controllers\Admin\ExportResultsController;
use App\Http\Controllers\Admin\ImpersonationController;
use App\Http\Controllers\Admin\PrelimDefinitionController;
use App\Http\Controllers\Admin\PrintCards;
use App\Http\Controllers\Admin\PrintRoomAssignmentsController;
use App\Http\Controllers\Admin\PrintSignInSheetsController;
use App\Http\Controllers\Admin\PrintStandNameTagsController;
use App\Http\Controllers\Admin\RecapController;
use App\Http\Controllers\Admin\RoomController;
use App\Http\Controllers\Admin\SchoolController;
use App\Http\Controllers\Admin\ScoringGuideController;
use App\Http\Controllers\Admin\SplitScoreDefinitionController;
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;
Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')->group(function () {
Route::view('/', 'admin.dashboard')->name('admin.dashboard');
Route::get('/logs', App\Http\Controllers\Admin\LogViewer::class)->name('admin.view_logs');
Route::get('/export_results', ExportResultsController::class)->name('admin.export_results');
Route::get('/export_entries', ExportEntriesController::class)->name('admin.export_entries');
Route::get('/print_stand_name_tags', PrintStandNameTagsController::class)->name('admin.print_stand_name_tags');
Route::get('/recap', [RecapController::class, 'selectAudition'])->name('admin.recap.selectAudition');
Route::get('/recap/{audition}', [RecapController::class, 'showRecap'])->name('admin.recap.recap');
// Year-end procedures
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',
])->name('admin.roomUpdate'); // Endpoint for JS assigning auditions to rooms
Route::post('/scoring/assign_guide_to_audition', [
AuditionController::class, 'scoringGuideUpdate',
])->name('ajax.assignScoringGuideToAudition'); // Endpoint for JS assigning scoring guides to auditions
Route::get('/settings', [AuditionSettings::class, 'index'])->name('audition-settings');
Route::post('/settings',
[AuditionSettings::class, 'save'])->name('audition-settings-save');
// Admin Assign Monitors Routes
Route::prefix('assign_monitors')->controller(AssignMonitorsController::class)->group(function () {
Route::get('/', 'index')->name('admin.assign_monitors.index');
Route::post('/', 'store')->name('admin.assign_monitors.store');
});
// Admin Bonus Scores Routes
Route::prefix('bonus-scores')->controller(BonusScoreDefinitionController::class)->group(function () {
Route::get('/', 'index')->name('admin.bonus-scores.index');
Route::post('/', 'store')->name('admin.bonus-scores.store');
Route::post('/assign_auditions', 'assignAuditions')->name('admin.bonus-scores.addAuditions');
Route::delete('/{audition}/unassign_audition', 'unassignAudition')->name('admin.bonus-scores.unassignAudition');
Route::delete('/{bonusScore}', 'destroy')->name('admin.bonus-scores.destroy');
Route::get('/judges', 'judges')->name('admin.bonus-scores.judges');
Route::delete('{bonusScore}/judges/', 'removeJudge')->name('admin.bonus-scores.judges.remove');
Route::post('{bonusScore}/judges/', 'assignJudge')->name('admin.bonus-scores.judges.assign');
Route::patch('/{bonusScore}', 'update')->name('admin.bonus-scores.update');
});
// Admin Ensemble Routes
Route::prefix('ensembles')->controller(EnsembleController::class)->group(function () {
Route::get('/', 'index')->name('admin.ensembles.index');
Route::post('/', 'store')->name('admin.ensembles.store');
Route::delete('/{ensemble}', 'destroy')->name('admin.ensembles.destroy');
Route::post('/updateEnsembleRank', 'updateEnsembleRank')->name('admin.ensembles.updateEnsembleRank');
Route::patch('/{ensemble}', 'update')->name('admin.ensembles.update');
Route::get('/seating-limits', 'seatingLimits')->name('admin.ensembles.seatingLimits');
Route::get('/seating-limits/{ensemble}', 'seatingLimits')->name('admin.ensembles.seatingLimits.ensemble');
Route::post('/seating-limits/{ensemble}',
'seatingLimitsSet')->name('admin.ensembles.seatingLimits.ensemble.set');
});
// Admin Event Routes
Route::prefix('events')->controller(EventController::class)->group(function () {
Route::get('/', 'index')->name('admin.events.index');
Route::post('/', 'store')->name('admin.events.store');
Route::delete('/{event}', 'destroy')->name('admin.events.destroy');
Route::patch('/{event}', 'update')->name('admin.events.update');
});
// Admin Rooms Routes
Route::prefix('rooms')->controller(RoomController::class)->group(function () {
Route::get('/', 'index')->name('admin.rooms.index');
Route::get('/create', 'create')->name('admin.rooms.create');
Route::post('/', 'store')->name('admin.rooms.store');
Route::post('/{room}/edit', 'edit')->name('admin.rooms.edit');
Route::patch('/{room}', 'update')->name('admin.rooms.update');
Route::delete('/{room}', 'destroy')->name('admin.rooms.destroy');
Route::get('/judging_assignments',
'judgingAssignment')->name('admin.rooms.judgingAssignment'); // Screen to assign judges to rooms
Route::match(['post', 'delete'], '/{room}/judge',
'updateJudgeAssignment')->name('admin.rooms.updateJudgeAssignment');
});
// Admin Scoring Guides
Route::prefix('scoring')->controller(ScoringGuideController::class)->group(function () {
Route::get('/', 'index')->name('admin.scoring.index'); // Scoring Setup Homepage
Route::post('/guides', 'store')->name('admin.scoring.store'); // Save a new scoring guide
Route::get('/guides/{guide}/edit/{tab?}', 'edit')->name('admin.scoring.edit'); // Edit scoring guide
Route::patch('/guides/{guide}/edit',
'update')->name('admin.scoring.update'); // Save changes to audition guide (rename)
Route::post('/guides/{guide}/subscore',
'subscore_store')->name('admin.scoring.subscore_store'); // Save a new subscore
Route::patch('/guides/{guide}/subscore/{subscore}',
'subscore_update')->name('admin.scoring.subscore_update'); // Modify a subscore
Route::delete('/guides/{guide}/subscore/{subscore}',
'subscore_destroy')->name('admin.scoring.subscore_destroy'); // Delete a subscore
Route::post('/reorder-display', 'reorder_display')->name('admin.scoring.reorder_display');
Route::post('/reorder-tiebreak', 'reorder_tiebreak')->name('admin.scoring.reorder_tiebreak');
Route::delete('/guides/{guide}', 'destroy')->name('admin.scoring.destroy'); // Delete a scoring guide
});
// Admin Auditions Routes
Route::prefix('auditions')->controller(AuditionController::class)->group(function () {
Route::get('/', 'index')->name('admin.auditions.index');
Route::get('/create', 'create')->name('admin.auditions.create');
Route::post('/', 'store')->name('admin.auditions.store');
Route::get('/{audition}/edit', 'edit')->name('admin.auditions.edit');
Route::patch('/{audition}', 'update')->name('admin.auditions.update');
Route::post('/reorder', 'reorder')->name('admin.auditions.reorder');
Route::delete('/{audition}', 'destroy')->name('admin.auditions.destroy');
Route::get('/bulk-edit', 'bulkEditForm')->name('admin.auditions.bulkEditForm');
Route::post('/bulk-edit', 'bulkUpdate')->name('admin.auditions.bulkEdit');
});
// Admin Audition Draw Routes
Route::prefix('draw')->controller(DrawController::class)->group(function () {
Route::get('/', 'index')->name('admin.draw.index');
Route::post('/', 'store')->name('admin.draw.store');
Route::get('/clear',
'edit')->name('admin.draw.edit'); // Select auditions for which the user would like to clear the draw
Route::delete('/', 'destroy')->name('admin.draw.destroy'); // Clear the draw for the selected auditions
});
// Admin Entries Routes
Route::prefix('entries')->controller(EntryController::class)->group(function () {
Route::get('/', 'index')->name('admin.entries.index');
Route::get('/create', 'create')->name('admin.entries.create');
Route::post('/', 'store')->name('admin.entries.store');
Route::get('/{entry}/edit', 'edit')->name('admin.entries.edit');
Route::patch('/{entry}', 'update')->name('admin.entries.update');
Route::delete('/{entry}', 'destroy')->name('admin.entries.destroy');
});
// Admin Student Routes
Route::prefix('students')->controller(StudentController::class)->group(function () {
Route::get('/', 'index')->name('admin.students.index');
Route::get('/create', 'create')->name('admin.students.create');
Route::post('/', 'store')->name('admin.students.store');
Route::get('/{student}/edit', 'edit')->name('admin.students.edit');
Route::patch('/{student}', 'update')->name('admin.students.update');
Route::delete('/{student}', 'destroy')->name('admin.students.destroy');
});
// Admin School Routes
Route::prefix('schools')->controller(SchoolController::class)->group(function () {
Route::post('/{school}/add_domain', 'add_domain')->name('admin.schools.add_domain');
Route::get('/', 'index')->name('admin.schools.index');
Route::get('/create', 'create')->name('admin.schools.create');
Route::get('/{school}', 'show')->name('admin.schools.show');
Route::get('/{school}/edit', 'edit')->name('admin.schools.edit');
Route::get('/{school}/invoice', 'viewInvoice')->name('admin.schools.invoice');
Route::patch('/{school}', 'update')->name('admin.schools.update');
Route::post('/', 'store')->name('admin.schools.store');
Route::delete('/domain/{domain}', 'destroy_domain')->name('admin.schools.destroy_domain');
Route::delete('/{school}', 'destroy')->name('admin.schools.destroy');
Route::get('/{school}/set_head_director/{user}', 'setHeadDirector')->name('admin.schools.set_head_director');
});
// Admin User Routes
Route::prefix('users')->controller(UserController::class)->group(function () {
Route::get('/', 'index')->name('admin.users.index');
Route::get('/create', 'create')->name('admin.users.create');
Route::post('/', 'store')->name('admin.users.store');
Route::get('/{user}/edit', 'edit')->name('admin.users.edit');
Route::patch('/{user}', 'update')->name('admin.users.update');
Route::delete('/{user}', 'destroy')->name('admin.users.destroy');
Route::post('/{user}/set_password', 'setPassword')->name('admin.users.setPassword');
});
// Admin Card Routes
Route::prefix('cards')->controller(PrintCards::class)->group(function () {
Route::get('/', 'index')->name('admin.cards.index');
Route::post('/print', 'print')->name('admin.cards.print');
});
// Admin SignIn Sheet Routes
Route::prefix('signInSheets')->controller(PrintSignInSheetsController::class)->group(function () {
Route::get('/', 'index')->name('admin.signInSheets.index');
Route::post('/print', 'print')->name('admin.signInSheets.print');
});
// Print Room and Judge Assignment Report
Route::get('room_assignment_report',
PrintRoomAssignmentsController::class)->name('admin.print_room_assignment_report');
// PrelimDefinition Routes
Route::prefix('prelim_definitions')->controller(PrelimDefinitionController::class)->group(function () {
Route::get('/', 'index')->name('admin.prelim_definitions.index');
Route::get('/new', 'create')->name('admin.prelim_definitions.create');
Route::post('/', 'store')->name('admin.prelim_definitions.store');
Route::get('/{prelimDefinition}', 'edit')->name('admin.prelim_definitions.edit');
Route::patch('/{prelimDefinition}', 'update')->name('admin.prelim_definitions.update');
Route::delete('/{prelimDefinition}', 'destroy')->name('admin.prelim_definitions.destroy');
});
// SplitScoreDefinition Routes
Route::prefix('split_score_definitions')->controller(SplitScoreDefinitionController::class)->group(function () {
Route::get('/', 'index')->name('admin.split_score_definitions.index');
Route::get('/new', 'create')->name('admin.split_score_definitions.create');
Route::post('/', 'store')->name('admin.split_score_definitions.store');
Route::get('/{splitScoreDefinition}', 'edit')->name('admin.split_score_definitions.edit');
Route::patch('/{splitScoreDefinition}', 'update')->name('admin.split_score_definitions.update');
Route::delete('/{splitScoreDefinition}', 'destroy')->name('admin.split_score_definitions.destroy');
});
});
// Impersonation Routes
Route::middleware(['auth', 'verified', CheckIfAdmin::class])->get('su/',
[ImpersonationController::class, 'index'])
->name('impersonate.index');
Route::middleware(['auth', 'verified', CheckIfAdmin::class])->post('su/start',
[ImpersonationController::class, 'start'])
->name('impersonate.start');
Route::post('su/stop', [ImpersonationController::class, 'stop'])
->name('impersonate.stop');