local_translation-8.x-1.x-dev/modules/local_translation_content/src/Plugin/views/filter/TranslationLanguageLimitedToTranslationSkills.php

modules/local_translation_content/src/Plugin/views/filter/TranslationLanguageLimitedToTranslationSkills.php
<?php

namespace Drupal\local_translation_content\Plugin\views\filter;

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\views\Plugin\views\PluginBase;

/**
 * Class TranslationLanguageLimitedToTranslationSkills.
 *
 * @package Drupal\local_translation_content\Plugin\views\filter
 */
class TranslationLanguageLimitedToTranslationSkills extends LocalTranslationViewsFiltersBase {

  /**
   * {@inheritdoc}
   */
  public function defineOptions() {
    $options = parent::defineOptions();
    $options['expose']['identifier'] = $this->getPluginId();
    $options['limit'] = ['default' => FALSE];
    $options['column'] = ['default' => ['from' => 'from', 'to' => '']];
    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);
    // Remove the values list - we will handle them on a background basis.
    // Only if limited option is checked.
    $form['value']['#states'] = [
      'visible' => [
        'input[name="options[limit]"]' => ['checked' => FALSE],
      ],
    ];
    // Build values list independently in order to see all the options,
    // while switching "limit" option without necessity to reload the form.
    $form['value']['#options'] = $this->listLanguages(
      LanguageInterface::STATE_ALL | LanguageInterface::STATE_SITE_DEFAULT | PluginBase::INCLUDE_NEGOTIATED,
      array_keys($this->value)
    );

    $end = $form['clear_markup_end'];
    unset($form['clear_markup_end']);
    $form['limit'] = [
      '#type'          => 'checkbox',
      '#title'         => $this->t('Limit languages by translation skills'),
      '#required'      => FALSE,
      '#default_value' => $this->options['limit'],
    ];
    $form['column'] = [
      '#type'          => 'checkboxes',
      '#options'       => $this->getFilterColumnsOptions(),
      '#title'         => $this->t('Languages by translation skills'),
      '#required'      => FALSE,
      '#default_value' => $this->options['column'],
      '#states' => [
        'visible' => [
          'input[name="options[limit]"]' => ['checked' => TRUE],
        ],
      ],
    ];
    $form['clear_markup_end'] = $end;
  }

  /**
   * {@inheritdoc}
   */
  public function buildExposeForm(&$form, FormStateInterface $form_state) {
    parent::buildExposeForm($form, $form_state);
    if ($this->options['limit']) {
      // We need to force this option to allow users to use only the languages,
      // specified as the user's translation skills.
      $form['expose']['reduce']['#default_value'] = TRUE;
      $form['expose']['reduce']['#disabled'] = TRUE;
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getValueOptions() {
    if (!$this->options['limit']) {
      $this->valueTitle = $this->t('Language');
      // Pass the current values so options that are already selected do not get
      // lost when there are changes in the language configuration.
      $this->valueOptions = $this->listLanguages(LanguageInterface::STATE_ALL | LanguageInterface::STATE_SITE_DEFAULT | PluginBase::INCLUDE_NEGOTIATED, array_keys($this->value));
    }
    else {
      $this->valueTitle = $this->t('Local Translation: User skills');
      $this->valueOptions = parent::getValueOptions();
    }
    return array_merge(['All' => $this->t('- Any -')], $this->valueOptions);
  }

  /**
   * {@inheritdoc}
   */
  protected function resetOptionsForEmptySkills(array &$field) {
    // Leave only "- Any -" option if there are no registered skills.
    $field['#options'] = ['All' => $this->t('- Any -')];
    $field['#value'] = $field['#default_value'] = 'All';
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc