Legoktm has uploaded a new change for review. https://gerrit.wikimedia.org/r/306632
Change subject: [WIP] Introduce FileLinkRenderer ...................................................................... [WIP] Introduce FileLinkRenderer Continuing with the Linker rewrite, next is to clean up the code that makes links to files. This commit mainly bootstraps the new class, and contains direct ports of functions with minor changes to function calls and signatures. The test coverage for this code is mostly in parser tests at this point. Change-Id: I4499e5439dacb7d5e885b7c6d98edb06d980b4ee --- M autoload.php M includes/Linker.php M includes/MediaWikiServices.php M includes/ServiceWiring.php M tests/phpunit/includes/MediaWikiServicesTest.php 5 files changed, 26 insertions(+), 33 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/32/306632/1 diff --git a/autoload.php b/autoload.php index 39102fd..744520f 100644 --- a/autoload.php +++ b/autoload.php @@ -843,6 +843,7 @@ 'MediaWiki\\Interwiki\\InterwikiLookup' => __DIR__ . '/includes/interwiki/InterwikiLookup.php', 'MediaWiki\\Languages\\Data\\Names' => __DIR__ . '/languages/data/Names.php', 'MediaWiki\\Languages\\Data\\ZhConversion' => __DIR__ . '/languages/data/ZhConversion.php', + 'MediaWiki\\Linker\\FileLinkRenderer' => __DIR__ . '/includes/linker/FileLinkRenderer.php', 'MediaWiki\\Linker\\LinkRenderer' => __DIR__ . '/includes/linker/LinkRenderer.php', 'MediaWiki\\Linker\\LinkRendererFactory' => __DIR__ . '/includes/linker/LinkRendererFactory.php', 'MediaWiki\\Linker\\LinkTarget' => __DIR__ . '/includes/linker/LinkTarget.php', diff --git a/includes/Linker.php b/includes/Linker.php index 94e6bd8..018a95c 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -790,49 +790,21 @@ return "<!-- ERROR -->" . htmlspecialchars( $label ); } - global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl; - if ( $label == '' ) { - $label = $title->getPrefixedText(); - } - $encLabel = htmlspecialchars( $label ); - $currentExists = $time ? ( wfFindFile( $title ) != false ) : false; - - if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || $wgEnableUploads ) - && !$currentExists - ) { - $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title ); - - if ( $redir ) { - // We already know it's a redirect, so mark it - // accordingly - return self::link( - $title, - $encLabel, - [ 'class' => 'mw-redirect' ], - wfCgiToArray( $query ), - [ 'known', 'noclasses' ] - ); - } - - $href = self::getUploadUrl( $title, $query ); - - return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' . - htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' . - $encLabel . '</a>'; - } - - return self::link( $title, $encLabel, [], wfCgiToArray( $query ), [ 'known', 'noclasses' ] ); + return MediaWikiServices::getInstance()->getFileLinkRenderer()->makeBrokenFileLink( + $title, $label, strlen( $query ) ? wfCgiToArray( $query ) : [], $time + ); } /** * Get the URL to upload a certain file * * @since 1.16.3 + * @private Only public for use in FileLinkRenderer * @param Title $destFile Title object of the file to upload * @param string $query Urlencoded query string to prepend * @return string Urlencoded URL */ - protected static function getUploadUrl( $destFile, $query = '' ) { + public static function getUploadUrl( $destFile, $query = '' ) { global $wgUploadMissingFileUrl, $wgUploadNavigationUrl; $q = 'wpDestFile=' . $destFile->getPartialURL(); if ( $query != '' ) { diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 49891df..23eab8a 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -12,6 +12,7 @@ use Liuggio\StatsdClient\Factory\StatsdDataFactory; use LoadBalancer; use MediaHandlerFactory; +use MediaWiki\Linker\FileLinkRenderer; use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkRendererFactory; use MediaWiki\Services\SalvageableService; @@ -558,6 +559,14 @@ /** * @since 1.28 + * @return FileLinkRenderer + */ + public function getFileLinkRenderer() { + return $this->getService( 'FileLinkRenderer' ); + } + + /** + * @since 1.28 * @return TitleFormatter */ public function getTitleFormatter() { diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 33569e6..8d9d7aa 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -38,6 +38,8 @@ */ use MediaWiki\Interwiki\ClassicInterwikiLookup; +use MediaWiki\Linker\FileLinkRenderer; +use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkRendererFactory; use MediaWiki\MediaWikiServices; @@ -187,6 +189,13 @@ } }, + 'FileLinkRenderer' => function( MediaWikiServices $services ) { + return new FileLinkRenderer( + $services->getLinkRenderer(), + $services->getTitleFormatter() + ); + }, + 'GenderCache' => function( MediaWikiServices $services ) { return new GenderCache(); }, diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index 8c2b143..9c8e892 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -1,6 +1,7 @@ <?php use Liuggio\StatsdClient\Factory\StatsdDataFactory; use MediaWiki\Interwiki\InterwikiLookup; +use MediaWiki\Linker\FileLinkRenderer; use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkRendererFactory; use MediaWiki\MediaWikiServices; @@ -320,6 +321,7 @@ 'GenderCache' => [ 'GenderCache', GenderCache::class ], 'LinkCache' => [ 'LinkCache', LinkCache::class ], 'LinkRenderer' => [ 'LinkRenderer', LinkRenderer::class ], + 'FileLinkRenderer' => [ 'FileLinkRenderer'. FileLinkRenderer::class ], 'LinkRendererFactory' => [ 'LinkRendererFactory', LinkRendererFactory::class ], '_MediaWikiTitleCodec' => [ '_MediaWikiTitleCodec', MediaWikiTitleCodec::class ], 'TitleFormatter' => [ 'TitleFormatter', TitleFormatter::class ], -- To view, visit https://gerrit.wikimedia.org/r/306632 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4499e5439dacb7d5e885b7c6d98edb06d980b4ee Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits