You are here

protected function TranslationLanguageRenderer::getLangcodeTable in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php \Drupal\views\Entity\Render\TranslationLanguageRenderer::getLangcodeTable()
  2. 9 core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php \Drupal\views\Entity\Render\TranslationLanguageRenderer::getLangcodeTable()

Returns the name of the table holding the "langcode" field.

Parameters

\Drupal\views\Plugin\views\query\QueryPluginBase $query: The query being executed.

string $relationship: The relationship used by the entity type.

Return value

string A table name.

File

core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php, line 51

Class

TranslationLanguageRenderer
Renders entity translations in their row language.

Namespace

Drupal\views\Entity\Render

Code

protected function getLangcodeTable(QueryPluginBase $query, $relationship) {

  /** @var \Drupal\Core\Entity\Sql\SqlContentEntityStorage $storage */
  $storage = \Drupal::entityTypeManager()
    ->getStorage($this->entityType
    ->id());
  $langcode_key = $this->entityType
    ->getKey('langcode');
  $langcode_table = $storage
    ->getTableMapping()
    ->getFieldTableName($langcode_key);

  // If the entity type is revisionable, we need to take into account views of
  // entity revisions. Usually the view will use the entity data table as the
  // query base table, however, in case of an entity revision view, we need to
  // use the revision table or the revision data table, depending on which one
  // is being used as query base table.
  if ($this->entityType
    ->isRevisionable()) {
    $query_base_table = $query->relationships[$relationship]['base'] ?? $this->view->storage
      ->get('base_table');
    $revision_table = $storage
      ->getRevisionTable();
    $revision_data_table = $storage
      ->getRevisionDataTable();
    if ($query_base_table === $revision_table) {
      $langcode_table = $revision_table;
    }
    elseif ($query_base_table === $revision_data_table) {
      $langcode_table = $revision_data_table;
    }
  }
  return $langcode_table;
}