Issue #1987850 by oenie, vijaycs85, cosmicdreams, amateescu: Convert system_theme_disable() to a new style controller.

8.0.x
Alex Pott 2013-05-25 19:32:33 -07:00
parent 7961e03aeb
commit f94711cd56
4 changed files with 140 additions and 64 deletions

View File

@ -0,0 +1,126 @@
<?php
/**
* @file
* Contains \Drupal\system\Controller\ThemeController.
*/
namespace Drupal\system\Controller;
use Drupal\Core\Config\Config;
use Drupal\Core\Controller\ControllerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
/**
* Controller for theme handling.
*/
class ThemeController implements ControllerInterface {
/**
* The system.theme config object.
*
* @var \Drupal\Core\Config\Config
*/
protected $config;
/**
* Constructs a ThemeController object.
*
* @param \Drupal\Core\Config\Config $config
* The config.
*/
public function __construct(Config $config) {
$this->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();
}
}

View File

@ -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.
*/

View File

@ -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',

View File

@ -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'