/**
  * Checks whether the given path is an administrative one.
  *
  * @param \Symfony\Component\HttpFoundation\Request $request
  *   The request object.
  *
  * @return bool
  *   TRUE if the path is administrative, FALSE otherwise.
  */
 protected function isAdminPath(Request $request)
 {
     $result = FALSE;
     if ($request && $this->adminContext) {
         // If called from an event subscriber, the request may not have the route
         // object yet (it is still being built), so use the router to look up
         // based on the path.
         $route_match = $this->stackedRouteMatch->getRouteMatchFromRequest($request);
         if ($route_match && !($route_object = $route_match->getRouteObject())) {
             try {
                 // Process the path as an inbound path. This will remove any language
                 // prefixes and other path components that inbound processing would
                 // clear out, so we can attempt to load the route clearly.
                 $path = $this->pathProcessorManager->processInbound(urldecode(rtrim($request->getPathInfo(), '/')), $request);
                 $attributes = $this->router->match($path);
             } catch (ResourceNotFoundException $e) {
                 return FALSE;
             } catch (AccessDeniedHttpException $e) {
                 return FALSE;
             }
             $route_object = $attributes[RouteObjectInterface::ROUTE_OBJECT];
         }
         $result = $this->adminContext->isAdminRoute($route_object);
     }
     return $result;
 }
Ejemplo n.º 2
0
 /**
  * Tests resolving the inbound path to the system path.
  */
 function testProcessInbound()
 {
     // Create an alias manager stub.
     $alias_manager = $this->getMockBuilder('Drupal\\Core\\Path\\AliasManager')->disableOriginalConstructor()->getMock();
     $system_path_map = array(array('/foo', NULL, '/user/1'), array('/fr/foo', NULL, '/fr/foo'), array('/fr', NULL, '/fr'), array('/user/login', NULL, '/user/login'));
     $alias_manager->expects($this->any())->method('getPathByAlias')->will($this->returnValueMap($system_path_map));
     // Create a stub config factory with all config settings that will be checked
     // during this test.
     $config_factory_stub = $this->getConfigFactoryStub(array('system.site' => array('page.front' => '/user/login'), 'language.negotiation' => array('url' => array('prefixes' => array('fr' => 'fr')))));
     // Create a language negotiator stub.
     $negotiator = $this->getMockBuilder('Drupal\\language\\LanguageNegotiatorInterface')->getMock();
     $negotiator->expects($this->any())->method('getNegotiationMethods')->will($this->returnValue(array(LanguageNegotiationUrl::METHOD_ID => array('class' => 'Drupal\\language\\Plugin\\LanguageNegotiation\\LanguageNegotiationUrl'))));
     $method = new LanguageNegotiationUrl();
     $method->setConfig($config_factory_stub);
     $method->setLanguageManager($this->languageManager);
     $negotiator->expects($this->any())->method('getNegotiationMethodInstance')->will($this->returnValue($method));
     // Create a user stub.
     $current_user = $this->getMockBuilder('Drupal\\Core\\Session\\AccountInterface')->getMock();
     // Create the processors.
     $alias_processor = new PathProcessorAlias($alias_manager);
     $decode_processor = new PathProcessorDecode();
     $front_processor = new PathProcessorFront($config_factory_stub);
     $language_processor = new PathProcessorLanguage($config_factory_stub, $this->languageManager, $negotiator, $current_user);
     // First, test the processor manager with the processors in the incorrect
     // order. The alias processor will run before the language processor, meaning
     // aliases will not be found.
     $priorities = array(1000 => $alias_processor, 500 => $decode_processor, 300 => $front_processor, 200 => $language_processor);
     // Create the processor manager and add the processors.
     $processor_manager = new PathProcessorManager();
     foreach ($priorities as $priority => $processor) {
         $processor_manager->addInbound($processor, $priority);
     }
     // Test resolving the French homepage using the incorrect processor order.
     $test_path = '/fr';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/', $processed, 'Processing in the incorrect order fails to resolve the system path from the empty path');
     // Test resolving an existing alias using the incorrect processor order.
     $test_path = '/fr/foo';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/foo', $processed, 'Processing in the incorrect order fails to resolve the system path from an alias');
     // Now create a new processor manager and add the processors, this time in
     // the correct order.
     $processor_manager = new PathProcessorManager();
     $priorities = array(1000 => $decode_processor, 500 => $language_processor, 300 => $front_processor, 200 => $alias_processor);
     foreach ($priorities as $priority => $processor) {
         $processor_manager->addInbound($processor, $priority);
     }
     // Test resolving the French homepage using the correct processor order.
     $test_path = '/fr';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/user/login', $processed, 'Processing in the correct order resolves the system path from the empty path.');
     // Test resolving an existing alias using the correct processor order.
     $test_path = '/fr/foo';
     $request = Request::create($test_path);
     $processed = $processor_manager->processInbound($test_path, $request);
     $this->assertEquals('/user/1', $processed, 'Processing in the correct order resolves the system path from an alias.');
 }