Loading core/lib/Drupal/Core/Entity/Controller/VersionHistoryController.php +1 −1 Original line number Diff line number Diff line Loading @@ -225,7 +225,7 @@ protected function loadRevisions(RevisionableInterface $entity) { // Only show revisions that are affected by the language that is being // displayed. if (!$translatable || ($revision->hasTranslation($currentLangcode) && $revision->getTranslation($currentLangcode)->isRevisionTranslationAffected())) { yield $revision; yield ($translatable ? $revision->getTranslation($currentLangcode) : $revision); } } } Loading core/modules/system/tests/modules/entity_test_revlog/src/Entity/EntityTestMulWithRevisionLog.php +22 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,18 @@ * @ContentEntityType( * id = "entity_test_mul_revlog", * label = @Translation("Test entity - data table, revisions log"), * handlers = { * "access" = \Drupal\entity_test_revlog\EntityTestRevlogAccessControlHandler::class, * "form" = { * "default" = \Drupal\Core\Entity\ContentEntityForm::class, * "revision-delete" = \Drupal\Core\Entity\Form\RevisionDeleteForm::class, * "revision-revert" = \Drupal\Core\Entity\Form\RevisionRevertForm::class, * }, * "route_provider" = { * "html" = \Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider::class, * "revision" = \Drupal\Core\Entity\Routing\RevisionHtmlRouteProvider::class, * }, * }, * base_table = "entity_test_mul_revlog", * data_table = "entity_test_mul_revlog_field_data", * revision_table = "entity_test_mul_revlog_revision", Loading @@ -26,6 +38,16 @@ * "revision_created" = "revision_created", * "revision_log_message" = "revision_log_message" * }, * links = { * "add-form" = "/entity_test_mul_revlog/add", * "canonical" = "/entity_test_mul_revlog/manage/{entity_test_mul_revlog}", * "delete-form" = "/entity_test/delete/entity_test_mul_revlog/{entity_test_mul_revlog}", * "edit-form" = "/entity_test_mul_revlog/manage/{entity_test_mul_revlog}/edit", * "revision" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revision/{entity_test_mul_revlog_revision}/view", * "revision-delete-form" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revision/{entity_test_mul_revlog_revision}/delete", * "revision-revert-form" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revision/{entity_test_mul_revlog_revision}/revert", * "version-history" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revisions", * } * ) */ class EntityTestMulWithRevisionLog extends EntityTestWithRevisionLog { Loading core/tests/Drupal/FunctionalTests/Entity/RevisionVersionHistoryTranslatableTest.php 0 → 100644 +90 −0 Original line number Diff line number Diff line <?php declare(strict_types = 1); namespace Drupal\FunctionalTests\Entity; use Drupal\entity_test_revlog\Entity\EntityTestMulWithRevisionLog; use Drupal\language\Entity\ConfigurableLanguage; use Drupal\Tests\BrowserTestBase; /** * Tests version history page with translations. * * @group Entity * @coversDefaultClass \Drupal\Core\Entity\Controller\VersionHistoryController */ final class RevisionVersionHistoryTranslatableTest extends BrowserTestBase { /** * {@inheritdoc} */ protected static $modules = [ 'entity_test_revlog', 'content_translation', 'language', 'user', ]; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); ConfigurableLanguage::createFromLangcode('es')->save(); // Rebuild the container so that the new languages are picked up by services // that hold a list of languages. $this->rebuildContainer(); } /** * Tests the version history page for translations. */ public function testVersionHistoryTranslations(): void { $label = 'view all revisions,revert,delete revision'; $entity = EntityTestMulWithRevisionLog::create([ 'name' => $label, 'type' => 'entity_test_mul_revlog', ]); $entity->addTranslation('es', ['label' => 'version history test translations es']); $entity->save(); $firstRevisionId = $entity->getRevisionId(); $entity->setNewRevision(); $entity->setName($label . ',2') ->save(); $this->drupalGet($entity->toUrl('version-history')); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->elementsCount('css', 'table tbody tr', 2); /** @var \Drupal\Core\Entity\RevisionableStorageInterface $storage */ $storage = $this->container->get('entity_type.manager')->getStorage($entity->getEntityTypeId()); $firstRevision = $storage->loadRevision($firstRevisionId); $this->assertSession()->linkByHrefExists($firstRevision->toUrl('revision-revert-form')->toString()); $this->assertSession()->linkByHrefExists($firstRevision->toUrl('revision-delete-form')->toString()); $this->assertSession()->linkByHrefNotExists($firstRevision->getTranslation('es')->toUrl('revision-revert-form')->toString()); $this->assertSession()->linkByHrefNotExists($firstRevision->getTranslation('es')->toUrl('revision-delete-form')->toString()); $this->drupalGet($entity->getTranslation('es')->toUrl('version-history')); // We can't use linkByHrefNotExists here because it does a "contains" match // and the translated URLs contain the non translated ones. // i.e /es/entity_test_mul_revlog/1/revision/1/revert contains // /entity_test_mul_revlog/1/revision/1/revert. $xpath = $this->assertSession()->buildXPathQuery('//a[@href=:href]', [':href' => $firstRevision->toUrl('revision-revert-form')->toString()]); $this->assertEmpty($this->getSession()->getPage()->findAll('xpath', $xpath)); $xpath = $this->assertSession()->buildXPathQuery('//a[@href=:href]', [':href' => $firstRevision->toUrl('revision-delete-form')->toString()]); $this->assertEmpty($this->getSession()->getPage()->findAll('xpath', $xpath)); $this->assertSession()->linkByHrefExists($firstRevision->getTranslation('es')->toUrl('revision-revert-form')->toString()); $this->assertSession()->linkByHrefExists($firstRevision->getTranslation('es')->toUrl('revision-delete-form')->toString()); } } Loading
core/lib/Drupal/Core/Entity/Controller/VersionHistoryController.php +1 −1 Original line number Diff line number Diff line Loading @@ -225,7 +225,7 @@ protected function loadRevisions(RevisionableInterface $entity) { // Only show revisions that are affected by the language that is being // displayed. if (!$translatable || ($revision->hasTranslation($currentLangcode) && $revision->getTranslation($currentLangcode)->isRevisionTranslationAffected())) { yield $revision; yield ($translatable ? $revision->getTranslation($currentLangcode) : $revision); } } } Loading
core/modules/system/tests/modules/entity_test_revlog/src/Entity/EntityTestMulWithRevisionLog.php +22 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,18 @@ * @ContentEntityType( * id = "entity_test_mul_revlog", * label = @Translation("Test entity - data table, revisions log"), * handlers = { * "access" = \Drupal\entity_test_revlog\EntityTestRevlogAccessControlHandler::class, * "form" = { * "default" = \Drupal\Core\Entity\ContentEntityForm::class, * "revision-delete" = \Drupal\Core\Entity\Form\RevisionDeleteForm::class, * "revision-revert" = \Drupal\Core\Entity\Form\RevisionRevertForm::class, * }, * "route_provider" = { * "html" = \Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider::class, * "revision" = \Drupal\Core\Entity\Routing\RevisionHtmlRouteProvider::class, * }, * }, * base_table = "entity_test_mul_revlog", * data_table = "entity_test_mul_revlog_field_data", * revision_table = "entity_test_mul_revlog_revision", Loading @@ -26,6 +38,16 @@ * "revision_created" = "revision_created", * "revision_log_message" = "revision_log_message" * }, * links = { * "add-form" = "/entity_test_mul_revlog/add", * "canonical" = "/entity_test_mul_revlog/manage/{entity_test_mul_revlog}", * "delete-form" = "/entity_test/delete/entity_test_mul_revlog/{entity_test_mul_revlog}", * "edit-form" = "/entity_test_mul_revlog/manage/{entity_test_mul_revlog}/edit", * "revision" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revision/{entity_test_mul_revlog_revision}/view", * "revision-delete-form" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revision/{entity_test_mul_revlog_revision}/delete", * "revision-revert-form" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revision/{entity_test_mul_revlog_revision}/revert", * "version-history" = "/entity_test_mul_revlog/{entity_test_mul_revlog}/revisions", * } * ) */ class EntityTestMulWithRevisionLog extends EntityTestWithRevisionLog { Loading
core/tests/Drupal/FunctionalTests/Entity/RevisionVersionHistoryTranslatableTest.php 0 → 100644 +90 −0 Original line number Diff line number Diff line <?php declare(strict_types = 1); namespace Drupal\FunctionalTests\Entity; use Drupal\entity_test_revlog\Entity\EntityTestMulWithRevisionLog; use Drupal\language\Entity\ConfigurableLanguage; use Drupal\Tests\BrowserTestBase; /** * Tests version history page with translations. * * @group Entity * @coversDefaultClass \Drupal\Core\Entity\Controller\VersionHistoryController */ final class RevisionVersionHistoryTranslatableTest extends BrowserTestBase { /** * {@inheritdoc} */ protected static $modules = [ 'entity_test_revlog', 'content_translation', 'language', 'user', ]; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); ConfigurableLanguage::createFromLangcode('es')->save(); // Rebuild the container so that the new languages are picked up by services // that hold a list of languages. $this->rebuildContainer(); } /** * Tests the version history page for translations. */ public function testVersionHistoryTranslations(): void { $label = 'view all revisions,revert,delete revision'; $entity = EntityTestMulWithRevisionLog::create([ 'name' => $label, 'type' => 'entity_test_mul_revlog', ]); $entity->addTranslation('es', ['label' => 'version history test translations es']); $entity->save(); $firstRevisionId = $entity->getRevisionId(); $entity->setNewRevision(); $entity->setName($label . ',2') ->save(); $this->drupalGet($entity->toUrl('version-history')); $this->assertSession()->statusCodeEquals(200); $this->assertSession()->elementsCount('css', 'table tbody tr', 2); /** @var \Drupal\Core\Entity\RevisionableStorageInterface $storage */ $storage = $this->container->get('entity_type.manager')->getStorage($entity->getEntityTypeId()); $firstRevision = $storage->loadRevision($firstRevisionId); $this->assertSession()->linkByHrefExists($firstRevision->toUrl('revision-revert-form')->toString()); $this->assertSession()->linkByHrefExists($firstRevision->toUrl('revision-delete-form')->toString()); $this->assertSession()->linkByHrefNotExists($firstRevision->getTranslation('es')->toUrl('revision-revert-form')->toString()); $this->assertSession()->linkByHrefNotExists($firstRevision->getTranslation('es')->toUrl('revision-delete-form')->toString()); $this->drupalGet($entity->getTranslation('es')->toUrl('version-history')); // We can't use linkByHrefNotExists here because it does a "contains" match // and the translated URLs contain the non translated ones. // i.e /es/entity_test_mul_revlog/1/revision/1/revert contains // /entity_test_mul_revlog/1/revision/1/revert. $xpath = $this->assertSession()->buildXPathQuery('//a[@href=:href]', [':href' => $firstRevision->toUrl('revision-revert-form')->toString()]); $this->assertEmpty($this->getSession()->getPage()->findAll('xpath', $xpath)); $xpath = $this->assertSession()->buildXPathQuery('//a[@href=:href]', [':href' => $firstRevision->toUrl('revision-delete-form')->toString()]); $this->assertEmpty($this->getSession()->getPage()->findAll('xpath', $xpath)); $this->assertSession()->linkByHrefExists($firstRevision->getTranslation('es')->toUrl('revision-revert-form')->toString()); $this->assertSession()->linkByHrefExists($firstRevision->getTranslation('es')->toUrl('revision-delete-form')->toString()); } }