Version 1
[yaffs-website] / web / core / modules / system / src / Plugin / Condition / CurrentThemeCondition.php
1 <?php
2
3 namespace Drupal\system\Plugin\Condition;
4
5 use Drupal\Core\Condition\ConditionPluginBase;
6 use Drupal\Core\Extension\ThemeHandlerInterface;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
9 use Drupal\Core\Theme\ThemeManagerInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11
12 /**
13  * Provides a 'Current Theme' condition.
14  *
15  * @Condition(
16  *   id = "current_theme",
17  *   label = @Translation("Current Theme"),
18  * )
19  */
20 class CurrentThemeCondition extends ConditionPluginBase implements ContainerFactoryPluginInterface {
21
22   /**
23    * The theme manager.
24    *
25    * @var \Drupal\Core\Theme\ThemeManagerInterface
26    */
27   protected $themeManager;
28
29   /**
30    * The theme handler.
31    *
32    * @var \Drupal\Core\Extension\ThemeHandlerInterface
33    */
34   protected $themeHandler;
35
36   /**
37    * Constructs a CurrentThemeCondition condition plugin.
38    *
39    * @param array $configuration
40    *   A configuration array containing information about the plugin instance.
41    * @param string $plugin_id
42    *   The plugin_id for the plugin instance.
43    * @param mixed $plugin_definition
44    *   The plugin implementation definition.
45    * @param \Drupal\Core\Theme\ThemeManagerInterface $theme_manager
46    *   The theme manager.
47    * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
48    *   The theme handler.
49    */
50   public function __construct(array $configuration, $plugin_id, $plugin_definition, ThemeManagerInterface $theme_manager, ThemeHandlerInterface $theme_handler) {
51     parent::__construct($configuration, $plugin_id, $plugin_definition);
52     $this->themeManager = $theme_manager;
53     $this->themeHandler = $theme_handler;
54   }
55
56   /**
57    * {@inheritdoc}
58    */
59   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
60     return new static(
61       $configuration,
62       $plugin_id,
63       $plugin_definition,
64       $container->get('theme.manager'),
65       $container->get('theme_handler')
66     );
67   }
68
69   /**
70    * {@inheritdoc}
71    */
72   public function defaultConfiguration() {
73     return ['theme' => ''] + parent::defaultConfiguration();
74   }
75
76   /**
77    * {@inheritdoc}
78    */
79   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
80     $form['theme'] = [
81       '#type' => 'select',
82       '#title' => $this->t('Theme'),
83       '#default_value' => $this->configuration['theme'],
84       '#options' => array_map(function ($theme_info) {
85         return $theme_info->info['name'];
86       }, $this->themeHandler->listInfo()),
87     ];
88     return parent::buildConfigurationForm($form, $form_state);
89   }
90
91   /**
92    * {@inheritdoc}
93    */
94   public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
95     $this->configuration['theme'] = $form_state->getValue('theme');
96     parent::submitConfigurationForm($form, $form_state);
97   }
98
99   /**
100    * {@inheritdoc}
101    */
102   public function evaluate() {
103     if (!$this->configuration['theme']) {
104       return TRUE;
105     }
106
107     return $this->themeManager->getActiveTheme()->getName() == $this->configuration['theme'];
108   }
109
110   /**
111    * {@inheritdoc}
112    */
113   public function summary() {
114     if ($this->isNegated()) {
115       return $this->t('The current theme is not @theme', ['@theme' => $this->configuration['theme']]);
116     }
117
118     return $this->t('The current theme is @theme', ['@theme' => $this->configuration['theme']]);
119   }
120
121   /**
122    * {@inheritdoc}
123    */
124   public function getCacheContexts() {
125     $contexts = parent::getCacheContexts();
126     $contexts[] = 'theme';
127     return $contexts;
128   }
129
130 }