diff --git a/app/Console/Commands/SubmissionsDown.php b/app/Console/Commands/SubmissionsDown.php
new file mode 100644
index 0000000..d36c200
--- /dev/null
+++ b/app/Console/Commands/SubmissionsDown.php
@@ -0,0 +1,22 @@
+info("Submissions disabled.");
+ }
+}
diff --git a/app/Console/Commands/SubmissionsUp.php b/app/Console/Commands/SubmissionsUp.php
new file mode 100644
index 0000000..5fe9d15
--- /dev/null
+++ b/app/Console/Commands/SubmissionsUp.php
@@ -0,0 +1,22 @@
+info('Submissions enabled.');
+ }
+}
diff --git a/app/Http/Middleware/SubmissionsEnabled.php b/app/Http/Middleware/SubmissionsEnabled.php
new file mode 100644
index 0000000..08b50e7
--- /dev/null
+++ b/app/Http/Middleware/SubmissionsEnabled.php
@@ -0,0 +1,33 @@
+expectsJson() ){
+ return response()->json([
+ 'message' => 'The submissions are currently in maintenance mode.',
+ ], 503 );
+ }
+
+ return back()->withErrors([
+ 'maintenance' => "The submissions are currently in maintenance mode.",
+ ])->withInput();
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/View/Components/ErrorBlock.php b/app/View/Components/ErrorBlock.php
index f0bc778..d207e46 100644
--- a/app/View/Components/ErrorBlock.php
+++ b/app/View/Components/ErrorBlock.php
@@ -14,6 +14,10 @@ class ErrorBlock extends Component
'icon' => 'ban',
'message' => '%s'
],
+ 'not-found' => [
+ 'icon' => 'sticky-note-off',
+ 'message' => "404: This page does not exist."
+ ],
'page-not-allowed' => [
'icon' => 'shield-ban',
'message' => "You do not have permission to access this page.\nRequired permission: %s"
@@ -21,6 +25,10 @@ class ErrorBlock extends Component
'user-state-not-valid' => [
'icon' => 'shield-ban',
'message' => "You do not have permission to access this page.\nYour user profile is incomplete: %s\nGo back to the forum for more details."
+ ],
+ 'server-error' => [
+ 'icon' => 'bomb',
+ 'message' => "500: Internal Server Error."
]
];
diff --git a/bootstrap/app.php b/bootstrap/app.php
index 36f39a2..47d2e39 100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -16,6 +16,7 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->encryptCookies(except: ['xf_session','xf_user','xf_csrf','xf_style_variation','activity_filters']);
$middleware->alias([
'xf.auth' => \App\Http\Middleware\CheckXenForoPermissions::class,
+ 'submissions.maintenance' => \App\Http\Middleware\SubmissionsEnabled::class,
]);
$middleware->redirectGuestsTo(function(Request $request): void {
if( $request->is('manage*'))
@@ -24,5 +25,20 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->append(\App\Http\Middleware\CheckXenForoUserState::class);
})
->withExceptions(function (Exceptions $exceptions): void {
- //
+ $exceptions->render(function(Throwable $e, $request) {
+ $statusCode = method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 500;
+
+ if( app()->environment('production') && $statusCode >= 500 && !$request->expectsJson() ){
+ $errorId = (string) Str::uuid();
+
+ \Illuminate\Support\Facades\Log::error($e->getMessage(), [
+ 'error_id' => $errorId,
+ 'exception' => $e,
+ 'url' => $request->fullUrl(),
+ 'user_id' => (optional($request->user())->user_id ?? 0),
+ ]);
+
+ return response()->view('errors.500', ['errorId' => $errorId], 500 );
+ }
+ });
})->create();
diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php
new file mode 100644
index 0000000..fa6fc84
--- /dev/null
+++ b/resources/views/errors/403.blade.php
@@ -0,0 +1,6 @@
+@extends('layouts.app')
+
+@section('content')
+
+ Go back to the previous page
+@endsection
diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php
new file mode 100644
index 0000000..1778e29
--- /dev/null
+++ b/resources/views/errors/404.blade.php
@@ -0,0 +1,6 @@
+@extends('layouts.app')
+
+@section('content')
+
+ Go back to the previous page
+@endsection
diff --git a/resources/views/errors/4xx.blade.php b/resources/views/errors/4xx.blade.php
new file mode 100644
index 0000000..d8a7c2c
--- /dev/null
+++ b/resources/views/errors/4xx.blade.php
@@ -0,0 +1,6 @@
+@extends('layouts.app')
+
+@section('content')
+
+ Go back to the previous page
+@endsection
diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php
new file mode 100644
index 0000000..9998c2a
--- /dev/null
+++ b/resources/views/errors/500.blade.php
@@ -0,0 +1,305 @@
+
+
+ 500 - Internal server error - Romhack Plaza
+
+
+
+
+
+
+
+
+
+
500 - Internal server error
+
To resolve the issue quickly, please report it on Gitea, Discord, or the forum with the following information.
+
+ - Your error code: {{ $errorId ?? "" }}
+ - What you were doing before the error occurred.
+
+
+
+
+
+
+
+
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
index 79e2d1a..0d2b185 100644
--- a/resources/views/layouts/app.blade.php
+++ b/resources/views/layouts/app.blade.php
@@ -24,6 +24,9 @@
@if(session('error'))
@endif
+ @if($errors->has('maintenance'))
+
+ @endif
@yield('content')
diff --git a/resources/views/maintenance.blade.php b/resources/views/maintenance.blade.php
new file mode 100644
index 0000000..de6f08d
--- /dev/null
+++ b/resources/views/maintenance.blade.php
@@ -0,0 +1,299 @@
+
+
+ 500 - Internal server error - Romhack Plaza
+
+
+
+
+
+
+
+
+
+
Maintenance is in progress.
+
Please wait until maintenance is complete. Follow the Discord server or the forum if this is unscheduled maintenance.
+
+
+
+
+
+
+
diff --git a/routes/web.php b/routes/web.php
index c1683b6..4af9471 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -33,14 +33,14 @@ Route::name('reviews.')->controller(ReviewController::class)->group(function ()
});
// SubmissionController.
-Route::name('submit.')->prefix('/submit')->controller(\App\Http\Controllers\SubmissionController::class)->middleware(['xf.auth', 'can:create,\App\Models\Entry'])->group(function () {
+Route::name('submit.')->prefix('/submit')->controller(\App\Http\Controllers\SubmissionController::class)->middleware(['submissions.maintenance','xf.auth', 'can:create,\App\Models\Entry'])->group(function () {
Route::get('/', 'index')->name('index');
Route::get('/{section}', 'create' )->name('create')
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts' ]);
Route::post('/{section}', 'store' )->name('store')
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts' ]);
});
-Route::name('submit.')->prefix('/edit')->controller(\App\Http\Controllers\SubmissionController::class)->middleware(['xf.auth', 'can:update,entry'])->group(function () {
+Route::name('submit.')->prefix('/edit')->controller(\App\Http\Controllers\SubmissionController::class)->middleware(['submissions.maintenance','xf.auth', 'can:update,entry'])->group(function () {
Route::get('/{section}/{entry:id}', 'edit' )->name('edit')
->where([ 'section' => 'translations|romhacks|homebrew|utilities|documents|lua-scripts', 'entry' => '[0-9\-]+' ]);
Route::post('/{section}/{entry:id}', 'update' )->name('update')
@@ -54,12 +54,12 @@ Route::name('news.')->controller(\App\Http\Controllers\NewsController::class)->g
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('/submit/news', 'create' )->name('create')->middleware(['submissions.maintenance','xf.auth','can:create,\App\Models\News']);
+ Route::post('/submit/news', 'store' )->name('store')->middleware(['submissions.maintenance','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']);
+ Route::get('/edit/news/{news:id}', 'edit')->name('edit')->where(['news' => '[0-9\-]+'])->middleware(['submissions.maintenance','xf.auth','can:update,news']);
+ Route::post('/edit/news/{news:id}', 'update')->name('update')->where(['news' => '[0-9\-]+'])->middleware(['submissions.maintenance','xf.auth','can:update,news']);
+ Route::delete('/edit/news/{news:id}', 'destroy')->name('destroy')->where(['news' => '[0-9\-]+'])->middleware(['submissions.maintenance','xf.auth','can:update,news']);
});
// QueueController
@@ -67,32 +67,32 @@ Route::name('queue.')->prefix('/queue')->controller(\App\Http\Controllers\QueueC
Route::get('/', 'index' )->name('index');
Route::patch('/{entry:id}/comment', 'updateComment' )
- ->middleware(['xf.auth', 'can:updateComment,entry' ] )
+ ->middleware(['submissions.maintenance','xf.auth', 'can:updateComment,entry' ] )
->where([ 'entry' => '[0-9\-]+' ])
->name('comment');
Route::patch('/{entry:id}/approve', 'approve' )
- ->middleware(['xf.auth', 'can:approve,entry' ] )
+ ->middleware(['submissions.maintenance','xf.auth', 'can:approve,entry' ] )
->where([ 'entry' => '[0-9\-]+' ])
->name('approve');
Route::patch('/{entry:id}/reject', 'reject' )
- ->middleware(['xf.auth', 'can:reject,entry' ] )
+ ->middleware(['submissions.maintenance','xf.auth', 'can:reject,entry' ] )
->where([ 'entry' => '[0-9\-]+' ])
->name('reject');
Route::patch('/news/{news:id}/comment', 'updateComment_news' )
- ->middleware(['xf.auth', 'can:updateComment,news' ] )
+ ->middleware(['submissions.maintenance','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' ] )
+ ->middleware(['submissions.maintenance','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' ] )
+ ->middleware(['submissions.maintenance','xf.auth', 'can:reject,news' ] )
->where([ 'news' => '[0-9\-]+' ])
->name('news.reject');
});