Mercurial > hg > isophonics-drupal-site
view core/lib/Drupal/Core/Routing/RouteProviderLazyBuilder.php @ 13:5fb285c0d0e3
Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've
been lucky to get away with this so far, as we don't support self-registration
which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5
was vulnerable to.
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:33:26 +0100 |
parents | 7a779792577d |
children |
line wrap: on
line source
<?php namespace Drupal\Core\Routing; use Symfony\Cmf\Component\Routing\PagedRouteProviderInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; /** * A Route Provider front-end for all Drupal-stored routes. */ class RouteProviderLazyBuilder implements PreloadableRouteProviderInterface, PagedRouteProviderInterface, EventSubscriberInterface { /** * The route provider service. * * @var \Drupal\Core\Routing\RouteProviderInterface */ protected $routeProvider; /** * The route building service. * * @var \Drupal\Core\Routing\RouteBuilderInterface */ protected $routeBuilder; /** * Flag to determine if the router has been rebuilt. * * @var bool */ protected $rebuilt = FALSE; /** * Flag to determine if router is currently being rebuilt. * * Used to prevent recursive router rebuilds during module installation. * Recursive rebuilds can occur when route information is required by alter * hooks that are triggered during a rebuild, for example, * hook_menu_links_discovered_alter(). * * @var bool */ protected $rebuilding = FALSE; /** * RouteProviderLazyBuilder constructor. * * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider * The route provider service. * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder * The route building service. */ public function __construct(RouteProviderInterface $route_provider, RouteBuilderInterface $route_builder) { $this->routeProvider = $route_provider; $this->routeBuilder = $route_builder; } /** * Gets the real route provider service and rebuilds the router id necessary. * * @return \Drupal\Core\Routing\RouteProviderInterface * The route provider service. */ protected function getRouteProvider() { if (!$this->rebuilt && !$this->rebuilding) { $this->routeBuilder->rebuild(); $this->rebuilt = TRUE; } return $this->routeProvider; } /** * {@inheritdoc} */ public function getRouteCollectionForRequest(Request $request) { return $this->getRouteProvider()->getRouteCollectionForRequest($request); } /** * {@inheritdoc} */ public function getRouteByName($name) { return $this->getRouteProvider()->getRouteByName($name); } /** * {@inheritdoc} */ public function preLoadRoutes($names) { return $this->getRouteProvider()->preLoadRoutes($names); } /** * {@inheritdoc} */ public function getRoutesByNames($names) { return $this->getRouteProvider()->getRoutesByNames($names); } /** * {@inheritdoc} */ public function getRoutesByPattern($pattern) { return $this->getRouteProvider()->getRoutesByPattern($pattern); } /** * {@inheritdoc} */ public function getAllRoutes() { return $this->getRouteProvider()->getAllRoutes(); } /** * {@inheritdoc} */ public function reset() { // Don't call getRouteProvider as this is results in recursive rebuilds. return $this->routeProvider->reset(); } /** * {@inheritdoc} */ public function getRoutesPaged($offset, $length = NULL) { return $this->getRouteProvider()->getRoutesPaged($offset, $length); } /** * {@inheritdoc} */ public function getRoutesCount() { return $this->getRouteProvider()->getRoutesCount(); } /** * Determines if the router has been rebuilt. * * @return bool * TRUE is the router has been rebuilt, FALSE if not. */ public function hasRebuilt() { return $this->rebuilt; } /** * {@inheritdoc} */ public static function getSubscribedEvents() { $events[RoutingEvents::DYNAMIC][] = ['routerRebuilding', 3000]; $events[RoutingEvents::FINISHED][] = ['routerRebuildFinished', -3000]; return $events; } /** * Sets the router rebuilding flag to TRUE. */ public function routerRebuilding() { $this->rebuilding = TRUE; } /** * Sets the router rebuilding flag to FALSE. */ public function routerRebuildFinished() { $this->rebuilding = FALSE; } }