Steps to replicate the issue (include links if applicable):
- Create a translatable page
- Mark the page for translation
- Make modifications to a translation unit in the translatable page
- Try to mark the page for translation again
What happens?:
The following error is encountered:
[2024-12-11T13:34:30.710156+00:00] exception.ERROR: [9f11d9df2a955b242e9dbe9f] /w/i.php?title=Special:PageTranslation&target=Group+descriptions&do=mark Wikimedia\Assert\PreconditionException: Precondition failed: This Title instance does not represent a proper page, but merely a link target. {"exception":"[object] (Wikimedia\\Assert\\PreconditionException(code: 0): Precondition failed: This Title instance does not represent a proper page, but merely a link target. at /srv/mediawiki/tags/2024-12-11_13:29:32/vendor/wikimedia/assert/src/Assert.php:49)
[stacktrace]
#0 /srv/mediawiki/tags/2024-12-11_13:29:32/includes/title/Title.php(3816): Wikimedia\\Assert\\Assert::precondition()
#1 /srv/mediawiki/tags/2024-12-11_13:29:32/includes/title/Title.php(3837): MediaWiki\\Title\\Title->assertProperPage()
#2 /srv/mediawiki/tags/2024-12-11_13:29:32/includes/Revision/RevisionRecord.php(112): MediaWiki\\Title\\Title->toPageIdentity()
#3 /srv/mediawiki/tags/2024-12-11_13:29:32/includes/Revision/MutableRevisionRecord.php(113): MediaWiki\\Revision\\RevisionRecord->__construct()
#4 /srv/mediawiki/tags/2024-12-11_13:29:32/extensions/Translate/src/PageTranslation/PageTranslationSpecialPage.php(894): MediaWiki\\Revision\\MutableRevisionRecord->__construct()
#5 /srv/mediawiki/tags/2024-12-11_13:29:32/extensions/Translate/src/PageTranslation/PageTranslationSpecialPage.php(355): MediaWiki\\Extension\\Translate\\PageTranslation\\PageTranslationSpecialPage->showPage()
#6 /srv/mediawiki/tags/2024-12-11_13:29:32/extensions/Translate/src/PageTranslation/PageTranslationSpecialPage.php(190): MediaWiki\\Extension\\Translate\\PageTranslation\\PageTranslationSpecialPage->onActionMark()
....What should have happened instead?:
The diff for the page / translation unit should be displayed so that the user can mark the page for translation.
Software version (on Special:Version page; skip for WMF-hosted wikis like Wikipedia):
MediaWiki: d1d978056e6846610623fc3a36bf2b21f1f3adea
Translate: master
Other information (browser name/version, screenshots, etc.):
Appears to be caused due to changes made in 1094003: Revision: make RevisionRecord::getPage() return a value object | https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1094003
For generating a diff, we are using the following:
$oldContent = ContentHandler::makeContent( $oldTextForDiff, $diff->getTitle() ); $oldRevision = new MutableRevisionRecord( $diff->getTitle() ); $oldRevision->setContent( SlotRecord::MAIN, $oldContent ); $newContent = ContentHandler::makeContent( $value, $diff->getTitle() ); $newRevision = new MutableRevisionRecord( $diff->getTitle() ); $newRevision->setContent( SlotRecord::MAIN, $newContent ); $diff->setRevisions( $oldRevision, $newRevision ); $text = $diff->getDiff( '', '' );
This fails because:
- $diff->getTitle() returns Special:PageTranslation
- The code $page = $page->toPageIdentity(); added in RevisionRecord::__construct(See: 1e7a520f1f42770f7eaeb4369805b427efa32634) calls Title::assertProperPage
- Title::assertProperPage then calls Title::canExist which returns false for a SpecialPage.