From f94711cd567793045b267e82ee97675ab52af664 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Sat, 25 May 2013 19:32:33 -0700 Subject: [PATCH] Issue #1987850 by oenie, vijaycs85, cosmicdreams, amateescu: Convert system_theme_disable() to a new style controller. --- .../system/Controller/ThemeController.php | 126 ++++++++++++++++++ core/modules/system/system.admin.inc | 50 ------- core/modules/system/system.module | 14 -- core/modules/system/system.routing.yml | 14 ++ 4 files changed, 140 insertions(+), 64 deletions(-) create mode 100644 core/modules/system/lib/Drupal/system/Controller/ThemeController.php diff --git a/core/modules/system/lib/Drupal/system/Controller/ThemeController.php b/core/modules/system/lib/Drupal/system/Controller/ThemeController.php new file mode 100644 index 00000000000..61d931ce030 --- /dev/null +++ b/core/modules/system/lib/Drupal/system/Controller/ThemeController.php @@ -0,0 +1,126 @@ +config = $config; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('config.factory')->get('system.theme') + ); + } + + /** + * Disables 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 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(); + } + + /** + * Enables 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 enable(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])) { + theme_enable(array($theme)); + drupal_set_message(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'); + } + + return new RedirectResponse(url('admin/appearance', array('absolute' => TRUE))); + } + + throw new AccessDeniedHttpException(); + } + +} diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc index 1566c805d3c..a44060e0362 100644 --- a/core/modules/system/system.admin.inc +++ b/core/modules/system/system.admin.inc @@ -285,56 +285,6 @@ function system_themes_admin_form_submit($form, &$form_state) { config('system.theme')->set('admin', $form_state['values']['admin_theme'])->save(); } -/** - * Menu callback; Enables a theme. - */ -function system_theme_enable() { - if (isset($_REQUEST['theme']) && isset($_REQUEST['token']) && drupal_valid_token($_REQUEST['token'], 'system-theme-operation-link')) { - $theme = $_REQUEST['theme']; - // Get current list of themes. - $themes = list_themes(); - - // 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']))); - } - else { - drupal_set_message(t('The %theme theme was not found.', array('%theme' => $theme)), 'error'); - } - drupal_goto('admin/appearance'); - } - throw new AccessDeniedHttpException(); -} - -/** - * Menu callback; Disables a theme. - */ -function system_theme_disable() { - if (isset($_REQUEST['theme']) && isset($_REQUEST['token']) && drupal_valid_token($_REQUEST['token'], 'system-theme-operation-link')) { - $theme = $_REQUEST['theme']; - // 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 === config('system.theme')->get('default') || $theme === config('system.theme')->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'); - } - drupal_goto('admin/appearance'); - } - throw new AccessDeniedHttpException(); -} - /** * Menu callback; Set the default theme. */ diff --git a/core/modules/system/system.module b/core/modules/system/system.module index bf0977b0a70..b6d37f0e3fb 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -703,20 +703,6 @@ function system_menu() { 'type' => MENU_DEFAULT_LOCAL_TASK, 'file' => 'system.admin.inc', ); - $items['admin/appearance/enable'] = array( - 'title' => 'Enable theme', - 'page callback' => 'system_theme_enable', - 'access arguments' => array('administer themes'), - 'type' => MENU_CALLBACK, - 'file' => 'system.admin.inc', - ); - $items['admin/appearance/disable'] = array( - 'title' => 'Disable theme', - 'page callback' => 'system_theme_disable', - 'access arguments' => array('administer themes'), - 'type' => MENU_CALLBACK, - 'file' => 'system.admin.inc', - ); $items['admin/appearance/default'] = array( 'title' => 'Set default theme', 'page callback' => 'system_theme_default', diff --git a/core/modules/system/system.routing.yml b/core/modules/system/system.routing.yml index 9859d6a0913..1b4c9a9702d 100644 --- a/core/modules/system/system.routing.yml +++ b/core/modules/system/system.routing.yml @@ -87,3 +87,17 @@ date_format_localize_reset: _form: '\Drupal\system\Form\DateFormatLocalizeResetForm' requirements: _permission: 'administer site configuration' + +system_theme_disable: + pattern: '/admin/appearance/disable' + defaults: + _controller: 'Drupal\system\Controller\ThemeController::disable' + requirements: + _permission: 'administer themes' + +system_theme_enable: + pattern: '/admin/appearance/enable' + defaults: + _controller: 'Drupal\system\Controller\ThemeController::enable' + requirements: + _permission: 'administer themes'