From: Kunal Mehta Date: Wed, 27 Apr 2016 21:52:50 +0000 (-0700) Subject: LinkCache: Use LinkTarget instead of Title X-Git-Tag: 1.31.0-rc.0~6997^2 X-Git-Url: http://git.cyclocoop.org/clavettes/images/siteon3.jpg?a=commitdiff_plain;h=f77cbc02b1ff6d7c39f30ae28cc3ea25e22834cd;p=lhc%2Fweb%2Fwiklou.git LinkCache: Use LinkTarget instead of Title Change-Id: I9ed5a095fc50334a3c41fd52f6d05611dadbaf68 --- diff --git a/includes/cache/LinkCache.php b/includes/cache/LinkCache.php index b8f232939f..bb2242b225 100644 --- a/includes/cache/LinkCache.php +++ b/includes/cache/LinkCache.php @@ -20,6 +20,8 @@ * @file * @ingroup Cache */ +use MediaWiki\Linker\LinkTarget; +use MediaWiki\MediaWikiServices; /** * Cache for article titles (prefixed DB keys) and ids linked from one source @@ -37,6 +39,11 @@ class LinkCache { private $mBadLinks; private $mForUpdate = false; + /** + * @var TitleFormatter + */ + private $titleFormatter; + /** * How many Titles to store. There are two caches, so the amount actually * stored in memory can be up to twice this. @@ -48,9 +55,10 @@ class LinkCache { */ protected static $instance; - public function __construct() { + public function __construct( TitleFormatter $titleFormatter ) { $this->mGoodLinks = new HashBagOStuff( [ 'maxKeys' => self::MAX_SIZE ] ); $this->mBadLinks = new HashBagOStuff( [ 'maxKeys' => self::MAX_SIZE ] ); + $this->titleFormatter = $titleFormatter; } /** @@ -60,7 +68,9 @@ class LinkCache { */ public static function singleton() { if ( !self::$instance ) { - self::$instance = new LinkCache; + self::$instance = new LinkCache( + MediaWikiServices::getInstance()->getTitleFormatter() + ); } return self::$instance; @@ -119,12 +129,12 @@ class LinkCache { /** * Get a field of a title object from cache. * If this link is not a cached good title, it will return NULL. - * @param Title $title + * @param LinkTarget $target * @param string $field ('length','redirect','revision','model') * @return string|int|null */ - public function getGoodLinkFieldObj( Title $title, $field ) { - $dbkey = $title->getPrefixedDBkey(); + public function getGoodLinkFieldObj( LinkTarget $target, $field ) { + $dbkey = $this->titleFormatter->getPrefixedDBkey( $target ); $info = $this->mGoodLinks->get( $dbkey ); if ( !$info ) { return null; @@ -145,17 +155,17 @@ class LinkCache { * Add a link for the title to the link cache * * @param int $id Page's ID - * @param Title $title + * @param LinkTarget $target * @param int $len Text's length * @param int $redir Whether the page is a redirect * @param int $revision Latest revision's ID * @param string|null $model Latest revision's content model ID * @param string|null $lang Language code of the page, if not the content language */ - public function addGoodLinkObj( $id, Title $title, $len = -1, $redir = null, + public function addGoodLinkObj( $id, LinkTarget $target, $len = -1, $redir = null, $revision = 0, $model = null, $lang = null ) { - $dbkey = $title->getPrefixedDBkey(); + $dbkey = $this->titleFormatter->getPrefixedDBkey( $target ); $this->mGoodLinks->set( $dbkey, [ 'id' => (int)$id, 'length' => (int)$len, @@ -169,12 +179,12 @@ class LinkCache { /** * Same as above with better interface. * @since 1.19 - * @param Title $title + * @param LinkTarget $target * @param stdClass $row Object which has the fields page_id, page_is_redirect, * page_latest and page_content_model */ - public function addGoodLinkObjFromRow( Title $title, $row ) { - $dbkey = $title->getPrefixedDBkey(); + public function addGoodLinkObjFromRow( LinkTarget $target, $row ) { + $dbkey = $this->titleFormatter->getPrefixedDBkey( $target ); $this->mGoodLinks->set( $dbkey, [ 'id' => intval( $row->page_id ), 'length' => intval( $row->page_len ), @@ -186,10 +196,10 @@ class LinkCache { } /** - * @param Title $title + * @param LinkTarget $target */ - public function addBadLinkObj( Title $title ) { - $dbkey = $title->getPrefixedDBkey(); + public function addBadLinkObj( LinkTarget $target ) { + $dbkey = $this->titleFormatter->getPrefixedDBkey( $target ); if ( !$this->isBadLink( $dbkey ) ) { $this->mBadLinks->set( $dbkey, 1 ); } @@ -203,10 +213,10 @@ class LinkCache { } /** - * @param Title $title + * @param LinkTarget $target */ - public function clearLink( Title $title ) { - $dbkey = $title->getPrefixedDBkey(); + public function clearLink( LinkTarget $target ) { + $dbkey = $this->titleFormatter->getPrefixedDBkey( $target ); $this->mBadLinks->delete( $dbkey ); $this->mGoodLinks->delete( $dbkey ); } @@ -214,6 +224,7 @@ class LinkCache { /** * Add a title to the link cache, return the page_id or zero if non-existent * + * @deprecated since 1.27, unused * @param string $title Prefixed DB key * @return int Page ID or zero */ @@ -228,13 +239,13 @@ class LinkCache { /** * Add a title to the link cache, return the page_id or zero if non-existent * - * @param Title $nt Title object to add + * @param LinkTarget $nt LinkTarget object to add * @return int Page ID or zero */ - public function addLinkObj( Title $nt ) { + public function addLinkObj( LinkTarget $nt ) { global $wgContentHandlerUseDB, $wgPageLanguageUseDB; - $key = $nt->getPrefixedDBkey(); + $key = $this->titleFormatter->getPrefixedDBkey( $nt ); if ( $this->isBadLink( $key ) || $nt->isExternal() ) { return 0; }