Commit 972b532d authored by alexpott's avatar alexpott

Issue #1987848 by disasm, ocsilalala, kim.pepper, pwieck, Cottser, pratik60,...

Issue #1987848 by disasm, ocsilalala, kim.pepper, pwieck, Cottser, pratik60, h3rj4n, pfrenssen, InternetDevels, ParisLiakos, rgoodine, tlyngej, vijaycs85, robeano: Convert system_theme_default() to a new style controller.
parent 9528f219
......@@ -319,14 +319,6 @@ public function themesPage() {
return $build;
}
/**
* @todo Remove system_theme_default().
*/
public function themeSetDefault() {
module_load_include('admin.inc', 'system');
return system_theme_default();
}
/**
* #post_render_cache callback; sets the "active" class on relevant links.
*
......
......@@ -8,7 +8,9 @@
namespace Drupal\system\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Extension\ThemeHandlerInterface;
use Drupal\Core\Routing\RouteBuilderInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
......@@ -17,6 +19,43 @@
*/
class ThemeController extends ControllerBase {
/**
* The theme handler service.
*
* @var \Drupal\Core\Extension\ThemeHandlerInterface
*/
protected $themeHandler;
/**
* The route builder service.
*
* @var \Drupal\Core\Routing\RouteBuilderInterface
*/
protected $routeBuilder;
/**
* Constructs a new ThemeController.
*
* @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
* The theme handler.
* @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder
* The route builder.
*/
public function __construct(ThemeHandlerInterface $theme_handler, RouteBuilderInterface $route_builder) {
$this->themeHandler = $theme_handler;
$this->routeBuilder = $route_builder;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('theme_handler'),
$container->get('router.builder')
);
}
/**
* Disables a theme.
*
......@@ -36,24 +75,24 @@ public function disable(Request $request) {
if (isset($theme)) {
// Get current list of themes.
$themes = list_themes();
$themes = $this->themeHandler->listInfo();
// 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 === $config->get('default') || $theme === $config->get('admin')) {
drupal_set_message(t('%theme is the default theme and cannot be disabled.', array('%theme' => $themes[$theme]->info['name'])), 'error');
drupal_set_message($this->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'])));
$this->themeHandler->disable(array($theme));
drupal_set_message($this->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');
drupal_set_message($this->t('The %theme theme was not found.', array('%theme' => $theme)), 'error');
}
return new RedirectResponse(url('admin/appearance', array('absolute' => TRUE)));
return $this->redirect('system.themes_page');
}
throw new AccessDeniedHttpException();
......@@ -77,21 +116,77 @@ public function enable(Request $request) {
if (isset($theme)) {
// Get current list of themes.
$themes = list_themes(TRUE);
$themes = $this->themeHandler->listInfo();
// Check if the specified theme is one recognized by the system.
if (!empty($themes[$theme])) {
theme_enable(array($theme));
drupal_set_message(t('The %theme theme has been enabled.', array('%theme' => $themes[$theme]->info['name'])));
$this->themeHandler->enable(array($theme));
drupal_set_message($this->t('The %theme theme has been enabled.', array('%theme' => $themes[$theme]->info['name'])));
}
else {
drupal_set_message(t('The %theme theme was not found.', array('%theme' => $theme)), 'error');
drupal_set_message($this->t('The %theme theme was not found.', array('%theme' => $theme)), 'error');
}
return new RedirectResponse(url('admin/appearance', array('absolute' => TRUE)));
return $this->redirect('system.themes_page');
}
throw new AccessDeniedHttpException();
}
/**
* Set the default theme.
*
* @param \Symfony\Component\HttpFoundation\Request $request
* A request object containing a theme name.
*
* @return \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.
*/
public function setDefaultTheme(Request $request) {
$config = $this->config('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.
if (!empty($themes[$theme])) {
// Enable the theme if it is currently disabled.
if (empty($themes[$theme]->status)) {
$this->themeHandler->enable(array($theme));
}
// Set the default theme.
$config->set('default', $theme)->save();
$this->routeBuilder->setRebuildNeeded();
// 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();
}
}
......@@ -10,52 +10,6 @@
use Drupal\Core\Extension\Extension;
use Drupal\Core\Render\Element;
use Drupal\Core\Template\Attribute;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
/**
* Menu callback; Set the default theme.
*/
function system_theme_default() {
$request = \Drupal::request();
$theme = $request->get('theme');
if (!empty($theme)) {
// Get current list of themes.
$themes = list_themes();
// Check if the specified theme is one recognized by the system.
if (!empty($themes[$theme])) {
// Enable the theme if it is currently disabled.
if (empty($themes[$theme]->status)) {
theme_enable(array($theme));
}
// Set the default theme.
\Drupal::config('system.theme')
->set('default', $theme)
->save();
\Drupal::service('router.builder')->setRebuildNeeded();
// 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 = \Drupal::config('system.theme')->get('admin');
if ($admin_theme != 0 && $admin_theme != $theme) {
drupal_set_message(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(t('%theme is now the default theme.', 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();
}
/**
* Recursively check compatibility.
......
......@@ -324,7 +324,7 @@ system.theme_set_default:
path: '/admin/appearance/default'
defaults:
_title: 'Set as default theme'
_content: '\Drupal\system\Controller\SystemController::themeSetDefault'
_content: '\Drupal\system\Controller\ThemeController::setDefaultTheme'
requirements:
_permission: 'administer themes'
_csrf_token: 'TRUE'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment