View source
<?php
namespace Drupal\domain\Plugin\Condition;
use Drupal\Core\Condition\ConditionPluginBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\domain\DomainNegotiator;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Domain extends ConditionPluginBase implements ContainerFactoryPluginInterface {
protected $domainNegotiator;
public function __construct(DomainNegotiator $domain_negotiator, array $configuration, $plugin_id, $plugin_definition) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->domainNegotiator = $domain_negotiator;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($container
->get('domain.negotiator'), $configuration, $plugin_id, $plugin_definition);
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['domains'] = [
'#type' => 'checkboxes',
'#title' => $this
->t('When the following domains are active'),
'#default_value' => $this->configuration['domains'],
'#options' => array_map('\\Drupal\\Component\\Utility\\Html::escape', \Drupal::entityTypeManager()
->getStorage('domain')
->loadOptionsList()),
'#description' => $this
->t('If you select no domains, the condition will evaluate to TRUE for all requests.'),
'#attached' => [
'library' => [
'domain/drupal.domain',
],
],
];
return parent::buildConfigurationForm($form, $form_state);
}
public function defaultConfiguration() {
return [
'domains' => [],
] + parent::defaultConfiguration();
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['domains'] = array_filter($form_state
->getValue('domains'));
parent::submitConfigurationForm($form, $form_state);
}
public function summary() {
$domains = array_intersect_key(\Drupal::entityTypeManager()
->getStorage('domain')
->loadOptionsList(), $this->configuration['domains']);
if (count($domains) > 1) {
$domains = implode(', ', $domains);
}
else {
$domains = reset($domains);
}
if ($this
->isNegated()) {
return $this
->t('Active domain is not @domains', [
'@domains' => $domains,
]);
}
else {
return $this
->t('Active domain is @domains', [
'@domains' => $domains,
]);
}
}
public function evaluate() {
$domains = $this->configuration['domains'];
if (empty($domains) && !$this
->isNegated()) {
return TRUE;
}
if (!($domain = $this
->getContextValue('domain'))) {
$domain = $this->domainNegotiator
->getActiveDomain();
}
if (empty($domain)) {
return FALSE;
}
return (bool) in_array($domain
->id(), $domains);
}
public function getCacheContexts() {
$contexts = parent::getCacheContexts();
$contexts[] = 'url.site';
return $contexts;
}
}