You are here

public function ThemeController::setDefaultTheme in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()

Set the default theme.

Parameters

\Symfony\Component\HttpFoundation\Request $request: A request object containing a theme name.

Return value

\Symfony\Component\HttpFoundation\RedirectResponse Redirects back to the appearance admin page.

Throws

\Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException Throws access denied when no theme is set in the request.

1 string reference to 'ThemeController::setDefaultTheme'
system.routing.yml in core/modules/system/system.routing.yml
core/modules/system/system.routing.yml

File

core/modules/system/src/Controller/ThemeController.php, line 159
Contains \Drupal\system\Controller\ThemeController.

Class

ThemeController
Controller for theme handling.

Namespace

Drupal\system\Controller

Code

public function setDefaultTheme(Request $request) {
  $config = $this->configFactory
    ->getEditable('system.theme');
  $theme = $request->query
    ->get('theme');
  if (isset($theme)) {

    // Get current list of themes.
    $themes = $this->themeHandler
      ->listInfo();

    // Check if the specified theme is one recognized by the system.
    // Or try to install the theme.
    if (isset($themes[$theme]) || $this->themeHandler
      ->install(array(
      $theme,
    ))) {
      $themes = $this->themeHandler
        ->listInfo();

      // Set the default theme.
      $config
        ->set('default', $theme)
        ->save();

      // The status message depends on whether an admin theme is currently in
      // use: a value of 0 means the admin theme is set to be the default
      // theme.
      $admin_theme = $config
        ->get('admin');
      if ($admin_theme != 0 && $admin_theme != $theme) {
        drupal_set_message($this
          ->t('Please note that the administration theme is still set to the %admin_theme theme; consequently, the theme on this page remains unchanged. All non-administrative sections of the site, however, will show the selected %selected_theme theme by default.', array(
          '%admin_theme' => $themes[$admin_theme]->info['name'],
          '%selected_theme' => $themes[$theme]->info['name'],
        )));
      }
      else {
        drupal_set_message($this
          ->t('%theme is now the default theme.', array(
          '%theme' => $themes[$theme]->info['name'],
        )));
      }
    }
    else {
      drupal_set_message($this
        ->t('The %theme theme was not found.', array(
        '%theme' => $theme,
      )), 'error');
    }
    return $this
      ->redirect('system.themes_page');
  }
  throw new AccessDeniedHttpException();
}