Merge "linker: Move Linker::normaliseSpecialPage to LinkRenderer class"
This commit is contained in:
commit
78b1ff0ec9
8 changed files with 76 additions and 27 deletions
|
|
@ -1051,6 +1051,8 @@ because of Phabricator reports.
|
|||
GuzzleHttpRequest now require the timeout and connectTimeout options to
|
||||
always be specified, otherwise a deprecation warning will be raised. Most
|
||||
callers should use HttpRequestFactory which always sets these options.
|
||||
* Linker::normaliseSpecialPage() has been deprecated, instead make use of
|
||||
LinkRenderer::normalizeTarget().
|
||||
* …
|
||||
|
||||
=== Other changes in 1.35 ===
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
|
||||
use MediaWiki\MediaWikiServices;
|
||||
|
||||
/**
|
||||
* @since 1.18
|
||||
*/
|
||||
|
|
@ -66,7 +68,8 @@ class DummyLinker {
|
|||
}
|
||||
|
||||
public function normaliseSpecialPage( Title $title ) {
|
||||
return Linker::normaliseSpecialPage( $title );
|
||||
$linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
|
||||
return $linkRenderer->normalizeTarget( $title );
|
||||
}
|
||||
|
||||
public function makeExternalImage( $url, $alt = '' ) {
|
||||
|
|
|
|||
|
|
@ -202,19 +202,14 @@ class Linker {
|
|||
|
||||
/**
|
||||
* @since 1.16.3
|
||||
* @deprecated since 1.35, use LinkRenderer::normalizeTarget()
|
||||
* @param LinkTarget $target
|
||||
* @return LinkTarget
|
||||
*/
|
||||
public static function normaliseSpecialPage( LinkTarget $target ) {
|
||||
if ( $target->getNamespace() == NS_SPECIAL && !$target->isExternal() ) {
|
||||
list( $name, $subpage ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
|
||||
resolveAlias( $target->getDBkey() );
|
||||
if ( $name ) {
|
||||
return SpecialPage::getTitleValueFor( $name, $subpage, $target->getFragment() );
|
||||
}
|
||||
}
|
||||
|
||||
return $target;
|
||||
wfDeprecated( __METHOD__, '1.35' );
|
||||
$linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
|
||||
return $linkRenderer->normalizeTarget( $target );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -467,8 +462,9 @@ class Linker {
|
|||
}
|
||||
}
|
||||
} elseif ( isset( $frameParams['link-title'] ) && $frameParams['link-title'] !== '' ) {
|
||||
$linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
|
||||
$mtoParams['custom-title-link'] = Title::newFromLinkTarget(
|
||||
self::normaliseSpecialPage( $frameParams['link-title'] )
|
||||
$linkRenderer->normalizeTarget( $frameParams['link-title'] )
|
||||
);
|
||||
} elseif ( !empty( $frameParams['no-link'] ) ) {
|
||||
// No link
|
||||
|
|
|
|||
|
|
@ -489,7 +489,8 @@ return [
|
|||
return new LinkRendererFactory(
|
||||
$services->getTitleFormatter(),
|
||||
$services->getLinkCache(),
|
||||
$services->getNamespaceInfo()
|
||||
$services->getNamespaceInfo(),
|
||||
$services->getSpecialPageFactory()
|
||||
);
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -25,10 +25,11 @@ use Hooks;
|
|||
use Html;
|
||||
use HtmlArmor;
|
||||
use LinkCache;
|
||||
use Linker;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\SpecialPage\SpecialPageFactory;
|
||||
use NamespaceInfo;
|
||||
use Sanitizer;
|
||||
use SpecialPage;
|
||||
use Title;
|
||||
use TitleFormatter;
|
||||
|
||||
|
|
@ -82,16 +83,27 @@ class LinkRenderer {
|
|||
private $runLegacyBeginHook = true;
|
||||
|
||||
/**
|
||||
* @var SpecialPageFactory
|
||||
*/
|
||||
private $specialPageFactory;
|
||||
|
||||
/**
|
||||
* @internal For use by LinkRendererFactory
|
||||
* @param TitleFormatter $titleFormatter
|
||||
* @param LinkCache $linkCache
|
||||
* @param NamespaceInfo $nsInfo
|
||||
* @param SpecialPageFactory $specialPageFactory
|
||||
*/
|
||||
public function __construct(
|
||||
TitleFormatter $titleFormatter, LinkCache $linkCache, NamespaceInfo $nsInfo
|
||||
TitleFormatter $titleFormatter,
|
||||
LinkCache $linkCache,
|
||||
NamespaceInfo $nsInfo,
|
||||
SpecialPageFactory $specialPageFactory
|
||||
) {
|
||||
$this->titleFormatter = $titleFormatter;
|
||||
$this->linkCache = $linkCache;
|
||||
$this->nsInfo = $nsInfo;
|
||||
$this->specialPageFactory = $specialPageFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -427,12 +439,22 @@ class LinkRenderer {
|
|||
/**
|
||||
* Normalizes the provided target
|
||||
*
|
||||
* @todo move the code from Linker actually here
|
||||
* @internal For use by deprecated Linker & DummyLinker
|
||||
* ::normaliseSpecialPage() methods
|
||||
* @param LinkTarget $target
|
||||
* @return LinkTarget
|
||||
*/
|
||||
private function normalizeTarget( LinkTarget $target ) {
|
||||
return Linker::normaliseSpecialPage( $target );
|
||||
public function normalizeTarget( LinkTarget $target ) {
|
||||
if ( $target->getNamespace() == NS_SPECIAL && !$target->isExternal() ) {
|
||||
list( $name, $subpage ) = $this->specialPageFactory->resolveAlias(
|
||||
$target->getDBkey()
|
||||
);
|
||||
if ( $name ) {
|
||||
return SpecialPage::getTitleValueFor( $name, $subpage, $target->getFragment() );
|
||||
}
|
||||
}
|
||||
|
||||
return $target;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
namespace MediaWiki\Linker;
|
||||
|
||||
use LinkCache;
|
||||
use MediaWiki\SpecialPage\SpecialPageFactory;
|
||||
use NamespaceInfo;
|
||||
use TitleFormatter;
|
||||
use User;
|
||||
|
|
@ -47,23 +48,36 @@ class LinkRendererFactory {
|
|||
private $nsInfo;
|
||||
|
||||
/**
|
||||
* @var SpecialPageFactory
|
||||
*/
|
||||
private $specialPageFactory;
|
||||
|
||||
/**
|
||||
* @internal For use by core ServiceWiring
|
||||
* @param TitleFormatter $titleFormatter
|
||||
* @param LinkCache $linkCache
|
||||
* @param NamespaceInfo $nsInfo
|
||||
* @param SpecialPageFactory $specialPageFactory
|
||||
*/
|
||||
public function __construct(
|
||||
TitleFormatter $titleFormatter, LinkCache $linkCache, NamespaceInfo $nsInfo
|
||||
TitleFormatter $titleFormatter,
|
||||
LinkCache $linkCache,
|
||||
NamespaceInfo $nsInfo,
|
||||
SpecialPageFactory $specialPageFactory
|
||||
) {
|
||||
$this->titleFormatter = $titleFormatter;
|
||||
$this->linkCache = $linkCache;
|
||||
$this->nsInfo = $nsInfo;
|
||||
$this->specialPageFactory = $specialPageFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return LinkRenderer
|
||||
*/
|
||||
public function create() {
|
||||
return new LinkRenderer( $this->titleFormatter, $this->linkCache, $this->nsInfo );
|
||||
return new LinkRenderer(
|
||||
$this->titleFormatter, $this->linkCache, $this->nsInfo, $this->specialPageFactory
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
use MediaWiki\Linker\LinkRenderer;
|
||||
use MediaWiki\Linker\LinkRendererFactory;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\SpecialPage\SpecialPageFactory;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
|
||||
/**
|
||||
|
|
@ -25,6 +26,11 @@ class LinkRendererFactoryTest extends MediaWikiLangTestCase {
|
|||
*/
|
||||
private $nsInfo;
|
||||
|
||||
/**
|
||||
* @var SpecialPageFactory
|
||||
*/
|
||||
private $specialPageFactory;
|
||||
|
||||
public function setUp() : void {
|
||||
parent::setUp();
|
||||
|
||||
|
|
@ -32,6 +38,7 @@ class LinkRendererFactoryTest extends MediaWikiLangTestCase {
|
|||
$this->titleFormatter = $services->getTitleFormatter();
|
||||
$this->linkCache = $services->getLinkCache();
|
||||
$this->nsInfo = $services->getNamespaceInfo();
|
||||
$this->specialPageFactory = $services->getSpecialPageFactory();
|
||||
}
|
||||
|
||||
public static function provideCreateFromLegacyOptions() {
|
||||
|
|
@ -63,8 +70,9 @@ class LinkRendererFactoryTest extends MediaWikiLangTestCase {
|
|||
* @dataProvider provideCreateFromLegacyOptions
|
||||
*/
|
||||
public function testCreateFromLegacyOptions( $options, $func, $val ) {
|
||||
$factory =
|
||||
new LinkRendererFactory( $this->titleFormatter, $this->linkCache, $this->nsInfo );
|
||||
$factory = new LinkRendererFactory(
|
||||
$this->titleFormatter, $this->linkCache, $this->nsInfo, $this->specialPageFactory
|
||||
);
|
||||
$linkRenderer = $factory->createFromLegacyOptions(
|
||||
$options
|
||||
);
|
||||
|
|
@ -73,20 +81,22 @@ class LinkRendererFactoryTest extends MediaWikiLangTestCase {
|
|||
}
|
||||
|
||||
public function testCreate() {
|
||||
$factory =
|
||||
new LinkRendererFactory( $this->titleFormatter, $this->linkCache, $this->nsInfo );
|
||||
$factory = new LinkRendererFactory(
|
||||
$this->titleFormatter, $this->linkCache, $this->nsInfo, $this->specialPageFactory
|
||||
);
|
||||
$this->assertInstanceOf( LinkRenderer::class, $factory->create() );
|
||||
}
|
||||
|
||||
public function testCreateForUser() {
|
||||
/** @var MockObject|User $user */
|
||||
$user = $this->getMockBuilder( User::class )
|
||||
->setMethods( [ 'getStubThreshold' ] )->getMock();
|
||||
->onlyMethods( [ 'getStubThreshold' ] )->getMock();
|
||||
$user->expects( $this->once() )
|
||||
->method( 'getStubThreshold' )
|
||||
->willReturn( 15 );
|
||||
$factory =
|
||||
new LinkRendererFactory( $this->titleFormatter, $this->linkCache, $this->nsInfo );
|
||||
$factory = new LinkRendererFactory(
|
||||
$this->titleFormatter, $this->linkCache, $this->nsInfo, $this->specialPageFactory
|
||||
);
|
||||
$linkRenderer = $factory->createForUser( $user );
|
||||
$this->assertInstanceOf( LinkRenderer::class, $linkRenderer );
|
||||
$this->assertEquals( 15, $linkRenderer->getStubThreshold() );
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ class LinkRendererTest extends MediaWikiLangTestCase {
|
|||
$wanCache = $services->getMainWANObjectCache();
|
||||
$titleFormatter = $services->getTitleFormatter();
|
||||
$nsInfo = $services->getNamespaceInfo();
|
||||
$specialPageFactory = $services->getSpecialPageFactory();
|
||||
$linkCache = new LinkCache( $titleFormatter, $wanCache, $nsInfo );
|
||||
$foobarTitle = new TitleValue( NS_MAIN, 'FooBar' );
|
||||
$redirectTitle = new TitleValue( NS_MAIN, 'Redirect' );
|
||||
|
|
@ -166,7 +167,7 @@ class LinkRendererTest extends MediaWikiLangTestCase {
|
|||
0 // redir
|
||||
);
|
||||
|
||||
$linkRenderer = new LinkRenderer( $titleFormatter, $linkCache, $nsInfo );
|
||||
$linkRenderer = new LinkRenderer( $titleFormatter, $linkCache, $nsInfo, $specialPageFactory );
|
||||
$linkRenderer->setStubThreshold( 0 );
|
||||
$this->assertSame(
|
||||
'',
|
||||
|
|
|
|||
Loading…
Reference in a new issue