Remove unused messages in the installer
[lhc/web/wiklou.git] / includes / Title.php
index 65b2d3a..6a5bbf7 100644 (file)
@@ -22,7 +22,7 @@
  * @file
  */
 use MediaWiki\Linker\LinkTarget;
-
+use MediaWiki\Interwiki\InterwikiLookup;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -165,50 +165,27 @@ class Title implements LinkTarget {
         * Avoid usage of this singleton by using TitleValue
         * and the associated services when possible.
         *
-        * @return MediaWikiTitleCodec
+        * @return TitleFormatter
         */
-       private static function getMediaWikiTitleCodec() {
-               global $wgContLang, $wgLocalInterwikis;
-
-               static $titleCodec = null;
-               static $titleCodecFingerprint = null;
-
-               // $wgContLang and $wgLocalInterwikis may change (especially while testing),
-               // make sure we are using the right one. To detect changes over the course
-               // of a request, we remember a fingerprint of the config used to create the
-               // codec singleton, and re-create it if the fingerprint doesn't match.
-               $fingerprint = spl_object_hash( $wgContLang ) . '|' . implode( '+', $wgLocalInterwikis );
-
-               if ( $fingerprint !== $titleCodecFingerprint ) {
-                       $titleCodec = null;
-               }
-
-               if ( !$titleCodec ) {
-                       $titleCodec = new MediaWikiTitleCodec(
-                               $wgContLang,
-                               GenderCache::singleton(),
-                               $wgLocalInterwikis
-                       );
-                       $titleCodecFingerprint = $fingerprint;
-               }
-
-               return $titleCodec;
+       private static function getTitleFormatter() {
+               return MediaWikiServices::getInstance()->getTitleFormatter();
        }
 
        /**
-        * B/C kludge: provide a TitleParser for use by Title.
+        * B/C kludge: provide an InterwikiLookup for use by Title.
         * Ideally, Title would have no methods that need this.
         * Avoid usage of this singleton by using TitleValue
         * and the associated services when possible.
         *
-        * @return TitleFormatter
+        * @return InterwikiLookup
         */
-       private static function getTitleFormatter() {
-               // NOTE: we know that getMediaWikiTitleCodec() returns a MediaWikiTitleCodec,
-               //      which implements TitleFormatter.
-               return self::getMediaWikiTitleCodec();
+       private static function getInterwikiLookup() {
+               return MediaWikiServices::getInstance()->getInterwikiLookup();
        }
 
+       /**
+        * @access protected
+        */
        function __construct() {
        }
 
@@ -796,7 +773,7 @@ class Title implements LinkTarget {
         */
        public function isLocal() {
                if ( $this->isExternal() ) {
-                       $iw = Interwiki::fetch( $this->mInterwiki );
+                       $iw = self::getInterwikiLookup()->fetch( $this->mInterwiki );
                        if ( $iw ) {
                                return $iw->isLocal();
                        }
@@ -844,7 +821,7 @@ class Title implements LinkTarget {
                        return false;
                }
 
-               return Interwiki::fetch( $this->mInterwiki )->isTranscludable();
+               return self::getInterwikiLookup()->fetch( $this->mInterwiki )->isTranscludable();
        }
 
        /**
@@ -857,7 +834,7 @@ class Title implements LinkTarget {
                        return false;
                }
 
-               return Interwiki::fetch( $this->mInterwiki )->getWikiID();
+               return self::getInterwikiLookup()->fetch( $this->mInterwiki )->getWikiID();
        }
 
        /**
@@ -944,7 +921,9 @@ class Title implements LinkTarget {
         * @return string Content model id
         */
        public function getContentModel( $flags = 0 ) {
-               if ( !$this->mContentModel && $this->getArticleID( $flags ) ) {
+               if ( ( !$this->mContentModel || $flags === Title::GAID_FOR_UPDATE ) &&
+                       $this->getArticleID( $flags )
+               ) {
                        $linkCache = LinkCache::singleton();
                        $linkCache->addLinkObj( $this ); # in case we already had an article ID
                        $this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
@@ -1711,7 +1690,7 @@ class Title implements LinkTarget {
 
                $query = self::fixUrlQueryArgs( $query, $query2 );
 
-               $interwiki = Interwiki::fetch( $this->mInterwiki );
+               $interwiki = self::getInterwikiLookup()->fetch( $this->mInterwiki );
                if ( $interwiki ) {
                        $namespace = $this->getNsText();
                        if ( $namespace != '' ) {
@@ -1749,9 +1728,9 @@ class Title implements LinkTarget {
 
                                if ( $url === false
                                        && $wgVariantArticlePath
+                                       && preg_match( '/^variant=([^&]*)$/', $query, $matches )
                                        && $wgContLang->getCode() === $this->getPageLanguage()->getCode()
                                        && $this->getPageLanguage()->hasVariants()
-                                       && preg_match( '/^variant=([^&]*)$/', $query, $matches )
                                ) {
                                        $variant = urldecode( $matches[1] );
                                        if ( $this->getPageLanguage()->hasVariant( $variant ) ) {
@@ -3007,6 +2986,8 @@ class Title implements LinkTarget {
 
        /**
         * Purge expired restrictions from the page_restrictions table
+        *
+        * This will purge no more than $wgUpdateRowsPerQuery page_restrictions rows
         */
        static function purgeExpiredRestrictions() {
                if ( wfReadOnly() ) {
@@ -3017,11 +2998,24 @@ class Title implements LinkTarget {
                        wfGetDB( DB_MASTER ),
                        __METHOD__,
                        function ( IDatabase $dbw, $fname ) {
-                               $dbw->delete(
+                               $config = MediaWikiServices::getInstance()->getMainConfig();
+                               $ids = $dbw->selectFieldValues(
                                        'page_restrictions',
+                                       'pr_id',
                                        [ 'pr_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ],
-                                       $fname
+                                       $fname,
+                                       [ 'LIMIT' => $config->get( 'UpdateRowsPerQuery' ) ] // T135470
                                );
+                               if ( $ids ) {
+                                       $dbw->delete( 'page_restrictions', [ 'pr_id' => $ids ], $fname );
+                               }
+                       }
+               ) );
+
+               DeferredUpdates::addUpdate( new AtomicSectionUpdate(
+                       wfGetDB( DB_MASTER ),
+                       __METHOD__,
+                       function ( IDatabase $dbw, $fname ) {
                                $dbw->delete(
                                        'protected_titles',
                                        [ 'pt_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ],
@@ -3334,9 +3328,11 @@ class Title implements LinkTarget {
                // @note: splitTitleString() is a temporary hack to allow MediaWikiTitleCodec to share
                //        the parsing code with Title, while avoiding massive refactoring.
                // @todo: get rid of secureAndSplit, refactor parsing code.
-               $titleParser = self::getMediaWikiTitleCodec();
+               // @note: getTitleParser() returns a TitleParser implementation which does not have a
+               //        splitTitleString method, but the only implementation (MediaWikiTitleCodec) does
+               $titleCodec = MediaWikiServices::getInstance()->getTitleParser();
                // MalformedTitleException can be thrown here
-               $parts = $titleParser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
+               $parts = $titleCodec->splitTitleString( $dbkey, $this->getDefaultNamespace() );
 
                # Fill fields
                $this->setFragment( '#' . $parts['fragment'] );