Mercurial > hg > isophonics-drupal-site
diff core/modules/system/src/Plugin/Condition/CurrentThemeCondition.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/system/src/Plugin/Condition/CurrentThemeCondition.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,130 @@ +<?php + +namespace Drupal\system\Plugin\Condition; + +use Drupal\Core\Condition\ConditionPluginBase; +use Drupal\Core\Extension\ThemeHandlerInterface; +use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\Core\Theme\ThemeManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Provides a 'Current Theme' condition. + * + * @Condition( + * id = "current_theme", + * label = @Translation("Current Theme"), + * ) + */ +class CurrentThemeCondition extends ConditionPluginBase implements ContainerFactoryPluginInterface { + + /** + * The theme manager. + * + * @var \Drupal\Core\Theme\ThemeManagerInterface + */ + protected $themeManager; + + /** + * The theme handler. + * + * @var \Drupal\Core\Extension\ThemeHandlerInterface + */ + protected $themeHandler; + + /** + * Constructs a CurrentThemeCondition condition plugin. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin_id for the plugin instance. + * @param mixed $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Theme\ThemeManagerInterface $theme_manager + * The theme manager. + * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler + * The theme handler. + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, ThemeManagerInterface $theme_manager, ThemeHandlerInterface $theme_handler) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->themeManager = $theme_manager; + $this->themeHandler = $theme_handler; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('theme.manager'), + $container->get('theme_handler') + ); + } + + /** + * {@inheritdoc} + */ + public function defaultConfiguration() { + return ['theme' => ''] + parent::defaultConfiguration(); + } + + /** + * {@inheritdoc} + */ + public function buildConfigurationForm(array $form, FormStateInterface $form_state) { + $form['theme'] = [ + '#type' => 'select', + '#title' => $this->t('Theme'), + '#default_value' => $this->configuration['theme'], + '#options' => array_map(function ($theme_info) { + return $theme_info->info['name']; + }, $this->themeHandler->listInfo()), + ]; + return parent::buildConfigurationForm($form, $form_state); + } + + /** + * {@inheritdoc} + */ + public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { + $this->configuration['theme'] = $form_state->getValue('theme'); + parent::submitConfigurationForm($form, $form_state); + } + + /** + * {@inheritdoc} + */ + public function evaluate() { + if (!$this->configuration['theme']) { + return TRUE; + } + + return $this->themeManager->getActiveTheme()->getName() == $this->configuration['theme']; + } + + /** + * {@inheritdoc} + */ + public function summary() { + if ($this->isNegated()) { + return $this->t('The current theme is not @theme', ['@theme' => $this->configuration['theme']]); + } + + return $this->t('The current theme is @theme', ['@theme' => $this->configuration['theme']]); + } + + /** + * {@inheritdoc} + */ + public function getCacheContexts() { + $contexts = parent::getCacheContexts(); + $contexts[] = 'theme'; + return $contexts; + } + +}