Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 37 |
MaintenanceModeSubscriber | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
72 | |
0.00% |
0 / 37 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
onKernelRequestMaintenance | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 24 |
|||
drupalSetMessage | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getSubscribedEvents | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\EventSubscriber\MaintenanceModeSubscriber. | |
*/ | |
namespace Drupal\Core\EventSubscriber; | |
use Drupal\Component\Utility\SafeMarkup; | |
use Drupal\Component\Utility\Xss; | |
use Drupal\Core\Config\ConfigFactoryInterface; | |
use Drupal\Core\Render\BareHtmlPageRendererInterface; | |
use Drupal\Core\Routing\RouteMatch; | |
use Drupal\Core\Routing\UrlGeneratorInterface; | |
use Drupal\Core\Session\AccountInterface; | |
use Drupal\Core\Site\MaintenanceModeInterface; | |
use Drupal\Core\StringTranslation\StringTranslationTrait; | |
use Drupal\Core\StringTranslation\TranslationInterface; | |
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
use Symfony\Component\HttpKernel\Event\GetResponseEvent; | |
use Symfony\Component\HttpKernel\KernelEvents; | |
/** | |
* Maintenance mode subscriber for controller requests. | |
*/ | |
class MaintenanceModeSubscriber implements EventSubscriberInterface { | |
use StringTranslationTrait; | |
/** | |
* The maintenance mode. | |
* | |
* @var \Drupal\Core\Site\MaintenanceModeInterface | |
*/ | |
protected $maintenanceMode; | |
/** | |
* The current account. | |
* | |
* @var \Drupal\Core\Session\AccountInterface | |
*/ | |
protected $account; | |
/** | |
* The config factory. | |
* | |
* @var \Drupal\Core\Config\ConfigFactoryInterface | |
*/ | |
protected $config; | |
/** | |
* The url generator. | |
* | |
* @var \Drupal\Core\Routing\UrlGeneratorInterface | |
*/ | |
protected $urlGenerator; | |
/** | |
* The bare HTML page renderer. | |
* | |
* @var \Drupal\Core\Render\BareHtmlPageRendererInterface | |
*/ | |
protected $bareHtmlPageRenderer; | |
/** | |
* Constructs a new MaintenanceModeSubscriber. | |
* | |
* @param \Drupal\Core\Site\MaintenanceModeInterface $maintenance_mode | |
* The maintenance mode. | |
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
* The config factory. | |
* @param \Drupal\Core\StringTranslation\TranslationInterface $translation | |
* The string translation. | |
* @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator | |
* The url generator. | |
* @param \Drupal\Core\Session\AccountInterface $account | |
* The current user. | |
* @param \Drupal\Core\Render\BareHtmlPageRendererInterface $bare_html_page_renderer | |
* The bare HTML page renderer. | |
*/ | |
public function __construct(MaintenanceModeInterface $maintenance_mode, ConfigFactoryInterface $config_factory, TranslationInterface $translation, UrlGeneratorInterface $url_generator, AccountInterface $account, BareHtmlPageRendererInterface $bare_html_page_renderer) { | |
$this->maintenanceMode = $maintenance_mode; | |
$this->config = $config_factory; | |
$this->stringTranslation = $translation; | |
$this->urlGenerator = $url_generator; | |
$this->account = $account; | |
$this->bareHtmlPageRenderer = $bare_html_page_renderer; | |
} | |
/** | |
* Returns the site maintenance page if the site is offline. | |
* | |
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event | |
* The event to process. | |
*/ | |
public function onKernelRequestMaintenance(GetResponseEvent $event) { | |
$route_match = RouteMatch::createFromRequest($event->getRequest()); | |
if ($this->maintenanceMode->applies($route_match)) { | |
// Don't cache maintenance mode pages. | |
\Drupal::service('page_cache_kill_switch')->trigger(); | |
if (!$this->maintenanceMode->exempt($this->account)) { | |
// Deliver the 503 page if the site is in maintenance mode and the | |
// logged in user is not allowed to bypass it. | |
drupal_maintenance_theme(); | |
$content = Xss::filterAdmin(SafeMarkup::format($this->config->get('system.maintenance')->get('message'), array( | |
'@site' => $this->config->get('system.site')->get('name'), | |
))); | |
$response = $this->bareHtmlPageRenderer->renderBarePage(['#markup' => $content], $this->t('Site under maintenance'), 'maintenance_page'); | |
$response->setStatusCode(503); | |
$event->setResponse($response); | |
} | |
else { | |
// Display a message if the logged in user has access to the site in | |
// maintenance mode. However, suppress it on the maintenance mode | |
// settings page. | |
if ($route_match->getRouteName() != 'system.site_maintenance_mode') { | |
if ($this->account->hasPermission('administer site configuration')) { | |
$this->drupalSetMessage($this->t('Operating in maintenance mode. <a href=":url">Go online.</a>', array(':url' => $this->urlGenerator->generate('system.site_maintenance_mode'))), 'status', FALSE); | |
} | |
else { | |
$this->drupalSetMessage($this->t('Operating in maintenance mode.'), 'status', FALSE); | |
} | |
} | |
} | |
} | |
} | |
/** | |
* Wraps the drupal_set_message function. | |
*/ | |
protected function drupalSetMessage($message = NULL, $type = 'status', $repeat = FALSE) { | |
return drupal_set_message($message, $type, $repeat); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function getSubscribedEvents() { | |
$events[KernelEvents::REQUEST][] = array('onKernelRequestMaintenance', 30); | |
$events[KernelEvents::EXCEPTION][] = array('onKernelRequestMaintenance'); | |
return $events; | |
} | |
} |