You are here

public function ThemeController::uninstall in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::uninstall()
  2. 10 core/modules/system/src/Controller/ThemeController.php \Drupal\system\Controller\ThemeController::uninstall()

Uninstalls a theme.

Parameters

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

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 or token is set in the request or when the token is invalid.

1 string reference to 'ThemeController::uninstall'
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 88

Class

ThemeController
Controller for theme handling.

Namespace

Drupal\system\Controller

Code

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

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

    // Check if the specified theme is one recognized by the system.
    if (!empty($themes[$theme])) {

      // Do not uninstall the default or admin theme.
      if ($theme === $config
        ->get('default') || $theme === $config
        ->get('admin')) {
        $this
          ->messenger()
          ->addError($this
          ->t('%theme is the default theme and cannot be uninstalled.', [
          '%theme' => $themes[$theme]->info['name'],
        ]));
      }
      else {
        $this->themeInstaller
          ->uninstall([
          $theme,
        ]);
        $this
          ->messenger()
          ->addStatus($this
          ->t('The %theme theme has been uninstalled.', [
          '%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');
  }
  throw new AccessDeniedHttpException();
}