You are here

public function RoleNegotiator::applies in Role Based Theme Switcher 9.1.x

Same name and namespace in other branches
  1. 8 src/Theme/RoleNegotiator.php \Drupal\role_based_theme_switcher\Theme\RoleNegotiator::applies()

Whether this theme negotiator should be used to set the theme.

Parameters

\Drupal\Core\Routing\RouteMatchInterface $route_match: The current route match object.

Return value

bool TRUE if this negotiator should be used or FALSE to let other negotiators decide.

Overrides ThemeNegotiatorInterface::applies

File

src/Theme/RoleNegotiator.php, line 64

Class

RoleNegotiator
Sets the active theme on admin pages.

Namespace

Drupal\role_based_theme_switcher\Theme

Code

public function applies(RouteMatchInterface $route_match) {

  // Use this theme on a certain route.
  $change_theme = TRUE;
  $route = $this->routeMatch
    ->getRouteObject();
  $is_admin_route = $this->adminRoute
    ->isAdminRoute($route);
  if ($is_admin_route === TRUE && $this->account
    ->hasPermission('view the administration theme') === TRUE) {
    $change_theme = FALSE;
  }

  // Here you return the actual theme name.
  $roleThemes = $this->configFactory
    ->get('role_based_theme_switcher.RoleBasedThemeSwitchConfig')
    ->get('roletheme');

  // Get current roles a user has.
  $roles = $this->account
    ->getRoles();

  // Get highest role.
  $theme_role = $this
    ->getPriorityRole($roles);
  if (!empty($roleThemes[$theme_role]['id'])) {
    $this->theme = $roleThemes[$theme_role]['id'];
  }
  return $change_theme;
}