Disables a theme.
\Symfony\Component\HttpFoundation\Request $request: A request object containing a theme name and a valid token.
\Symfony\Component\HttpFoundation\RedirectResponse Redirects back to the appearance admin page.
\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 disable(Request $request) {
$theme = $request
->get('theme');
$token = $request
->get('token');
if (isset($theme) && isset($token) && drupal_valid_token($token, 'system-theme-operation-link')) {
// Get current list of themes.
$themes = list_themes();
// Check if the specified theme is one recognized by the system.
if (!empty($themes[$theme])) {
// Do not disable the default or admin theme.
if ($theme === $this->config
->get('default') || $theme === $this->config
->get('admin')) {
drupal_set_message(t('%theme is the default theme and cannot be disabled.', array(
'%theme' => $themes[$theme]->info['name'],
)), 'error');
}
else {
theme_disable(array(
$theme,
));
drupal_set_message(t('The %theme theme has been disabled.', array(
'%theme' => $themes[$theme]->info['name'],
)));
}
}
else {
drupal_set_message(t('The %theme theme was not found.', array(
'%theme' => $theme,
)), 'error');
}
return new RedirectResponse(url('admin/appearance', array(
'absolute' => TRUE,
)));
}
throw new AccessDeniedHttpException();
}