View source
<?php
namespace Drupal\language\Plugin\Condition;
use Drupal\Core\Condition\ConditionPluginBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Language extends ConditionPluginBase implements ContainerFactoryPluginInterface {
protected $languageManager;
public function __construct(LanguageManagerInterface $language_manager, array $configuration, $plugin_id, $plugin_definition) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->languageManager = $language_manager;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($container
->get('language_manager'), $configuration, $plugin_id, $plugin_definition);
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
if ($this->languageManager
->isMultilingual()) {
$languages = $this->languageManager
->getLanguages();
$langcodes_options = array();
foreach ($languages as $language) {
$langcodes_options[$language
->getId()] = $language
->getName();
}
$form['langcodes'] = array(
'#type' => 'checkboxes',
'#title' => $this
->t('Language selection'),
'#default_value' => $this->configuration['langcodes'],
'#options' => $langcodes_options,
'#description' => $this
->t('Select languages to enforce. If none are selected, all languages will be allowed.'),
);
}
else {
$form['langcodes'] = array(
'#type' => 'value',
'#default_value' => $this->configuration['langcodes'],
);
}
return parent::buildConfigurationForm($form, $form_state);
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['langcodes'] = array_filter($form_state
->getValue('langcodes'));
parent::submitConfigurationForm($form, $form_state);
}
public function summary() {
$language_list = $this->languageManager
->getLanguages(LanguageInterface::STATE_ALL);
$selected = $this->configuration['langcodes'];
$language_names = array_reduce($language_list, function (&$result, $item) use ($selected) {
if (!empty($selected[$item
->getId()])) {
$result[$item
->getId()] = $item
->getName();
}
return $result;
}, array());
if (count($this->configuration['langcodes']) > 1) {
$languages = implode(', ', $language_names);
}
else {
$languages = array_pop($language_names);
}
if (!empty($this->configuration['negate'])) {
return t('The language is not @languages.', array(
'@languages' => $languages,
));
}
return t('The language is @languages.', array(
'@languages' => $languages,
));
}
public function evaluate() {
if (empty($this->configuration['langcodes']) && !$this
->isNegated()) {
return TRUE;
}
$language = $this
->getContextValue('language');
return !empty($this->configuration['langcodes'][$language
->getId()]);
}
public function defaultConfiguration() {
return array(
'langcodes' => array(),
) + parent::defaultConfiguration();
}
}