translation_views-8.x-1.x-dev/translation_views.views.inc

translation_views.views.inc
<?php

/**
 * @file
 * Provide views fields/filters for content translations.
 *
 * @ingroup views_module_handlers
 */

use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\translation_views\TranslationViewsFieldDefinitions;

/**
 * Implements hook_views_data_alter().
 *
 * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
 */
function translation_views_views_data_alter(array &$data) {
  $content_translation_manager = \Drupal::service('content_translation.manager');

  foreach (\Drupal::entityTypeManager()->getDefinitions() as $entity_type_id => $entity_type) {
    if ($entity_type->hasHandlerClass('views_data')
      && $entity_type->isTranslatable()
      && $content_translation_manager->isEnabled($entity_type_id)
    ) {

      try {
        /** @var \Drupal\views\EntityViewsDataInterface $views_data */
        $views_data = \Drupal::entityTypeManager()->getHandler(
          $entity_type_id,
          'views_data'
        );
      }
      catch (InvalidPluginDefinitionException $e) {
        throw new InvalidPluginDefinitionException($entity_type_id, sprintf(
          'The "%s" entity type did not specify views_data handler class.',
          $entity_type->getLabel()
        ));
      }

      $field_data_table = $views_data->getViewsTableForEntityType($entity_type);

      if (!empty($field_data_table)) {
        $key = $entity_type_id . '_translation';
        $target_key = $key . '_target';
        $group = t('@entity_label translation', [
          '@entity_label' => $entity_type->getLabel(),
        ]);

        $translations_table =& $data[$key];
        $translations_table_target =& $data[$target_key];

        $entity_id = $entity_type->getKey('id');

        $translations_table['table'] = [
          'group'       => $group,
          'entity type' => $entity_type_id,
          'join'        => [
            $field_data_table => [
              'join_id'    => 'translation_views_language_join',
              'entity_id'  => $entity_id,
              'type'       => 'LEFT',
              'left_field' => $entity_id,
              'field'      => $entity_id,
              'table'      => $field_data_table,
            ],
          ],
        ];

        $translations_table += TranslationViewsFieldDefinitions::buildStatusField();
        $translations_table += TranslationViewsFieldDefinitions::buildTargetLanguageField();
        $translations_table += TranslationViewsFieldDefinitions::buildOpLinksField();
        $translations_table += TranslationViewsFieldDefinitions::buildCountField();

        $module_handler = \Drupal::service('module_handler');
        if ($module_handler->moduleExists('content_moderation')) {
          $translations_table += TranslationViewsFieldDefinitions::buildModerationStateField();
        }
        $translations_table_target['table'] = [
          'group' => $group,
          'join'  => [
            $field_data_table => [
              'type'       => 'LEFT',
              'left_field' => $entity_id,
              'field'      => $entity_id,
              'table'      => $field_data_table,
              'extra'      => [
                [
                  'field' => 'langcode',
                  'value' => '***TRANSLATION_VIEWS_TARGET_LANG***',
                ],
              ],
            ],
          ],
        ];

        $translations_table_target += TranslationViewsFieldDefinitions::buildOutdatedField(
          $data[$field_data_table]['content_translation_outdated']
        );
        $translations_table_target += TranslationViewsFieldDefinitions::buildSourceField(
          $data[$field_data_table]['content_translation_source']
        );
        $translations_table_target += TranslationViewsFieldDefinitions::buildDefaultLangcodeField(
          $data[$field_data_table]['default_langcode']
        );
        if (isset($data[$field_data_table]['changed'])) {
          $translations_table_target += TranslationViewsFieldDefinitions::buildChangedField(
            $data[$field_data_table]['changed']
          );
        }
      }
    }
  }

}

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

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