PHP 7.4.33
Preview: web.php Size: 18.52 KB
/var/www/multi-event-cfp.bitkit.dk/httpdocs/routes/web.php
<?php

use App\Http\Controllers\AbstractsController;
use App\Http\Controllers\AdobeHookController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\EmailController;
use App\Http\Controllers\ScheduleEmailController;
use App\Http\Controllers\EventController;
use App\Http\Controllers\PresentationController;
use App\Http\Controllers\FileController;
use App\Http\Controllers\ScoreController;
use App\Http\Controllers\SessionController;
use App\Http\Controllers\SystemEmailController;
use App\Http\Controllers\TestController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Log;
use App\Models\File;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// Auth routes
Route::prefix('auth')->group(function () {
    Route::post('/azure/callback', [AuthController::class, 'azureLogin']);
    Route::get('login/{role}', [AuthController::class, 'login']);
    Route::get('logout', [AuthController::class, 'logout']);
    Route::post('forgot-password', [AuthController::class, 'generateForgotPasswordLink']);
    Route::post('check-token', [AuthController::class, 'checkForgotPasswordToken']);
    Route::post('reset-password', [AuthController::class, 'resetPassword']);

    Route::post('event/check-user', [UserController::class, 'checkEventUser']);
    Route::post('event/login-and-register', [UserController::class, 'loginAndRegisterEvent']);
    Route::post('event/register', [UserController::class, 'registerEvent']);
});

Route::get('fetch/companies', [UserController::class , 'getCompanyNames']);

//metadata of event
Route::get('meta/{event}/{page?}', [EventController::class, 'meta']);

//hooks
Route::prefix('hooks')->group(function () {
    //adobe hooks
    Route::prefix('adobe')->group(function () {
        Route::post('agreement/completed', [AdobeHookController::class, 'agreementCompleted']);
        Route::get('agreement/completed', [AdobeHookController::class, 'verifyWebHook']);
    });

    //sendgrid hooks
    Route::prefix('sendgrid')->group(function () {
        Route::post('events', [\App\Http\Controllers\SendGridHookController::class, 'handleEvents']);
    });
});

Route::prefix('api')->middleware('auth:sanctum')->group(function () {

    Route::prefix('test')->group(function () {
        Route::get('/', [TestController::class, 'test']);
        Route::get('adobe-sign', [TestController::class, 'adobeSign']);
        Route::get('/download-presentation-zip/{filename}', [TestController::class, 'downloadPresentationZip'])
        ->name('downloadPresentationZip');
        Route::get('/download-user-files-zip/{filename}', [TestController::class, 'downloadUserFilesZip'])
        ->name('downloadUserFilesZip');
    });


    Route::get('wuc-migration', [TestController::class, 'wucMigration']);

    Route::get('wuc-user-files', [TestController::class, 'wucUserFiles']);

    Route::get('wuc-remove-files', [TestController::class, 'WucRemoveFiles']);


    Route::get('/import-user-template', [UserController::class, 'importUserTemplate']);

    Route::post('event/register', [UserController::class, 'authUserRegisterEvent']);

    Route::post('/check-user', [UserController::class , 'checkUser'])->middleware('event.user:event_admin|event_submitter|event_reviewer');

    Route::get('user', [UserController::class, 'getAuthUser']);

    Route::post('/super-admin/update-email', [UserController::class, 'updateUserEmail']);

    Route::prefix('user')->group(function () {

        Route::get('/token', [UserController::class, 'listToken'])->middleware('event.user:event_admin');
        Route::post('/token', [UserController::class, 'generateToken'])->middleware('event.user:event_admin');
        Route::delete('/token/{id}', [UserController::class, 'deleteToken'])->middleware('event.user:event_admin');
        Route::post('/download-files', [UserController::class, 'downloadUserFiles'])->middleware('event.user:event_admin');
        Route::post('/', [UserController::class, 'createOrUpdate'])->middleware('event.user:event_admin');
        Route::get('/{id}/agreement/fetch-status', [UserController::class, 'fetchAgreementStatus'])->middleware('event.user:event_admin|event_submitter');
        Route::post('/agreement/fetch-multi-speakers-status', [UserController::class, 'fetchMultipleSpeakerAgreementStatus'])->middleware('event.user:event_admin');
        Route::post('/agreement/fetch-multi-speakers-remind-mail', [UserController::class, 'fetchMultipleSpeakerRemindMail'])->middleware('event.user:event_admin');
        Route::post('/{id}/agreement/remind', [UserController::class, 'remindAgreement'])->middleware('event.user:event_admin|event_submitter');
        Route::post('/{id}/agreement/cancel', [UserController::class, 'cancelAgreement'])->middleware('event.user:event_admin');
        Route::get('/{id}/agreement/download', [UserController::class, 'downloadAgreement'])->middleware('event.user:event_admin');
        Route::get('/list', [UserController::class, 'list'])->middleware('event.user:event_admin');
        Route::get('/super-admin/user/list', [UserController::class, 'list']);
        Route::post('/list-users', [UserController::class, 'list'])->middleware('event.user:event_admin');
        Route::get('/{id}', [UserController::class, 'view'])->middleware('event.user:event_admin');
        Route::delete('/{id}', [UserController::class, 'deleteUser'])->middleware('event.user:event_admin');
        Route::get('/event/count', [UserController::class, 'eventUserCount'])->middleware('event.user:event_admin');
        Route::get('/speaker/count', [UserController::class, 'speakerCount'])->middleware('event.user:event_admin');
        Route::post('/reset-password', [UserController::class, 'resetPassword'])->middleware('event.user:event_admin');
        Route::post('/reset-password/un-registered', [UserController::class, 'resetPassword']);
        Route::post('/send-login-info', [UserController::class, 'sendLoginInfo'])->middleware('event.user:event_admin');
        Route::post('/import-user', [UserController::class, 'importUser'])->middleware('event.user:event_admin');
        Route::post('/verification', [UserController::class, 'userVerification'])->middleware('event.user:event_admin');
        Route::post('/presentation-request', [UserController::class, 'createCancelPresentationRequest'])->middleware('event.user:event_submitter');
        //export users
        Route::post('/export', [UserController::class, 'export'])->middleware('event.user:event_admin');
        // update speaker order
        Route::post('/update-speaker-order', [UserController::class, 'updateSpeakerOrder'])->middleware('event.user:event_admin');
        // create speaker notes
        Route::post('/speaker/notes', [UserController::class, 'createSpeakerNotes'])->middleware('event.user:event_admin');
        // list speaker notes
        Route::get('/speaker/{id}/list', [UserController::class, 'listSpeakerNotes'])->middleware('event.user:event_admin');
        // download speaker notes files
        Route::get('/speaker/note/{noteId}/file/{fileId}', [UserController::class, 'downloadNoteFIle'])->middleware('event.user:event_admin');
        // create token for get all users in the platform
        Route::post('/token/all-user/create-token', [UserController::class, 'createAllUserAccessApiToken'])->middleware('event.user:event_admin');
        // list tokens for get all users in the platform
        Route::get('/token/all-user/list-tokens', [UserController::class, 'listAllUserAccessApiTokens'])->middleware('event.user:event_admin');
        // delete all user access token
        Route::delete('/token/all-user/{id}', [UserController::class, 'deleteAllUserAccessApiToken'])->middleware('event.user:event_admin');
        // get all users in the platform
        Route::get('/events/users', [UserController::class, 'listAllEventsUsers'])->middleware('event.user:event_admin');
        // list amend speaker terms
        Route::get('/speaker/amend-speaker-term/{id}/list', [UserController::class, 'listAmendSpeakerTerm'])->middleware('event.user:event_admin');
        // create update amend speaker terms
        Route::post('/speaker/amend-speaker-term', [UserController::class, 'createUpdateAmendSpeakerTerm'])->middleware('event.user:event_admin');

        // Global Users Directory routes
        Route::get('/global/search', [UserController::class, 'globalUserSearch'])->middleware('event.user:event_admin');
        Route::post('/global/add-to-event/{userId}', [UserController::class, 'addUserToEvent'])->middleware('event.user:event_admin');
        Route::get('/global/autocomplete', [UserController::class, 'getAutocompleteData'])->middleware('event.user:event_admin');
    });


    Route::prefix('email')->group(function () {
        Route::post('/send-email', [EmailController::class, 'sendEmail']);
        Route::get('/list', [EmailController::class, 'list']);
        Route::get('/{id}/file/{fileId}', [EmailController::class, 'downloadFile']);
        Route::delete('/{id}', [EmailController::class, 'deleteEmail']);
    });

    Route::prefix('system-email')->group(function () {
        Route::get('/list', [SystemEmailController::class, 'list']);
        Route::get('/{id}', [SystemEmailController::class, 'view']);
        Route::post('/edit-email', [SystemEmailController::class, 'editEmail']);
    });

    Route::prefix('schedule-email')->group(function () {
        Route::get('/get-form', [ScheduleEmailController::class, 'getScheduleMailForm']);
        Route::get('/list', [ScheduleEmailController::class, 'list']);
        Route::get('/{id}', [ScheduleEmailController::class, 'view']);
        Route::post('/save-form', [ScheduleEmailController::class, 'createOrUpdate']);
        Route::delete('/{id}', [ScheduleEmailController::class, 'deleteScheduleEmail']);
    });

    Route::prefix('email-log')->group(function () {
        Route::get('/list', [App\Http\Controllers\EmailLogController::class, 'list']);
        Route::get('/{id}', [App\Http\Controllers\EmailLogController::class, 'show']);
        Route::post('/{id}/retry', [App\Http\Controllers\EmailLogController::class, 'retry']);
        Route::post('/bulk-retry', [App\Http\Controllers\EmailLogController::class, 'bulkRetry']);
        Route::delete('/{id}', [App\Http\Controllers\EmailLogController::class, 'destroy']);
        Route::delete('/', [App\Http\Controllers\EmailLogController::class, 'destroy']);
    });

    Route::prefix('score')->group(function () {
        Route::post('/', [ScoreController::class, 'submitScore']);
        Route::post('/bulk', [ScoreController::class, 'submitScores']);
        Route::delete('/{id}', [ScoreController::class, 'deleteScore']);
        Route::post('/export', [ScoreController::class, 'export']);
        Route::get('/count', [ScoreController::class, 'getMarkedCount']);
    });

    Route::prefix('abstract')->group(function () {
        //reports
        Route::get('/reports', [AbstractsController::class, 'reports']);

        //export abstracts
        Route::post('/export', [AbstractsController::class, 'export']);

        //export abstracts to pdf
        Route::post('/pdf-export', [AbstractsController::class, 'pdfExport']);

        Route::post('/', [AbstractsController::class, 'createOrUpdateAbstract']);
        Route::get('/list', [AbstractsController::class, 'list']);
        Route::get('/{id}', [AbstractsController::class, 'view']);
        Route::delete('/{id}', [AbstractsController::class, 'deleteAbstract']);
        Route::post('/{id}/edit-request', [AbstractsController::class, 'editRequest']);
        Route::post('/{id}/handle/edit-request', [AbstractsController::class, 'handleEditRequest']);
        Route::post('/{id}/handle/selection-status', [AbstractsController::class, 'handleSelectionStatus']);
        Route::post('/{id}/handle/presentation-type', [AbstractsController::class, 'handlePresentationType']);
        Route::post('/{id}/handle/presentation-invitation', [AbstractsController::class, 'handlePresentationInvitation']);
        Route::post('/{id}/email/accepted-info', [AbstractsController::class, 'emailSelectionStatus']);
        Route::get('/{id}/file/{fileId}', [AbstractsController::class, 'downloadFile']);
    });

    Route::prefix('session')->group(function () {
        Route::get('/list', [SessionController::class, 'list']);
        Route::get('/chair-person/list', [SessionController::class, 'listChairPersons']);
        Route::post('/chair-person/create', [SessionController::class, 'createOrUpdateChairPerson']);
        Route::delete('/chair-person/delete/{id}', [SessionController::class, 'deleteChairPerson']);
        Route::get('/sessions-dates', [SessionController::class, 'sessionsDates']);
        Route::post('/', [SessionController::class, 'createOrUpdate']);
        Route::post('/bulk', [SessionController::class, 'bulkCreateOrUpdate'])->middleware('event.user:event_admin');
        Route::post('/publish', [SessionController::class, 'publish']);
        Route::post('/{id}/toggle-exclude-from-print', [SessionController::class, 'toggleExcludeFromPrint']);
        Route::get('/published-sessions', [SessionController::class, 'publishedSessions']);
        Route::get('/previous-published-sessions', [SessionController::class, 'previousPublishedSessions']);
        Route::delete('/{id}', [SessionController::class, 'delete'])->middleware('event.user:event_admin');
        Route::get('/filter/options', [SessionController::class, 'getFilterOptions']);
        Route::get('/{id}', [SessionController::class, 'view']);
        Route::get('/my-sessions/list', [SessionController::class, 'getMySessions']);
        Route::get('/category-settings/list', [SessionController::class, 'getAllSessionFormSettingsCategories']);
        Route::get('/room-type-options/list', [SessionController::class, 'getSessionRoomAndTypeOptions']);
        Route::post('/export', [SessionController::class, 'exportSessions']);
        //slot apis
        Route::prefix('slot')->group(function () {
            Route::get('/list', [SessionController::class, 'listSlots']);
        });
    });

    Route::prefix('presentation')->group(function () {
        Route::get('/{id}/file/{fileId}', [PresentationController::class, 'downloadFile']);
        Route::get('/{id}/file/{fileId}/preview', [PresentationController::class, 'previewFile']);
        Route::get('/file-access/{fileId}', [PresentationController::class, 'serveFile'])->name('file.access')->middleware('signed');
        Route::get('/{id}/comment/{commentId}/file/{fileId}', [PresentationController::class, 'downloadCommentFIle']);
        Route::get('/{id}/comment/list', [PresentationController::class, 'listComments']);
        Route::post('/{id}/comment', [PresentationController::class, 'createOrUpdateComment']);
        Route::get('/presentation-filter-data', [PresentationController::class, 'fetchFilterDetails']);
        Route::post('/', [PresentationController::class, 'createOrUpdate']);
        Route::post('/written-paper', [PresentationController::class, 'writtenPaper']);
        Route::get('/list', [PresentationController::class, 'list']);
        Route::post('/download', [PresentationController::class, 'download']);
        Route::get('/list/count', [PresentationController::class, 'count']);
        Route::get('/{id}', [PresentationController::class, 'view']);
        Route::delete('/{id}', [PresentationController::class, 'delete']);
        Route::post('/{id}/assign-reviewer', [PresentationController::class, 'assignReviewer']);
        Route::delete('/{id}/remove-reviewer', [PresentationController::class, 'removeReviewer']);
        Route::delete('/{id}/remove-presenter', [PresentationController::class, 'removePresenter']);
        Route::post('/{id}/edit-request', [PresentationController::class, 'editRequest']);
        Route::post('/{id}/handle/edit-request', [PresentationController::class, 'handleEditRequest']);
        Route::post('/{id}/written-paper/handle/edit-request', [PresentationController::class, 'handleWrittenPaperEditRequest']);
        Route::post('/{id}/reviewer-accept', [PresentationController::class, 'handleReviewerApprovedRequest']);
    });

    Route::prefix('event')->group(function () {
        Route::post('create', [EventController::class, 'create']);
        Route::post('update/{id}', [EventController::class, 'update']);
        Route::delete('delete/{id}', [EventController::class, 'delete']);
        Route::get('list', [EventController::class, 'list']);
        Route::get('{id}', [EventController::class, 'view']);
        Route::post('publish/{id}', [EventController::class, 'publish']);
        Route::get('counts/{id}', [EventController::class, 'eventCounts']);
        Route::post('/update-status', [EventController::class, 'updateStatus']); // New route for updating event status
        Route::get('/download/template/{fileId}', [EventController::class, 'downloadTemplateFile'])->middleware('event.user:event_admin|event_submitter|event_reviewer');
    });

    Route::prefix('submitter')->middleware('event.user:event_submitter|event_reviewer')->group(function () {
        Route::post('edit/user', [UserController::class, 'updateSubmitter']);
    });
});
Route::get('/schedule/cron/{id}', function ($id) {
    if($id == config('app.cron_key')){
        Artisan::call('schedule:run');
    }else{
        Log::channel('schedule_mail')->info('invalid request..!');
        abort(404);
    }
});

Route::get('/download-attachment/{file_id}', function ($file_id) {
    $file = File::findOrFail($file_id);
    $filePath = storage_path("app/{$file->filepath}{$file->save_name}");

    if (!file_exists($filePath)) {
        abort(404, 'File not found');
    }

    return response()->download($filePath, $file->filename);
})->name('downloadAttachment')->middleware('signed');

// Secure file access - MUST be before catch-all route
Route::get('/api/secure-file/{file_id}', [FileController::class, 'secureFileAccess']);

// Apply SlugRedirect middleware only to specific slugs
Route::get('{slug}/{any}', function () {
    return view('index');
})->where(['slug' => 'adipec-downstream-2025', 'any' => '.*'])->middleware('slug.redirect');

Route::get('/{any}', function () {
    return view('index');
})->where('any', '.*');

Directory Contents

Dirs: 0 × Files: 4
Name Size Perms Modified Actions
566 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
558 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
73.49 KB lrw-rw-r-- 2025-12-10 06:13:17
Edit Download
18.52 KB lrw-rw-r-- 2026-04-22 04:32:10
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).