2026-05-20 18:25:15 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\EntryController;
|
2026-06-08 16:25:52 +02:00
|
|
|
use App\Http\Controllers\ModCP\LanguageController;
|
2026-06-23 19:24:38 +02:00
|
|
|
use App\Http\Controllers\ReviewController;
|
2026-05-27 21:24:38 +02:00
|
|
|
use App\Http\Controllers\WebhookController;
|
|
|
|
|
use Illuminate\Routing\RedirectController;
|
2026-05-20 18:25:15 +02:00
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
|
|
|
|
|
|
// HomeController.
|
|
|
|
|
Route::get('/', [ \App\Http\Controllers\HomeController::class, 'index' ] )->name('home');
|
|
|
|
|
|
|
|
|
|
// EntryController.
|
|
|
|
|
Route::name('entries.')->controller(EntryController::class)->group(function () {
|
|
|
|
|
|
|
|
|
|
Route::get('/database', 'index' )->name('index');
|
2026-06-08 16:25:52 +02:00
|
|
|
Route::get('/{section}', 'section_redirect' )->name('section_redirect')
|
2026-06-10 11:04:26 +02:00
|
|
|
->where(['section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts']);
|
2026-06-08 16:25:52 +02:00
|
|
|
|
2026-05-20 18:25:15 +02:00
|
|
|
Route::get('/{section}/{entry:slug}', 'show' )->name('show')->where(
|
|
|
|
|
[
|
2026-06-10 11:04:26 +02:00
|
|
|
'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts',
|
2026-06-23 19:24:38 +02:00
|
|
|
'entry' => '[^/]+',
|
2026-05-20 18:25:15 +02:00
|
|
|
]
|
|
|
|
|
);
|
|
|
|
|
|
2026-06-08 16:25:52 +02:00
|
|
|
Route::get('/my-drafts', 'drafts' )->middleware('xf.auth')->name('drafts');
|
|
|
|
|
|
2026-05-20 18:25:15 +02:00
|
|
|
});
|
2026-06-23 19:24:38 +02:00
|
|
|
Route::name('reviews.')->controller(ReviewController::class)->group(function () {
|
|
|
|
|
Route::get('/reviews', 'index')->name('index');
|
|
|
|
|
Route::post('/reviews/{entry:id}', 'store')->name('store')->middleware(['xf.auth','can:create,\App\Models\EntryReview']);
|
|
|
|
|
});
|
2026-05-20 18:25:15 +02:00
|
|
|
|
|
|
|
|
// SubmissionController.
|
2026-05-27 21:24:38 +02:00
|
|
|
Route::name('submit.')->prefix('/submit')->controller(\App\Http\Controllers\SubmissionController::class)->middleware(['xf.auth', 'can:create,\App\Models\Entry'])->group(function () {
|
2026-06-16 16:21:43 +02:00
|
|
|
Route::get('/', 'index')->name('index');
|
2026-05-20 18:25:15 +02:00
|
|
|
Route::get('/{section}', 'create' )->name('create')
|
2026-06-10 11:04:26 +02:00
|
|
|
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts' ]);
|
2026-05-20 18:25:15 +02:00
|
|
|
Route::post('/{section}', 'store' )->name('store')
|
2026-06-10 11:04:26 +02:00
|
|
|
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts' ]);
|
2026-05-20 18:25:15 +02:00
|
|
|
});
|
2026-05-27 21:24:38 +02:00
|
|
|
Route::name('submit.')->prefix('/edit')->controller(\App\Http\Controllers\SubmissionController::class)->middleware(['xf.auth', 'can:update,entry'])->group(function () {
|
2026-05-20 18:25:15 +02:00
|
|
|
Route::get('/{section}/{entry:id}', 'edit' )->name('edit')
|
2026-06-10 11:04:26 +02:00
|
|
|
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts', 'entry' => '[0-9\-]+' ]);
|
2026-05-20 18:25:15 +02:00
|
|
|
Route::post('/{section}/{entry:id}', 'update' )->name('update')
|
2026-06-10 11:04:26 +02:00
|
|
|
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts', 'entry' => '[0-9\-]+' ]);
|
2026-06-08 16:25:52 +02:00
|
|
|
Route::delete('/{section}/{entry:id}', 'destroy' )->name('destroy')
|
2026-06-10 11:04:26 +02:00
|
|
|
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts', 'entry' => '[0-9\-]+' ]);
|
2026-05-20 18:25:15 +02:00
|
|
|
});
|
|
|
|
|
|
2026-06-16 16:21:43 +02:00
|
|
|
// NewsController
|
|
|
|
|
Route::name('news.')->controller(\App\Http\Controllers\NewsController::class)->group(function () {
|
|
|
|
|
Route::get('/news/', 'index' )->name('index');
|
|
|
|
|
Route::get('/news/{news:slug}', 'show' )->name('show')->where([ 'news' => '[a-zA-Z0-9\-_]+']);
|
|
|
|
|
|
|
|
|
|
Route::get('/submit/news', 'create' )->name('create')->middleware(['xf.auth','can:create,\App\Models\News']);
|
|
|
|
|
Route::post('/submit/news', 'store' )->name('store')->middleware(['xf.auth','can:create,\App\Models\News']);
|
|
|
|
|
|
|
|
|
|
Route::get('/edit/news/{news:id}', 'edit')->name('edit')->where(['news' => '[0-9\-]+'])->middleware(['xf.auth','can:update,news']);
|
|
|
|
|
Route::post('/edit/news/{news:id}', 'update')->name('update')->where(['news' => '[0-9\-]+'])->middleware(['xf.auth','can:update,news']);
|
|
|
|
|
Route::delete('/edit/news/{news:id}', 'destroy')->name('destroy')->where(['news' => '[0-9\-]+'])->middleware(['xf.auth','can:update,news']);
|
|
|
|
|
});
|
|
|
|
|
|
2026-06-02 20:54:10 +02:00
|
|
|
// QueueController
|
|
|
|
|
Route::name('queue.')->prefix('/queue')->controller(\App\Http\Controllers\QueueController::class)->group(function () {
|
|
|
|
|
Route::get('/', 'index' )->name('index');
|
|
|
|
|
|
|
|
|
|
Route::patch('/{entry:id}/comment', 'updateComment' )
|
|
|
|
|
->middleware(['xf.auth', 'can:updateComment,entry' ] )
|
|
|
|
|
->where([ 'entry' => '[0-9\-]+' ])
|
|
|
|
|
->name('comment');
|
|
|
|
|
|
|
|
|
|
Route::patch('/{entry:id}/approve', 'approve' )
|
|
|
|
|
->middleware(['xf.auth', 'can:approve,entry' ] )
|
|
|
|
|
->where([ 'entry' => '[0-9\-]+' ])
|
|
|
|
|
->name('approve');
|
|
|
|
|
|
|
|
|
|
Route::patch('/{entry:id}/reject', 'reject' )
|
|
|
|
|
->middleware(['xf.auth', 'can:reject,entry' ] )
|
|
|
|
|
->where([ 'entry' => '[0-9\-]+' ])
|
|
|
|
|
->name('reject');
|
2026-06-16 16:21:43 +02:00
|
|
|
|
|
|
|
|
Route::patch('/news/{news:id}/comment', 'updateComment_news' )
|
|
|
|
|
->middleware(['xf.auth', 'can:updateComment,news' ] )
|
|
|
|
|
->where([ 'news' => '[0-9\-]+' ])
|
|
|
|
|
->name('news.comment');
|
|
|
|
|
|
|
|
|
|
Route::patch('/news/{news:id}/approve', 'approve_news' )
|
|
|
|
|
->middleware(['xf.auth', 'can:approve,news' ] )
|
|
|
|
|
->where([ 'news' => '[0-9\-]+' ])
|
|
|
|
|
->name('news.approve');
|
|
|
|
|
|
|
|
|
|
Route::patch('/news/{news:id}/reject', 'reject_news' )
|
|
|
|
|
->middleware(['xf.auth', 'can:reject,news' ] )
|
|
|
|
|
->where([ 'news' => '[0-9\-]+' ])
|
|
|
|
|
->name('news.reject');
|
2026-06-02 20:54:10 +02:00
|
|
|
});
|
|
|
|
|
|
2026-06-08 16:25:52 +02:00
|
|
|
// ToolsController
|
|
|
|
|
Route::name('tools.')->controller(\App\Http\Controllers\ToolsController::class)->group(function () {
|
|
|
|
|
Route::get('/patch', 'patcher' )->name('patcher');
|
2026-06-09 11:45:59 +02:00
|
|
|
Route::get( '/patch/{entry_id}/{file:file_uuid}', 'directPatch' )->name('direct-patch')
|
|
|
|
|
->where(['entry_id' => '[0-9]+']);
|
2026-06-16 16:21:43 +02:00
|
|
|
Route::get('/play/{entry_id}/{file:file_uuid}', 'play' )->name('play')->middleware('xf.auth')
|
|
|
|
|
->where(['entry_id' => '[0-9]+']);
|
2026-06-23 19:24:38 +02:00
|
|
|
Route::get('/hash', 'hasher' )->name('hash');
|
2026-06-08 16:25:52 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// ModeratorCPController
|
|
|
|
|
Route::name('modcp.')->prefix('/modcp')->controller(\App\Http\Controllers\ModCPController::class)->middleware(['xf.auth','can:is-mod'])->group(function () {
|
|
|
|
|
|
|
|
|
|
Route::get('/', 'index' )->name('index');
|
|
|
|
|
Route::get('/locked-entries', 'locked' )->name('locked');
|
|
|
|
|
Route::get('/draft-entries', 'draft' )->name('draft')->middleware('can:is-admin');
|
|
|
|
|
Route::get('/hidden-entries', 'hidden' )->name('hidden')->middleware('can:is-admin');
|
|
|
|
|
Route::get('/deleted-entries', 'deleted' )->name('deleted')->middleware('can:is-admin');
|
2026-06-16 16:21:43 +02:00
|
|
|
Route::get('/logs', 'logs' )->name('logs')->middleware('can:is-admin');
|
2026-06-08 16:25:52 +02:00
|
|
|
|
|
|
|
|
Route::patch('/restore/{entry}', 'restore' )->name('restore')->where(['entry' => '[0-9\-]+'])->withTrashed()->middleware('can:is-admin');
|
|
|
|
|
Route::delete('/purge/{entry}', 'destroy' )->name('destroy')->where(['entry' => '[0-9\-]+'])->withTrashed()->middleware('can:is-admin');
|
|
|
|
|
|
|
|
|
|
Route::resource('games', \App\Http\Controllers\ModCP\GameController::class)->only(['index', 'store','update','destroy']);
|
|
|
|
|
Route::resource('languages', LanguageController::class)->only(['index', 'store','update','destroy']);
|
|
|
|
|
Route::resource('authors', \App\Http\Controllers\ModCP\AuthorController::class)->only(['index', 'store','update','destroy']);
|
|
|
|
|
Route::resource('platforms', \App\Http\Controllers\ModCP\PlatformController::class )->middleware('can:is-admin')->only(['index', 'store','update','destroy']);
|
|
|
|
|
Route::resource('genres', \App\Http\Controllers\ModCP\GenreController::class )->middleware('can:is-admin')->only(['index', 'store','update','destroy']);
|
|
|
|
|
});
|
|
|
|
|
|
2026-05-27 21:24:38 +02:00
|
|
|
// RedirectController
|
|
|
|
|
Route::name('redirect.')->controller(\App\Http\Controllers\RedirectController::class)->group(function () {
|
|
|
|
|
Route::get('/entry/report_redirect', 'entryReportRedirect' )->name('entry_report');
|
2026-06-16 16:21:43 +02:00
|
|
|
Route::get('/news/report_redirect', 'newsReportRedirect' )->name('news_report');
|
2026-05-24 11:47:20 +02:00
|
|
|
});
|