Skip to content

Commit db59795

Browse files
committed
Fix support for Laravel maintenance mode
Fixes wintercms/winter#917
1 parent 637a4a6 commit db59795

3 files changed

Lines changed: 67 additions & 25 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace Winter\Storm\Foundation\Console;
4+
5+
use Illuminate\Foundation\Console\DownCommand as BaseCommand;
6+
use Illuminate\Foundation\Exceptions\RegisterErrorViewPaths;
7+
use Illuminate\Support\Facades\View;
8+
9+
class DownCommand extends BaseCommand
10+
{
11+
/**
12+
* Get the payload to be placed in the "down" file.
13+
*
14+
* @return array
15+
*/
16+
protected function getDownFilePayload()
17+
{
18+
return [
19+
'except' => $this->excludedPaths(),
20+
'redirect' => $this->redirectPath(),
21+
'retry' => $this->getRetryTime(),
22+
'refresh' => $this->option('refresh'),
23+
'secret' => $this->option('secret'),
24+
'status' => (int) $this->option('status', 503),
25+
'template' => $this->prerenderView(),
26+
];
27+
}
28+
29+
/**
30+
* Prerender the specified view so that it can be rendered even before loading Composer.
31+
*
32+
* @return string|null
33+
*/
34+
protected function prerenderView()
35+
{
36+
(new RegisterErrorViewPaths)();
37+
38+
$selectedView = $this->option('render');
39+
if ($selectedView === 'false') {
40+
return null;
41+
}
42+
43+
// Check if there is a project level view to override the system one
44+
View::addNamespace('base', base_path());
45+
if (View::exists('base::maintenance')) {
46+
$defaultView = 'base::maintenance';
47+
} else {
48+
$defaultView = 'system::maintenance';
49+
}
50+
51+
return view($selectedView ?? $defaultView, [
52+
'message' => false,
53+
'wentDownAt' => false,
54+
'retryAfter' => $this->option('retry'),
55+
'willBeAvailableAt' => false,
56+
])->render();
57+
}
58+
}

src/Foundation/Http/Middleware/CheckForMaintenanceMode.php

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
namespace Winter\Storm\Foundation\Http\Middleware;
44

55
use Closure;
6-
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
6+
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
77
use Illuminate\Support\Facades\Lang;
8-
use Illuminate\Support\Facades\View;
98
use Illuminate\Support\Facades\Response;
109

1110
class CheckForMaintenanceMode extends Middleware
@@ -21,28 +20,13 @@ class CheckForMaintenanceMode extends Middleware
2120
*/
2221
public function handle($request, Closure $next)
2322
{
24-
try {
25-
return parent::handle($request, $next);
26-
} catch (\Illuminate\Foundation\Http\Exceptions\MaintenanceModeException $ex) {
27-
// Smoothly handle AJAX requests
28-
if (request()->ajax()) {
29-
return Response::make(Lang::get('system::lang.page.maintenance.help') . "\r\n" . $ex->getMessage(), 503);
30-
}
31-
32-
// Check if there is a project level view to override the system one
33-
View::addNamespace('base', base_path());
34-
if (View::exists('base::maintenance')) {
35-
$view = 'base::maintenance';
36-
} else {
37-
$view = 'system::maintenance';
38-
}
39-
40-
return Response::make(View::make($view, [
41-
'message' => $ex->getMessage(),
42-
'wentDownAt' => $ex->wentDownAt,
43-
'retryAfter' => $ex->retryAfter,
44-
'willBeAvailableAt' => $ex->willBeAvailableAt,
45-
]), 503);
23+
if ($this->app->maintenanceMode()->active() && request()->ajax()) {
24+
return Response::make(
25+
Lang::get('system::lang.page.maintenance.help'),
26+
503
27+
);
4628
}
29+
30+
return parent::handle($request, $next);
4731
}
4832
}

src/Foundation/Providers/ArtisanServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ArtisanServiceProvider extends ArtisanServiceProviderBase
2020
'ClearCompiled' => \Winter\Storm\Foundation\Console\ClearCompiledCommand::class,
2121
'ConfigCache' => \Winter\Storm\Foundation\Console\ConfigCacheCommand::class,
2222
'ConfigClear' => \Winter\Storm\Foundation\Console\ConfigClearCommand::class,
23-
'Down' => \Illuminate\Foundation\Console\DownCommand::class,
23+
'Down' => \Winter\Storm\Foundation\Console\DownCommand::class,
2424
'Environment' => \Illuminate\Foundation\Console\EnvironmentCommand::class,
2525
'EventCache' => \Illuminate\Foundation\Console\EventCacheCommand::class,
2626
'EventClear' => \Illuminate\Foundation\Console\EventClearCommand::class,

0 commit comments

Comments
 (0)