Problem/Motivation
When using content moderation and translations, EntityRepository::getActive does not return the most recent translated revision.
To set this up, create a node with 2 pending draft translation revisions. I've been using lightning with paragraphs_demo to quickly set this up.
$nid = 1;
$latest_revisions = [];
$storage = \Drupal::service('entity_type.manager')->getStorage('node');
$entity = $storage->load($nid);
$language_manager = \Drupal::service('language_manager');
$context_definition= new ContextDefinition('language');
/* @var \Drupal\Core\Entity\EntityRepository $entity_repository */
$entity_repository = \Drupal::service('entity.repository');
if ($entity instanceof TranslatableInterface) {
foreach ($entity->getTranslationLanguages() as $language) {
$new_context = new Context($context_definition, $language_manager->getLanguage($language->getId()));
$contexts = [
'@language.current_language_context:' . LanguageInterface::TYPE_CONTENT => $new_context,
'@language.current_language_context:' . LanguageInterface::TYPE_INTERFACE => $new_context
];
$latest_revisions[$language->getId()] = $entity_repository->getActive($entity->getEntityTypeId(), $entity->id(), $contexts);
}
}
With the above,$latest_revisions['en']->label();
returns the expected title of the pending English translation revision.$latest_revisions['de']->label();
returns the unexpected title of the current English translation revision.
Proposed resolution
TBD
Remaining tasks
TBD
User interface changes
TBD
API changes
TBD
Data model changes
TBD
Release notes snippet
TBD