Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 85 |
| ThemeController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
342 | |
0.00% |
0 / 85 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| uninstall | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 20 |
|||
| install | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 32 |
|||
| setDefaultTheme | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 25 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\system\Controller\ThemeController. | |
| */ | |
| namespace Drupal\system\Controller; | |
| use Drupal\Core\Config\ConfigFactoryInterface; | |
| use Drupal\Core\Config\PreExistingConfigException; | |
| use Drupal\Core\Config\UnmetDependenciesException; | |
| use Drupal\Core\Controller\ControllerBase; | |
| 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; | |
| /** | |
| * Controller for theme handling. | |
| */ | |
| class ThemeController extends ControllerBase { | |
| /** | |
| * The theme handler service. | |
| * | |
| * @var \Drupal\Core\Extension\ThemeHandlerInterface | |
| */ | |
| protected $themeHandler; | |
| /** | |
| * Constructs a new ThemeController. | |
| * | |
| * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler | |
| * The theme handler. | |
| * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
| * The config factory. | |
| */ | |
| public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory) { | |
| $this->themeHandler = $theme_handler; | |
| $this->configFactory = $config_factory; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('theme_handler'), | |
| $container->get('config.factory') | |
| ); | |
| } | |
| /** | |
| * Uninstalls 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 uninstall(Request $request) { | |
| $theme = $request->get('theme'); | |
| $config = $this->config('system.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])) { | |
| // Do not uninstall the default or admin theme. | |
| if ($theme === $config->get('default') || $theme === $config->get('admin')) { | |
| drupal_set_message($this->t('%theme is the default theme and cannot be uninstalled.', array('%theme' => $themes[$theme]->info['name'])), 'error'); | |
| } | |
| else { | |
| $this->themeHandler->uninstall(array($theme)); | |
| drupal_set_message($this->t('The %theme theme has been uninstalled.', 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(); | |
| } | |
| /** | |
| * Installs 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 install(Request $request) { | |
| $theme = $request->get('theme'); | |
| if (isset($theme)) { | |
| try { | |
| if ($this->themeHandler->install(array($theme))) { | |
| $themes = $this->themeHandler->listInfo(); | |
| drupal_set_message($this->t('The %theme theme has been installed.', array('%theme' => $themes[$theme]->info['name']))); | |
| } | |
| else { | |
| drupal_set_message($this->t('The %theme theme was not found.', array('%theme' => $theme)), 'error'); | |
| } | |
| } | |
| catch (PreExistingConfigException $e) { | |
| $config_objects = $e->flattenConfigObjects($e->getConfigObjects()); | |
| drupal_set_message( | |
| $this->formatPlural( | |
| count($config_objects), | |
| 'Unable to install @extension, %config_names already exists in active configuration.', | |
| 'Unable to install @extension, %config_names already exist in active configuration.', | |
| array( | |
| '%config_names' => implode(', ', $config_objects), | |
| '@extension' => $theme, | |
| )), | |
| 'error' | |
| ); | |
| } | |
| catch (UnmetDependenciesException $e) { | |
| drupal_set_message($e->getTranslatedMessage($this->getStringTranslation(), $theme), 'error'); | |
| } | |
| 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->configFactory->getEditable('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. | |
| // Or try to install the theme. | |
| if (isset($themes[$theme]) || $this->themeHandler->install(array($theme))) { | |
| $themes = $this->themeHandler->listInfo(); | |
| // Set the default theme. | |
| $config->set('default', $theme)->save(); | |
| // 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(); | |
| } | |
| } |