/** * Uninstalls a theme. * * @param \Symfony\Component\HttpFoundation\Request $request * A request object containing a theme name and a valid token. * * @return \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. */ public function uninstall(Request $request) { $theme = $request->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')) { drupal_set_message($this->t('%theme is the default theme and cannot be uninstalled.', array('%theme' => $themes[$theme]->info['name'])), 'error'); } else { $this->themeHandler->uninstall(array($theme)); drupal_set_message($this->t('The %theme theme has been uninstalled.', 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(); }