View source
<?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;
class CurrentThemeCondition extends ConditionPluginBase implements ContainerFactoryPluginInterface {
protected $themeManager;
protected $themeHandler;
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;
}
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'));
}
public function defaultConfiguration() {
return [
'theme' => '',
] + parent::defaultConfiguration();
}
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);
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['theme'] = $form_state
->getValue('theme');
parent::submitConfigurationForm($form, $form_state);
}
public function evaluate() {
if (!$this->configuration['theme']) {
return TRUE;
}
return $this->themeManager
->getActiveTheme()
->getName() == $this->configuration['theme'];
}
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'],
]);
}
public function getCacheContexts() {
$contexts = parent::getCacheContexts();
$contexts[] = 'theme';
return $contexts;
}
}