function ThemeController::setDefaultTheme

Same name and namespace in other branches
  1. 11.x core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()
  2. 10 core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()
  3. 9 core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()
  4. 8.9.x core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::setDefaultTheme()

Set the default theme.

Parameters

string $theme: The theme name.

Return value

\Symfony\Component\HttpFoundation\RedirectResponse|array Redirects back to the appearance admin page or the confirmation form if an experimental theme will be installed.

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 175

Class

ThemeController
Controller for theme handling.

Namespace

Drupal\system\Controller

Code

public function setDefaultTheme(#[MapQueryParameter] string $theme) {
  $config = $this->configFactory
    ->getEditable('system.theme');
  // Get current list of themes.
  $themes = $this->themeHandler
    ->listInfo();
  // Display confirmation form if an experimental theme is being installed.
  if ($this->willInstallExperimentalTheme($theme)) {
    return $this->formBuilder()
      ->getForm(ThemeExperimentalConfirmForm::class, $theme, TRUE);
  }
  // Check if the specified theme is one recognized by the system.
  // Or try to install the theme.
  if (isset($themes[$theme]) || $this->themeInstaller
    ->install([
    $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 (!empty($admin_theme) && $admin_theme != $theme) {
      $this->messenger()
        ->addStatus($this->t('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.', [
        '%admin_theme' => $themes[$admin_theme]->info['name'],
        '%selected_theme' => $themes[$theme]->info['name'],
      ]));
    }
    else {
      $this->messenger()
        ->addStatus($this->t('%theme is now the default theme.', [
        '%theme' => $themes[$theme]->info['name'],
      ]));
    }
  }
  else {
    $this->messenger()
      ->addError($this->t('The %theme theme was not found.', [
      '%theme' => $theme,
    ]));
  }
  return $this->redirect('system.themes_page');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.