Chris@0: languageManager = $language_manager; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { Chris@0: return new static( Chris@0: $container->get('language_manager'), Chris@0: $configuration, Chris@0: $plugin_id, Chris@0: $plugin_definition Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function buildConfigurationForm(array $form, FormStateInterface $form_state) { Chris@0: if ($this->languageManager->isMultilingual()) { Chris@0: // Fetch languages. Chris@0: $languages = $this->languageManager->getLanguages(); Chris@0: $langcodes_options = []; Chris@0: foreach ($languages as $language) { Chris@0: $langcodes_options[$language->getId()] = $language->getName(); Chris@0: } Chris@0: $form['langcodes'] = [ Chris@0: '#type' => 'checkboxes', Chris@0: '#title' => $this->t('Language selection'), Chris@0: '#default_value' => $this->configuration['langcodes'], Chris@0: '#options' => $langcodes_options, Chris@0: '#description' => $this->t('Select languages to enforce. If none are selected, all languages will be allowed.'), Chris@0: ]; Chris@0: } Chris@0: else { Chris@0: $form['langcodes'] = [ Chris@0: '#type' => 'value', Chris@0: '#default_value' => $this->configuration['langcodes'], Chris@0: ]; Chris@0: } Chris@0: return parent::buildConfigurationForm($form, $form_state); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { Chris@0: $this->configuration['langcodes'] = array_filter($form_state->getValue('langcodes')); Chris@0: parent::submitConfigurationForm($form, $form_state); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function summary() { Chris@0: $language_list = $this->languageManager->getLanguages(LanguageInterface::STATE_ALL); Chris@0: $selected = $this->configuration['langcodes']; Chris@0: // Reduce the language list to an array of language names. Chris@0: $language_names = array_reduce($language_list, function (&$result, $item) use ($selected) { Chris@0: // If the current item of the $language_list array is one of the selected Chris@0: // languages, add it to the $results array. Chris@0: if (!empty($selected[$item->getId()])) { Chris@0: $result[$item->getId()] = $item->getName(); Chris@0: } Chris@0: return $result; Chris@0: }, []); Chris@0: Chris@0: // If we have more than one language selected, separate them by commas. Chris@0: if (count($this->configuration['langcodes']) > 1) { Chris@0: $languages = implode(', ', $language_names); Chris@0: } Chris@0: else { Chris@0: // If we have just one language just grab the only present value. Chris@0: $languages = array_pop($language_names); Chris@0: } Chris@0: if (!empty($this->configuration['negate'])) { Chris@0: return t('The language is not @languages.', ['@languages' => $languages]); Chris@0: } Chris@0: return t('The language is @languages.', ['@languages' => $languages]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function evaluate() { Chris@0: if (empty($this->configuration['langcodes']) && !$this->isNegated()) { Chris@0: return TRUE; Chris@0: } Chris@0: Chris@0: $language = $this->getContextValue('language'); Chris@0: // Language visibility settings. Chris@0: return !empty($this->configuration['langcodes'][$language->getId()]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function defaultConfiguration() { Chris@0: return ['langcodes' => []] + parent::defaultConfiguration(); Chris@0: } Chris@0: Chris@0: }