Issue #1987850 by oenie, vijaycs85, cosmicdreams, amateescu: Convert system_theme_disable() to a new style controller.
parent
7961e03aeb
commit
f94711cd56
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -285,56 +285,6 @@ function system_themes_admin_form_submit($form, &$form_state) {
|
||||||
config('system.theme')->set('admin', $form_state['values']['admin_theme'])->save();
|
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.
|
* Menu callback; Set the default theme.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -703,20 +703,6 @@ function system_menu() {
|
||||||
'type' => MENU_DEFAULT_LOCAL_TASK,
|
'type' => MENU_DEFAULT_LOCAL_TASK,
|
||||||
'file' => 'system.admin.inc',
|
'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(
|
$items['admin/appearance/default'] = array(
|
||||||
'title' => 'Set default theme',
|
'title' => 'Set default theme',
|
||||||
'page callback' => 'system_theme_default',
|
'page callback' => 'system_theme_default',
|
||||||
|
|
|
@ -87,3 +87,17 @@ date_format_localize_reset:
|
||||||
_form: '\Drupal\system\Form\DateFormatLocalizeResetForm'
|
_form: '\Drupal\system\Form\DateFormatLocalizeResetForm'
|
||||||
requirements:
|
requirements:
|
||||||
_permission: 'administer site configuration'
|
_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'
|
||||||
|
|
Loading…
Reference in New Issue