diff --git a/extension.json b/extension.json index 0a92021..c6e2ae0 100644 --- a/extension.json +++ b/extension.json @@ -34,7 +34,8 @@ "InfoAction": "ProfessionalWiki\\PersistentPageIdentifiers\\EntryPoints\\PersistentPageIdentifiersHooks::onInfoAction", "LoadExtensionSchemaUpdates": "ProfessionalWiki\\PersistentPageIdentifiers\\EntryPoints\\PersistentPageIdentifiersHooks::onLoadExtensionSchemaUpdates", "ParserFirstCallInit": "ProfessionalWiki\\PersistentPageIdentifiers\\EntryPoints\\PersistentPageIdentifiersHooks::onParserFirstCallInit", - "PageSaveComplete": "ProfessionalWiki\\PersistentPageIdentifiers\\EntryPoints\\PersistentPageIdentifiersHooks::onPageSaveComplete" + "PageSaveComplete": "ProfessionalWiki\\PersistentPageIdentifiers\\EntryPoints\\PersistentPageIdentifiersHooks::onPageSaveComplete", + "RevisionUndeleted": "ProfessionalWiki\\PersistentPageIdentifiers\\EntryPoints\\PersistentPageIdentifiersHooks::onRevisionUndeleted" }, "config": { diff --git a/src/EntryPoints/PersistentPageIdentifiersHooks.php b/src/EntryPoints/PersistentPageIdentifiersHooks.php index 4015e47..ad9d807 100644 --- a/src/EntryPoints/PersistentPageIdentifiersHooks.php +++ b/src/EntryPoints/PersistentPageIdentifiersHooks.php @@ -53,4 +53,20 @@ public static function onPageSaveComplete( PersistentPageIdentifiersExtension::getInstance()->newCreatePersistentPageIdentifier()->createId( $wikiPage->getId() ); } + public static function onRevisionUndeleted( RevisionRecord $restoredRevision, ?int $oldPageId ): void { + if ( $oldPageId !== null ) { + return; + } + + // TODO: untested + $repo = PersistentPageIdentifiersExtension::getInstance()->getPersistentPageIdentifiersRepo(); + $oldPersistentId = $repo->getPersistentId( $restoredRevision->getPageId() ); + + if ( $oldPersistentId === null ) { + return; + } + + $repo->savePersistentId( $restoredRevision->getPageId(), $oldPersistentId ); + } + } diff --git a/tests/Integration/PageUndeleteIntegrationTest.php b/tests/Integration/PageUndeleteIntegrationTest.php new file mode 100644 index 0000000..6811753 --- /dev/null +++ b/tests/Integration/PageUndeleteIntegrationTest.php @@ -0,0 +1,44 @@ +tablesUsed[] = 'persistent_page_ids'; + $this->repo = new DatabasePersistentPageIdentifiersRepo( $this->db ); + } + + public function testUndeletedPageWithOldPageIdHasSamePersistentId(): void { + $page = $this->createPageWithText(); + $pageId = $page->getId(); + $persistentId = $this->repo->getPersistentId( $pageId ); + + $this->deletePage( $page ); + $this->undeletePage( $page ); + + $this->assertSame( $pageId, $page->getId() ); + $this->assertSame( $persistentId, $this->repo->getPersistentId( $pageId ) ); + } + + private function undeletePage( WikiPage $page ): void { + $this->getServiceContainer()->getUndeletePageFactory() + ->newUndeletePage( $page, $this->getTestUser()->getAuthority() ) + ->undeleteUnsafe( 'test undelete' ); + } + +}