translation_views-8.x-1.x-dev/src/Plugin/views/filter/TranslationStatusFilter.php

src/Plugin/views/filter/TranslationStatusFilter.php
<?php

namespace Drupal\translation_views\Plugin\views\filter;

use Drupal\views\Plugin\views\filter\BooleanOperator;

/**
 * Provides filtering by translation status.
 *
 * @ingroup views_filter_handlers
 *
 * @ViewsFilter("translation_views_status")
 */
class TranslationStatusFilter extends BooleanOperator {

  /**
   * {@inheritdoc}
   */
  public function getValueOptions() {
    $this->valueOptions = [1 => $this->t('Translated'), 0 => $this->t('Not translated')];
  }

  /**
   * {@inheritdoc}
   */
  public function query() {
    $table_alias = $this->ensureMyTable();
    $status = $this->value;

    if ($status == 0) {
      $operation = '=';
    }
    // Then status translated is the case.
    else {
      // Mysql FIND_IN_SET func will return position of element,
      // when no element was found then it returns 0,
      // so we use "> 0" as condition to filter out untranslated rows.
      $operation = '>';
      $status = 0;
    }

    /* @var \Drupal\views\Plugin\views\query\Sql */
    $this->query->addWhereExpression(
      $this->options['group'],
      "FIND_IN_SET(:langcode, $table_alias.langs) $operation :status", [
        ':langcode' => '***TRANSLATION_VIEWS_TARGET_LANG***',
        ':status' => $status,
      ]
    );
  }

}

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

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