Merge "Remove no-op parameter from UIDGeneratorTest"
[lhc/web/wiklou.git] / includes / interwiki / Interwiki.php
index bd8291f..9a5a3ff 100644 (file)
@@ -30,7 +30,7 @@ use \Cdb\Reader as CdbReader;
  */
 class Interwiki {
        // Cache - removes oldest entry when it hits limit
-       protected static $smCache = array();
+       protected static $smCache = [];
        const CACHE_LIMIT = 100; // 0 means unlimited, any other value is max number of entries.
 
        /** @var string The interwiki prefix, (e.g. "Meatball", or the language prefix "de") */
@@ -137,7 +137,7 @@ class Interwiki {
                $value = self::getInterwikiCacheEntry( $prefix );
 
                $s = new Interwiki( $prefix );
-               if ( $value != '' ) {
+               if ( $value ) {
                        // Split values
                        list( $local, $url ) = explode( ' ', $value, 2 );
                        $s->mURL = $url;
@@ -155,34 +155,31 @@ class Interwiki {
         * @note More logic is explained in DefaultSettings.
         *
         * @param string $prefix Database key
-        * @return string The interwiki entry
+        * @return bool|string The interwiki entry or false if not found
         */
        protected static function getInterwikiCacheEntry( $prefix ) {
-               global $wgInterwikiCache, $wgInterwikiScopes, $wgInterwikiFallbackSite;
-               static $db, $site;
+               global $wgInterwikiScopes, $wgInterwikiFallbackSite;
+               static $site;
 
                wfDebug( __METHOD__ . "( $prefix )\n" );
                $value = false;
                try {
-                       if ( !$db ) {
-                               $db = CdbReader::open( $wgInterwikiCache );
-                       }
-                       /* Resolve site name */
+                       // Resolve site name
                        if ( $wgInterwikiScopes >= 3 && !$site ) {
-                               $site = $db->get( '__sites:' . wfWikiID() );
+                               $site = self::getCacheValue( '__sites:' . wfWikiID() );
                                if ( $site == '' ) {
                                        $site = $wgInterwikiFallbackSite;
                                }
                        }
 
-                       $value = $db->get( wfMemcKey( $prefix ) );
+                       $value = self::getCacheValue( wfMemcKey( $prefix ) );
                        // Site level
                        if ( $value == '' && $wgInterwikiScopes >= 3 ) {
-                               $value = $db->get( "_{$site}:{$prefix}" );
+                               $value = self::getCacheValue( "_{$site}:{$prefix}" );
                        }
                        // Global Level
                        if ( $value == '' && $wgInterwikiScopes >= 2 ) {
-                               $value = $db->get( "__global:{$prefix}" );
+                               $value = self::getCacheValue( "__global:{$prefix}" );
                        }
                        if ( $value == 'undef' ) {
                                $value = '';
@@ -195,6 +192,19 @@ class Interwiki {
                return $value;
        }
 
+       private static function getCacheValue( $key ) {
+               global $wgInterwikiCache;
+               static $reader;
+               if ( $reader === null ) {
+                       $reader = is_array( $wgInterwikiCache ) ? false : CdbReader::open( $wgInterwikiCache );
+               }
+               if ( $reader ) {
+                       return $reader->get( $key );
+               } else {
+                       return isset( $wgInterwikiCache[$key] ) ? $wgInterwikiCache[$key] : false;
+               }
+       }
+
        /**
         * Load the interwiki, trying first memcached then the DB
         *
@@ -204,8 +214,8 @@ class Interwiki {
        protected static function load( $prefix ) {
                global $wgInterwikiExpiry;
 
-               $iwData = array();
-               if ( !Hooks::run( 'InterwikiLoadPrefix', array( $prefix, &$iwData ) ) ) {
+               $iwData = [];
+               if ( !Hooks::run( 'InterwikiLoadPrefix', [ $prefix, &$iwData ] ) ) {
                        return Interwiki::loadFromArray( $iwData );
                }
 
@@ -227,7 +237,7 @@ class Interwiki {
                                $row = $dbr->selectRow(
                                        'interwiki',
                                        Interwiki::selectFields(),
-                                       array( 'iw_prefix' => $prefix ),
+                                       [ 'iw_prefix' => $prefix ],
                                        __METHOD__
                                );
 
@@ -271,25 +281,23 @@ class Interwiki {
         * @since 1.19
         */
        protected static function getAllPrefixesCached( $local ) {
-               global $wgInterwikiCache, $wgInterwikiScopes, $wgInterwikiFallbackSite;
-               static $db, $site;
+               global $wgInterwikiScopes, $wgInterwikiFallbackSite;
+               static $site;
 
                wfDebug( __METHOD__ . "()\n" );
-               $data = array();
+               $data = [];
                try {
-                       if ( !$db ) {
-                               $db = CdbReader::open( $wgInterwikiCache );
-                       }
                        /* Resolve site name */
                        if ( $wgInterwikiScopes >= 3 && !$site ) {
-                               $site = $db->get( '__sites:' . wfWikiID() );
+                               $site = self::getCacheValue( '__sites:' . wfWikiID() );
+
                                if ( $site == '' ) {
                                        $site = $wgInterwikiFallbackSite;
                                }
                        }
 
                        // List of interwiki sources
-                       $sources = array();
+                       $sources = [];
                        // Global Level
                        if ( $wgInterwikiScopes >= 2 ) {
                                $sources[] = '__global';
@@ -301,9 +309,9 @@ class Interwiki {
                        $sources[] = wfWikiID();
 
                        foreach ( $sources as $source ) {
-                               $list = $db->get( "__list:{$source}" );
+                               $list = self::getCacheValue( '__list:' . $source );
                                foreach ( explode( ' ', $list ) as $iw_prefix ) {
-                                       $row = $db->get( "{$source}:{$iw_prefix}" );
+                                       $row = self::getCacheValue( "{$source}:{$iw_prefix}" );
                                        if ( !$row ) {
                                                continue;
                                        }
@@ -314,11 +322,11 @@ class Interwiki {
                                                continue;
                                        }
 
-                                       $data[$iw_prefix] = array(
+                                       $data[$iw_prefix] = [
                                                'iw_prefix' => $iw_prefix,
                                                'iw_url' => $iw_url,
                                                'iw_local' => $iw_local,
-                                       );
+                                       ];
                                }
                        }
                } catch ( CdbException $e ) {
@@ -341,7 +349,7 @@ class Interwiki {
        protected static function getAllPrefixesDB( $local ) {
                $db = wfGetDB( DB_SLAVE );
 
-               $where = array();
+               $where = [];
 
                if ( $local !== null ) {
                        if ( $local == 1 ) {
@@ -353,10 +361,10 @@ class Interwiki {
 
                $res = $db->select( 'interwiki',
                        self::selectFields(),
-                       $where, __METHOD__, array( 'ORDER BY' => 'iw_prefix' )
+                       $where, __METHOD__, [ 'ORDER BY' => 'iw_prefix' ]
                );
 
-               $retval = array();
+               $retval = [];
                foreach ( $res as $row ) {
                        $retval[] = (array)$row;
                }
@@ -465,13 +473,13 @@ class Interwiki {
         * @return string[]
         */
        public static function selectFields() {
-               return array(
+               return [
                        'iw_prefix',
                        'iw_url',
                        'iw_api',
                        'iw_wikiid',
                        'iw_local',
                        'iw_trans'
-               );
+               ];
        }
 }