public function ContentEntitySourcePluginUi::overviewRow in Translation Management Tool 8
Builds a table row for overview form.
Parameters
array ContentEntityInterface $entity: Data needed to build the list row.
array $bundles: The array of bundles.
Return value
array
1 call to ContentEntitySourcePluginUi::overviewRow()
- ContentEntitySourcePluginUi::overviewForm in sources/
content/ src/ ContentEntitySourcePluginUi.php - Builds the overview form for the source entities.
File
- sources/
content/ src/ ContentEntitySourcePluginUi.php, line 138
Class
- ContentEntitySourcePluginUi
- Content entity source plugin UI.
Namespace
Drupal\tmgmt_contentCode
public function overviewRow(ContentEntityInterface $entity, array $bundles) {
$entity_label = $entity
->label();
$storage = \Drupal::entityTypeManager()
->getStorage($entity
->getEntityTypeId());
$use_latest_revisions = $entity
->getEntityType()
->isRevisionable() && ContentTranslationManager::isPendingRevisionSupportEnabled($entity
->getEntityTypeId(), $entity
->bundle());
// Get the default revision.
$default_revision = $use_latest_revisions ? $storage
->load($entity
->id()) : $entity;
// Get existing translations and current job items for the entity
// to determine translation statuses
$translations = $entity
->getTranslationLanguages();
$source_lang = $entity
->language()
->getId();
$current_job_items = tmgmt_job_item_load_latest('content', $entity
->getEntityTypeId(), $entity
->id(), $source_lang);
$row = array(
'id' => $entity
->id(),
);
if (count($bundles) > 1) {
$row['bundle'] = isset($bundles[$entity
->bundle()]) ? $bundles[$entity
->bundle()] : t('Unknown');
}
// Load entity translation specific data.
$manager = \Drupal::service('content_translation.manager');
foreach (\Drupal::languageManager()
->getLanguages() as $langcode => $language) {
// @see Drupal\content_translation\Controller\ContentTranslationController::overview()
// If the entity type is revisionable, we may have pending revisions
// with translations not available yet in the default revision. Thus we
// need to load the latest translation-affecting revision for each
// language to be sure we are listing all available translations.
if ($use_latest_revisions) {
$entity = $default_revision;
$latest_revision_id = $storage
->getLatestTranslationAffectedRevisionId($entity
->id(), $langcode);
if ($latest_revision_id) {
/** @var \Drupal\Core\Entity\ContentEntityInterface $latest_revision */
$latest_revision = $storage
->loadRevision($latest_revision_id);
// Make sure we do not list removed translations, i.e. translations
// that have been part of a default revision but no longer are.
if (!$latest_revision
->wasDefaultRevision() || $default_revision
->hasTranslation($langcode)) {
$entity = $latest_revision;
// Update the label if we are dealing with the source language.
if ($langcode === $source_lang) {
$entity_label = $entity
->label();
}
}
}
$translations = $entity
->getTranslationLanguages();
}
$translation_status = 'current';
if ($langcode == $source_lang) {
$translation_status = 'original';
}
elseif (!isset($translations[$langcode])) {
$translation_status = 'missing';
}
elseif ($translation = $entity
->getTranslation($langcode)) {
$metadata = $manager
->getTranslationMetadata($translation);
if ($metadata
->isOutdated()) {
$translation_status = 'outofdate';
}
}
$build = $this
->buildTranslationStatus($translation_status, isset($current_job_items[$langcode]) ? $current_job_items[$langcode] : NULL);
if ($translation_status != 'missing' && $entity
->hasLinkTemplate('canonical')) {
$build['source'] = [
'#type' => 'link',
'#url' => $entity
->toUrl('canonical', [
'language' => $language,
]),
'#title' => $build['source'],
];
}
$row['langcode-' . $langcode] = [
'data' => \Drupal::service('renderer')
->render($build),
'class' => array(
'langstatus-' . $langcode,
),
];
}
$label = $entity_label ?: $this
->t('@type: @id', [
'@type' => $entity
->getEntityTypeId(),
'@id' => $entity
->id(),
]);
$row['title'] = $entity
->hasLinkTemplate('canonical') ? $entity
->toLink($label, 'canonical')
->toString() : ($entity_label ?: $entity
->id());
return $row;
}