Merge "SpecialMyLanguage: Preserve the fragment from the redirect target"

This commit is contained in:
jenkins-bot 2022-10-05 14:09:11 +00:00 committed by Gerrit Code Review
commit d5cc228fbd
2 changed files with 22 additions and 5 deletions

View file

@ -138,8 +138,11 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
return null;
}
$fragment = '';
if ( $base->isRedirect() ) {
$base = $this->redirectLookup->getRedirectTarget( $base );
// Preserve the fragment from the redirect target
$fragment = $base->getFragment();
}
$uiLang = $this->getLanguage();
@ -154,11 +157,15 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
// Check for a subpage in current UI language
$proposed = $base->getSubpage( $uiLang->getCode() );
if ( $proposed && $proposed->exists() ) {
if ( $fragment !== '' ) {
$proposed->setFragment( $fragment );
}
return $proposed;
}
// Explicit language code given and the page exists
if ( $provided !== $base && $provided->exists() ) {
// Explicit language code given and the page exists
// Not based on the redirect target, don't need the fragment
return $provided;
}
@ -168,6 +175,9 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
if ( $forTransclusion || $lang !== $baseLang->getCode() ) {
$proposed = $base->getSubpage( $lang );
if ( $proposed && $proposed->exists() ) {
if ( $fragment !== '' ) {
$proposed->setFragment( $fragment );
}
return $proposed;
}
}

View file

@ -14,17 +14,21 @@ class SpecialMyLanguageTest extends MediaWikiIntegrationTestCase {
'Page/Another/zh',
'Page/Foreign',
'Page/Foreign/en',
'Page/Redirect',
];
// In the real-world, they are in respective languages,
// but we don't need to set all of them for tests.
$pageLang = [
'Page/Foreign' => 'sq',
];
$pageContent = [
'Page/Redirect' => '#REDIRECT [[Page/Another#Section]]',
];
$user = $this->getTestSysop()->getAuthority();
foreach ( $titles as $title ) {
$this->editPage(
$title,
new WikitextContent( 'UTContent' ),
new WikitextContent( $pageContent[$title] ?? 'UTContent' ),
'UTPageSummary',
NS_MAIN,
$user
@ -65,10 +69,12 @@ class SpecialMyLanguageTest extends MediaWikiIntegrationTestCase {
* @param Title|null $title
*/
private function assertTitle( $expected, $title ) {
if ( $title ) {
$title = $title->getPrefixedText();
if ( $expected === null ) {
$this->assertNull( $title );
} else {
$expected = Title::newFromText( $expected );
$this->assertTrue( $expected->isSameLinkAs( $title ) );
}
$this->assertEquals( $expected, $title );
}
public static function provideFindTitle() {
@ -94,6 +100,7 @@ class SpecialMyLanguageTest extends MediaWikiIntegrationTestCase {
[ null, 'Special:Blankpage', 'en', 'ar' ],
[ null, 'Media:Fail', 'en', 'ar' ],
[ 'Page/Foreign/en', 'Page/Foreign', 'en', 'en' ],
[ 'Page/Another/ar#Section', 'Page/Redirect', 'en', 'ar' ],
];
}