Mercurial > hg > cmmr2012-drupal-site
diff core/modules/user/src/Theme/AdminNegotiator.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | 12f9dff5fda9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/user/src/Theme/AdminNegotiator.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,78 @@ +<?php + +namespace Drupal\user\Theme; + +use Drupal\Core\Config\ConfigFactoryInterface; +use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Routing\AdminContext; +use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\Core\Session\AccountInterface; +use Drupal\Core\Theme\ThemeNegotiatorInterface; + +/** + * Sets the active theme on admin pages. + */ +class AdminNegotiator implements ThemeNegotiatorInterface { + + /** + * The current user. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $user; + + /** + * The config factory. + * + * @var \Drupal\Core\Config\ConfigFactoryInterface + */ + protected $configFactory; + + /** + * The entity manager. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityManager; + + /** + * The route admin context to determine whether a route is an admin one. + * + * @var \Drupal\Core\Routing\AdminContext + */ + protected $adminContext; + + /** + * Creates a new AdminNegotiator instance. + * + * @param \Drupal\Core\Session\AccountInterface $user + * The current user. + * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory + * The config factory. + * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * The entity manager. + * @param \Drupal\Core\Routing\AdminContext $admin_context + * The route admin context to determine whether the route is an admin one. + */ + public function __construct(AccountInterface $user, ConfigFactoryInterface $config_factory, EntityManagerInterface $entity_manager, AdminContext $admin_context) { + $this->user = $user; + $this->configFactory = $config_factory; + $this->entityManager = $entity_manager; + $this->adminContext = $admin_context; + } + + /** + * {@inheritdoc} + */ + public function applies(RouteMatchInterface $route_match) { + return ($this->entityManager->hasHandler('user_role', 'storage') && $this->user->hasPermission('view the administration theme') && $this->adminContext->isAdminRoute($route_match->getRouteObject())); + } + + /** + * {@inheritdoc} + */ + public function determineActiveTheme(RouteMatchInterface $route_match) { + return $this->configFactory->get('system.theme')->get('admin'); + } + +}