Merge "Update release notes and documentation about skins"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 13 Aug 2014 20:24:19 +0000 (20:24 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 13 Aug 2014 20:24:19 +0000 (20:24 +0000)
52 files changed:
includes/Block.php
includes/Setup.php
includes/api/ApiBase.php
includes/api/ApiModuleManager.php
includes/api/ApiPageSet.php
includes/api/ApiQuerySearch.php
includes/api/ApiResult.php
includes/api/ApiUpload.php
includes/changes/RecentChange.php
includes/content/JSONContent.php
includes/db/DatabasePostgres.php
includes/db/DatabaseUtility.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/FileRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/file/File.php
includes/installer/DatabaseUpdater.php
includes/installer/MssqlInstaller.php
includes/media/BitmapMetadataHandler.php
includes/media/Exif.php
includes/media/MediaHandler.php
includes/media/XCF.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php
includes/page/WikiPage.php
includes/poolcounter/PoolCounterWork.php
includes/poolcounter/PoolWorkArticleView.php
includes/revisiondelete/RevisionDeleter.php
includes/skins/Skin.php
includes/skins/SkinFactory.php
includes/skins/SkinFallback.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialUserlogin.php
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/utils/MWCryptHKDF.php
includes/utils/UIDGenerator.php
languages/Language.php
maintenance/namespaceDupes.php
tests/phpunit/includes/ImagePageTest.php
tests/phpunit/includes/api/ApiModuleManagerTest.php
tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
tests/phpunit/includes/api/query/ApiQueryTest.php
tests/phpunit/includes/content/JSONContentTest.php
tests/phpunit/includes/media/XCFTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
tests/phpunit/includes/skins/SkinFactoryTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/fetchTextTest.php
tests/testHelpers.inc
thumb.php

index 45bae28..5881353 100644 (file)
@@ -1105,11 +1105,11 @@ class Block {
         *  - If there are multiple exact or range blocks at the same level, the one chosen
         *    is random
         *
+        * @param array $blocks Array of blocks
         * @param array $ipChain List of IPs (strings). This is used to determine how "close"
         *        a block is to the server, and if a block matches exactly, or is in a range.
         *        The order is furthest from the server to nearest e.g., (Browser, proxy1, proxy2,
         *        local-squid, ...)
-        * @param array $block Array of blocks
         * @return Block|null The "best" block from the list
         */
        public static function chooseBlock( array $blocks, array $ipChain ) {
index a4b9877..b3e80ea 100644 (file)
@@ -263,8 +263,21 @@ if ( $wgSkipSkin ) {
        $wgSkipSkins[] = $wgSkipSkin;
 }
 
-// Register a hidden "fallback" skin
-$wgValidSkinNames['fallback'] = 'Fallback'; // SkinFallback
+// Register skins
+// Use a closure to avoid leaking into global state
+call_user_func( function() use ( $wgValidSkinNames ) {
+       $factory = SkinFactory::getDefaultInstance();
+       foreach ( $wgValidSkinNames as $name => $skin ) {
+               $factory->register( $name, $skin, function() use ( $skin ) {
+                       $class = "Skin$skin";
+                       return new $class;
+               } );
+       }
+       // Register a hidden "fallback" skin
+       $factory->register( 'fallback', 'Fallback', function() {
+               return new SkinFallback;
+       } );
+} );
 $wgSkipSkins[] = 'fallback';
 
 if ( $wgLocalInterwiki ) {
index 0e87a2e..05f91bc 100644 (file)
@@ -2068,7 +2068,7 @@ abstract class ApiBase extends ContextSource {
        /**
         * @see self::getPossibleErrors()
         * @deprecated since 1.24
-        * @retun array
+        * @return array
         */
        public function getFinalPossibleErrors() {
                wfDeprecated( __METHOD__, '1.24' );
index fdf3f02..f7d0ccf 100644 (file)
@@ -195,7 +195,7 @@ class ApiModuleManager extends ContextSource {
                        // create instance from factory
                        $instance = call_user_func( $factory, $this->mParent, $name );
 
-                       if ( ! $instance instanceof $class ) {
+                       if ( !$instance instanceof $class ) {
                                throw new MWException( "The factory function for module $name did not return an instance of $class!" );
                        }
                } else {
index dfb87fd..0f26467 100644 (file)
@@ -61,6 +61,7 @@ class ApiPageSet extends ApiBase {
        private $mSpecialTitles = array();
        private $mNormalizedTitles = array();
        private $mInterwikiTitles = array();
+       /** @var Title[] */
        private $mPendingRedirectIDs = array();
        private $mConvertedTitles = array();
        private $mGoodRevIDs = array();
@@ -68,9 +69,7 @@ class ApiPageSet extends ApiBase {
        private $mFakePageId = -1;
        private $mCacheMode = 'public';
        private $mRequestedPageFields = array();
-       /**
-        * @var int
-        */
+       /** @var int */
        private $mDefaultNamespace = NS_MAIN;
 
        /**
@@ -389,7 +388,7 @@ class ApiPageSet extends ApiBase {
        /**
         * Get a list of redirect resolutions - maps a title to its redirect
         * target, as an array of output-ready arrays
-        * @return array
+        * @return Title[]
         */
        public function getRedirectTitles() {
                return $this->mRedirectTitles;
@@ -598,7 +597,7 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Get the list of titles with negative namespace
-        * @return array Title
+        * @return Title[]
         */
        public function getSpecialTitles() {
                return $this->mSpecialTitles;
index 6bf2612..be6bc68 100644 (file)
@@ -197,7 +197,6 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                $hasInterwikiResults = false;
                if ( $interwiki && $resultPageSet === null && $matches->hasInterwikiResults() ) {
                        $matches = $matches->getInterwikiResults();
-                       $iwprefixes = array();
                        $hasInterwikiResults = true;
 
                        // Include number of results if requested
index 97b74e5..2e80447 100644 (file)
@@ -461,7 +461,7 @@ class ApiResult extends ApiBase {
         *
         * @since 1.24
         * @param string|null $continue The "continue" parameter, if any
-        * @param array $allModules Contains ApiBase instances that will be executed
+        * @param ApiBase[] $allModules Contains ApiBase instances that will be executed
         * @param array $generatedModules Names of modules that depend on the generator
         * @return array Two elements: a boolean indicating if the generator is done,
         *   and an array of modules to actually execute.
index 2b840fe..0222e67 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup API
  */
 class ApiUpload extends ApiBase {
-       /** @var UploadBase */
+       /** @var UploadBase|UploadFromChunks */
        protected $mUpload = null;
 
        protected $mParams;
@@ -210,7 +210,6 @@ class ApiUpload extends ApiBase {
                        }
                } else {
                        $filekey = $this->mParams['filekey'];
-                       /** @var $status Status */
                        $status = $this->mUpload->addChunk(
                                $chunkPath, $chunkSize, $this->mParams['offset'] );
                        if ( !$status->isGood() ) {
@@ -551,6 +550,7 @@ class ApiUpload extends ApiBase {
 
                        if ( isset( $warnings['duplicate'] ) ) {
                                $dupes = array();
+                               /** @var File $dupe */
                                foreach ( $warnings['duplicate'] as $dupe ) {
                                        $dupes[] = $dupe->getName();
                                }
@@ -561,6 +561,7 @@ class ApiUpload extends ApiBase {
                        if ( isset( $warnings['exists'] ) ) {
                                $warning = $warnings['exists'];
                                unset( $warnings['exists'] );
+                               /** @var LocalFile $localFile */
                                $localFile = isset( $warning['normalizedFile'] )
                                        ? $warning['normalizedFile']
                                        : $warning['file'];
index cfebf40..eed52c0 100644 (file)
@@ -136,7 +136,7 @@ class RecentChange {
        /**
         * Parsing RC_* constants to human-readable test
         * @since 1.24
-        * @param int $rc_type
+        * @param int $rcType
         * @return string $type
         */
        public static function parseFromRCType( $rcType ) {
index 377d675..e563780 100644 (file)
@@ -80,8 +80,8 @@ class JSONContent extends TextContent {
        }
        /**
         * Constructs an HTML representation of a JSON object.
-        * @param Array $mapping
-        * @return string HTML.
+        * @param array $mapping
+        * @return string HTML
         */
        protected function objectTable( $mapping ) {
                $rows = array();
index f5fdca1..8642d1b 100644 (file)
@@ -1154,7 +1154,7 @@ __INDEXATTR__;
                return wfTimestamp( TS_POSTGRES, $ts );
        }
 
-       /*
+       /**
         * Posted by cc[plus]php[at]c2se[dot]com on 25-Mar-2009 09:12
         * to http://www.php.net/manual/en/ref.pgsql.php
         *
index 3923241..7ec3b4a 100644 (file)
@@ -140,7 +140,7 @@ class ResultWrapper implements Iterator {
         * Fields can be retrieved with $row->fieldname, with fields acting like
         * member variables.
         *
-        * @return object
+        * @return stdClass
         * @throws DBUnexpectedError Thrown if the database returns an error
         */
        function fetchObject() {
@@ -177,8 +177,8 @@ class ResultWrapper implements Iterator {
                $this->db->dataSeek( $this, $row );
        }
 
-       /*********************
-        * Iterator functions
+       /*
+        * ======= Iterator functions =======
         * Note that using these in combination with the non-iterator functions
         * above may cause rows to be skipped or repeated.
         */
@@ -192,7 +192,7 @@ class ResultWrapper implements Iterator {
        }
 
        /**
-        * @return int
+        * @return stdClass|array|false
         */
        function current() {
                if ( is_null( $this->currentRow ) ) {
@@ -210,7 +210,7 @@ class ResultWrapper implements Iterator {
        }
 
        /**
-        * @return int
+        * @return stdClass
         */
        function next() {
                $this->pos++;
@@ -255,6 +255,9 @@ class FakeResultWrapper extends ResultWrapper {
                return count( $this->result );
        }
 
+       /**
+        * @return array|bool
+        */
        function fetchRow() {
                if ( $this->pos < count( $this->result ) ) {
                        $this->currentRow = $this->result[$this->pos];
@@ -276,7 +279,10 @@ class FakeResultWrapper extends ResultWrapper {
        function free() {
        }
 
-       // Callers want to be able to access fields with $this->fieldName
+       /**
+        * Callers want to be able to access fields with $this->fieldName
+        * @return false|stdClass
+        */
        function fetchObject() {
                $this->fetchRow();
                if ( $this->currentRow ) {
@@ -291,6 +297,9 @@ class FakeResultWrapper extends ResultWrapper {
                $this->currentRow = null;
        }
 
+       /**
+        * @return false|stdClass
+        */
        function next() {
                return $this->fetchObject();
        }
index e9c8883..f40ec46 100644 (file)
@@ -173,7 +173,7 @@ class SwiftFileBackend extends FileBackendStore {
         * Sanitize and filter the custom headers from a $params array.
         * We only allow certain Content- and X-Content- headers.
         *
-        * @param array $headers
+        * @param array $params
         * @return array Sanitized value of 'headers' field in $params
         */
        protected function sanitizeHdrs( array $params ) {
index a45fb7a..3bff91f 100644 (file)
@@ -546,7 +546,7 @@ class FileRepo {
         *
         * STUB
         * @param string $hash SHA-1 hash
-        * @return array
+        * @return File[]
         */
        public function findBySha1( $hash ) {
                return array();
@@ -1014,6 +1014,7 @@ class FileRepo {
                        } elseif ( is_array( $triple[2] ) && isset( $triple[2]['headers'] ) ) {
                                $headers = $triple[2]['headers'];
                        }
+                       // @fixme: $headers might not be defined
                        $operations[] = array(
                                'op' => FileBackend::isStoragePath( $src ) ? 'copy' : 'store',
                                'src' => $src,
index 96c8803..926fd0b 100644 (file)
@@ -49,7 +49,7 @@ class LocalRepo extends FileRepo {
 
        /**
         * @throws MWException
-        * @param array $row
+        * @param stdClass $row
         * @return LocalFile
         */
        function newFileFromRow( $row ) {
@@ -91,7 +91,7 @@ class LocalRepo extends FileRepo {
                        $hashPath = $this->getDeletedHashPath( $key );
                        $path = "$root/$hashPath$key";
                        $dbw->begin( __METHOD__ );
-                       // Check for usage in deleted/hidden files and pre-emptively
+                       // Check for usage in deleted/hidden files and preemptively
                        // lock the key to avoid any future use until we are finished.
                        $deleted = $this->deletedFileHasKey( $key, 'lock' );
                        $hidden = $this->hiddenFileHasKey( $key, 'lock' );
@@ -167,7 +167,7 @@ class LocalRepo extends FileRepo {
         * Checks if there is a redirect named as $title
         *
         * @param Title $title Title of file
-        * @return bool
+        * @return bool|Title
         */
        function checkRedirect( Title $title ) {
                global $wgMemc;
@@ -370,7 +370,7 @@ class LocalRepo extends FileRepo {
         * SHA-1 content hash.
         *
         * @param string $hash A sha1 hash to look for
-        * @return array
+        * @return File[]
         */
        function findBySha1( $hash ) {
                $dbr = $this->getSlaveDB();
index fce3f78..189c3a3 100644 (file)
@@ -221,7 +221,7 @@ class RepoGroup {
        /**
         * Interface for FileRepo::checkRedirect()
         * @param Title $title
-        * @return bool
+        * @return bool|Title
         */
        function checkRedirect( Title $title ) {
                if ( !$this->reposInitialised ) {
@@ -273,7 +273,7 @@ class RepoGroup {
         * Find all instances of files with this key
         *
         * @param string $hash Base 36 SHA-1 hash
-        * @return array Array of File objects
+        * @return File[]
         */
        function findBySha1( $hash ) {
                if ( !$this->reposInitialised ) {
index a61002a..4e11c81 100644 (file)
@@ -1937,7 +1937,7 @@ abstract class File {
         * @note Use getWidth()/getHeight() instead of this method unless you have a
         *  a good reason. This method skips all caches.
         *
-        * @param string $fileName The path to the file (e.g. From getLocalPathRef() )
+        * @param string $filePath The path to the file (e.g. From getLocalPathRef() )
         * @return array The width, followed by height, with optionally more things after
         */
        function getImageSize( $filePath ) {
index b25ea09..427ded4 100644 (file)
@@ -297,9 +297,9 @@ abstract class DatabaseUpdater {
         * @param string $tableName The table name
         * @param string $oldIndexName The old index name
         * @param string $newIndexName The new index name
+        * @param string $sqlPath The path to the SQL change path
         * @param bool $skipBothIndexExistWarning Whether to warn if both the old
         * and the new indexes exist. [facultative; by default, false]
-        * @param string $sqlPath The path to the SQL change path
         */
        public function renameExtensionIndex( $tableName, $oldIndexName, $newIndexName,
                $sqlPath, $skipBothIndexExistWarning = false
index 83681b6..46bb86c 100644 (file)
@@ -702,7 +702,7 @@ class MssqlInstaller extends DatabaseInstaller {
        /**
         * Try to see if a given fulltext catalog exists
         * We assume we already have the appropriate database selected
-        * @param string $schemaName Catalog name to check
+        * @param string $catalogName Catalog name to check
         * @return bool
         */
        private function catalogExists( $catalogName ) {
index 053c586..dd41c38 100644 (file)
@@ -97,7 +97,7 @@ class BitmapMetadataHandler {
        /** Add misc metadata. Warning: atm if the metadata category
         * doesn't have a priority, it will be silently discarded.
         *
-        * @param array $meta Array of metadata values
+        * @param array $metaArray Array of metadata values
         * @param string $type Type. defaults to other. if two things have the same type they're merged
         */
        function addMetadata( $metaArray, $type = 'other' ) {
index d285c0c..818bb25 100644 (file)
@@ -586,7 +586,7 @@ class Exif {
                return 2; // We don't need no bloddy constants!
        }
 
-       /**#@+
+       /**
         * Validates if a tag value is of the type it should be according to the Exif spec
         *
         * @param mixed $in The input value to check
index 969bb72..13c2a91 100644 (file)
@@ -743,7 +743,7 @@ abstract class MediaHandler {
                // Do nothing
        }
 
-       /*
+       /**
         * True if the handler can rotate the media
         * @since 1.21
         * @return bool
index 04099c3..503336e 100644 (file)
@@ -155,7 +155,7 @@ class XCFHandler extends BitmapHandler {
         *
         * @param File $file The image object, or false if there isn't one.
         *   Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
-        * @param string $path The filename
+        * @param string $filename The filename
         * @return string
         */
        public function getMetadata( $file, $filename ) {
index 79a6841..59191d7 100644 (file)
@@ -78,8 +78,8 @@ class MemcachedBagOStuff extends BagOStuff {
        }
 
        /**
-        * @param string $key
         * @param mixed $casToken
+        * @param string $key
         * @param mixed $value
         * @param int $exptime
         * @return bool
index 2a882ac..78a512c 100644 (file)
@@ -52,7 +52,7 @@ class WinCacheBagOStuff extends BagOStuff {
         * Store a value in the WinCache object cache
         *
         * @param string $key Cache key
-        * @param mixed $valueObject Value to store
+        * @param mixed $value Value to store
         * @param int $expire Expiration time
         * @return bool
         */
index be5ce3f..47f64a2 100644 (file)
@@ -2314,8 +2314,8 @@ class WikiPage implements Page, IDBAccessObject {
         * @param Content $content Content submitted
         * @param User $user The relevant user
         * @param string $comment Comment submitted
-        * @param string $serialisation_format Format for storing the content in the database
         * @param bool $minor Whereas it's a minor modification
+        * @param string $serialisation_format Format for storing the content in the database
         */
        public function doQuickEditContent( Content $content, User $user, $comment = '', $minor = false,
                $serialisation_format = null
index e49afed..c0be7a1 100644 (file)
@@ -65,7 +65,7 @@ abstract class PoolCounterWork {
        /**
         * Do something with the error, like showing it to the user.
         *
-        * @param $status
+        * @param Status $status
         *
         * @return bool
         */
index 4cdb0ff..5e7e391 100644 (file)
@@ -45,9 +45,9 @@ class PoolWorkArticleView extends PoolCounterWork {
 
        /**
         * @param Page $page
+        * @param ParserOptions $parserOptions ParserOptions to use for the parse
         * @param int $revid ID of the revision being parsed.
         * @param bool $useParserCache Whether to use the parser cache.
-        * @param ParserOptions $parserOptions ParserOptions to use for the parse
         *   operation.
         * @param Content|string $content Content to parse or null to load it; may
         *   also be given as a wikitext string, for BC.
index dc52969..d4f8167 100644 (file)
@@ -189,7 +189,7 @@ class RevisionDeleter {
         * Suggest a target for the revision deletion
         * @since 1.22
         * @param string $typeName
-        * @param Title|null $title User-supplied target
+        * @param Title|null $target User-supplied target
         * @param array $ids
         * @return Title|null
         */
index c4de2ad..3750bad 100644 (file)
@@ -144,7 +144,7 @@ abstract class Skin extends ContextSource {
         * Factory method for loading a skin of a given type
         * @param string $key 'monobook', 'vector', etc.
         * @return Skin
-        * @deprecated Use SkinFactory instead
+        * @deprecated since 1.24; Use SkinFactory instead
         */
        static function &newFromKey( $key ) {
                wfDeprecated( __METHOD__, '1.24' );
@@ -415,7 +415,7 @@ abstract class Skin extends ContextSource {
                return "$numeric $type $name";
        }
 
-       /*
+       /**
         * Return values for <html> element
         * @return array of associative name-to-value elements for <html> element
         */
index 51aced9..d5f2546 100644 (file)
@@ -34,10 +34,19 @@ class SkinFactory {
         */
        private $factoryFunctions = array();
        /**
-        * Map of name => human readable name
+        * Map of name => fallback human-readable name, used when the 'skinname-<skin>' message is not
+        * available
+        *
         * @var array
         */
        private $displayNames = array();
+       /**
+        * Map of name => class name without "Skin" prefix, for legacy skins using the autodiscovery
+        * mechanism
+        *
+        * @var array
+        */
+       private $legacySkins = array();
 
        /**
         * @var SkinFactory
@@ -53,11 +62,16 @@ class SkinFactory {
        }
 
        /**
-        * Register a new Skin factory function
-        * Will override if it's already registered
-        * @param string $name
-        * @param string $displayName
-        * @param callable $callback That takes the skin name as an argument
+        * Register a new Skin factory function.
+        *
+        * Will override if it's already registered.
+        *
+        * @param string $name Internal skin name. Should be all-lowercase (but technically doesn't have
+        *     to be).
+        * @param string $displayName For backwards-compatibility with old skin loading system. This is
+        *     the text used as skin's human-readable name when the 'skinname-<skin>' message is not
+   *     available. It should be the same as the skin name provided in $wgExtensionCredits.
+        * @param callable $callback Callback that takes the skin name as an argument
         * @throws InvalidArgumentException If an invalid callback is provided
         */
        public function register( $name, $displayName, $callback ) {
@@ -72,10 +86,9 @@ class SkinFactory {
         * @return array
         */
        private function getLegacySkinNames() {
-               global $wgValidSkinNames;
                static $skinsInitialised = false;
 
-               if ( !$skinsInitialised || !count( $wgValidSkinNames ) ) {
+               if ( !$skinsInitialised || !count( $this->legacySkins ) ) {
                        # Get a list of available skins
                        # Build using the regular expression '^(.*).php$'
                        # Array keys are all lower case, array value keep the case used by filename
@@ -117,7 +130,7 @@ class SkinFactory {
                                                        "The mechanism will be removed in MediaWiki 1.25 and the skin will no longer be recognized. " .
                                                        "See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for information how to fix this."
                                                );
-                                               $wgValidSkinNames[strtolower( $aSkin )] = $aSkin;
+                                               $this->legacySkins[strtolower( $aSkin )] = $aSkin;
                                        }
                                }
                                $skinDir->close();
@@ -125,7 +138,7 @@ class SkinFactory {
                        $skinsInitialised = true;
                        wfProfileOut( __METHOD__ . '-init' );
                }
-               return $wgValidSkinNames;
+               return $this->legacySkins;
 
        }
 
@@ -143,8 +156,7 @@ class SkinFactory {
        }
 
        /**
-        * Get a legacy skin which uses $wgValidSkinNames
-        * or autoloading
+        * Get a legacy skin which uses the autodiscovery mechanism.
         *
         * @param string $name
         * @return Skin|bool false if the skin couldn't be constructed
@@ -185,7 +197,7 @@ class SkinFactory {
         */
        public function makeSkin( $name ) {
                if ( !isset( $this->factoryFunctions[$name] ) ) {
-                       // Check the legacy method of skin loading
+                       // Check the legacy autodiscovery method of skin loading
                        $legacy = $this->getLegacySkin( $name );
                        if ( $legacy ) {
                                return $legacy;
index 30ea97d..b63f7a1 100644 (file)
@@ -19,7 +19,7 @@ class SkinFallback extends SkinTemplate {
        /**
         * Add CSS via ResourceLoader
         *
-        * @param $out OutputPage
+        * @param OutputPage $out
         */
        public function setupSkinUserCss( OutputPage $out ) {
                parent::setupSkinUserCss( $out );
index 572eacc..ce43652 100644 (file)
@@ -46,6 +46,11 @@ class ActiveUsersPager extends UsersPager {
         */
        protected $hideRights = array();
 
+       /**
+        * @var array
+        */
+       private $blockStatusByUid;
+
        /**
         * @param IContextSource $context
         * @param null $group Unused
index bd7457e..997d983 100644 (file)
@@ -220,7 +220,7 @@ class LoginForm extends SpecialPage {
                }
        }
 
-       /*
+       /**
         * @param string|null $subPage
         */
        public function execute( $subPage ) {
index 4d74a2d..5de543e 100644 (file)
@@ -171,6 +171,7 @@ abstract class UploadBase {
                        return null;
                }
 
+               /** @var UploadBase $handler */
                $handler = new $className;
 
                $handler->initializeFromRequest( $request );
@@ -882,7 +883,7 @@ abstract class UploadBase {
        /**
         * Return the local file and initializes if necessary.
         *
-        * @return LocalFile|null
+        * @return LocalFile|UploadStashFile|null
         */
        public function getLocalFile() {
                if ( is_null( $this->mLocalFile ) ) {
@@ -1498,7 +1499,7 @@ abstract class UploadBase {
 
        /**
         * Divide the element name passed by the xml parser to the callback into URI and prifix.
-        * @param string $name
+        * @param string $element
         * @return array Containing the namespace URI and prefix
         */
        private static function splitXmlNamespace( $element ) {
@@ -1884,7 +1885,7 @@ abstract class UploadBase {
         * Get the current status of a chunked upload (used for polling).
         * The status will be read from the *current* user session.
         * @param string $statusKey
-        * @return array|bool
+        * @return Status[]|bool
         */
        public static function getSessionStatus( $statusKey ) {
                return isset( $_SESSION[self::SESSION_STATUS_KEY][$statusKey] )
index bea7128..d86de79 100644 (file)
@@ -32,6 +32,8 @@ class UploadFromChunks extends UploadFromFile {
        protected $mChunkIndex;
        protected $mFileKey;
        protected $mVirtualTempPath;
+       /** @var LocalRepo */
+       private $repo;
 
        /**
         * Setup local pointers to stash, repo and user (similar to UploadFromStash)
index 8610386..6c53249 100644 (file)
@@ -257,8 +257,8 @@ class MWCryptHKDF {
         * and the SKM (source key material) is the "data".
         *
         * @param string $hash The hashing function to use (e.g., sha256)
-        * @param string $ikm The input keying material
         * @param string $salt The salt to add to the ikm, to get the prk
+        * @param string $ikm The input keying material
         * @return string Binary string (pseudorandm key) used as input to HKDFExpand
         */
        private static function HKDFExtract( $hash, $salt, $ikm ) {
index 604d381..dffe242 100644 (file)
@@ -117,7 +117,7 @@ class UIDGenerator {
        }
 
        /**
-        * @param array $time (UIDGenerator::millitime(), clock sequence)
+        * @param array $info (UIDGenerator::millitime(), clock sequence)
         * @return string 88 bits
         */
        protected function getTimestampedID88( array $info ) {
index 99dc184..5b10f0f 100644 (file)
@@ -345,7 +345,7 @@ class Language {
        /**
         * Returns true if a language code is an IETF tag known to MediaWiki.
         *
-        * @param string $code
+        * @param string $tag
         *
         * @since 1.21
         * @return bool
@@ -3808,8 +3808,8 @@ class Language {
         * Checks that convertPlural was given an array and pads it to requested
         * amount of forms by copying the last one.
         *
-        * @param int $count How many forms should there be at least
         * @param array $forms Array of forms given to convertPlural
+        * @param int $count How many forms should there be at least
         * @return array Padded array of forms or an exception if not an array
         */
        protected function preConvertPlural( /* Array */ $forms, $count ) {
index ea86e88..cbc389b 100644 (file)
@@ -186,8 +186,8 @@ class NamespaceConflictChecker extends Maintenance {
 
        /**
         * @todo Do this for real
-        * @param int $ns
-        * @param string $name
+        * @param int $key
+        * @param string $prefix
         * @param bool $fix
         * @param string $suffix
         * @return bool
index 0272c54..3c255b5 100644 (file)
@@ -22,7 +22,7 @@ class ImagePageTest extends MediaWikiMediaTestCase {
 
        /**
         * @dataProvider providerGetDisplayWidthHeight
-        * @param array $dimensions Array [maxWidth, maxHeight, width, height]
+        * @param array $dim Array [maxWidth, maxHeight, width, height]
         * @param array $expected Array [width, height] The width and height we expect to display at
         */
        function testGetDisplayWidthHeight( $dim, $expected ) {
index 1ac9b9d..19c0a7d 100644 (file)
@@ -39,8 +39,8 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                                'logout',
                                'action',
                                'ApiLogout',
-                               function( ApiMain $main, $action ) {
-                                               return new ApiLogout( $main, $action );
+                               function ( ApiMain $main, $action ) {
+                                       return new ApiLogout( $main, $action );
                                },
                        ),
                );
@@ -80,7 +80,7 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                                        ),
                                        'logout' => array(
                                                'class' => 'ApiLogout',
-                                               'factory' => function( ApiMain $main, $action ) {
+                                               'factory' => function ( ApiMain $main, $action ) {
                                                        return new ApiLogout( $main, $action );
                                                },
                                        ),
@@ -113,9 +113,9 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                        ),
                        'logout' => array(
                                'class' => 'ApiLogout',
-                               'factory' => function( ApiMain $main, $action ) {
-                                               return new ApiLogout( $main, $action );
-                                       },
+                               'factory' => function ( ApiMain $main, $action ) {
+                                       return new ApiLogout( $main, $action );
+                               },
                        ),
                );
 
index 6f4479b..d986e69 100644 (file)
@@ -37,7 +37,7 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
         * @param array $params Api parameters
         * @param int $expectedCount Max number of iterations
         * @param string $id Unit test id
-        * @param bool $useContinue True to use smart continue
+        * @param bool $continue True to use smart continue
         * @return Merged results data array
         */
        protected function checkC( $expected, $params, $expectedCount, $id, $continue = true ) {
index 7b686a3..bba22c7 100644 (file)
@@ -96,7 +96,7 @@ class ApiQueryTest extends ApiTestCase {
         * @param string $titlePart
         * @param int $namespace
         * @param string $expected
-        * @param string $description
+        * @param string $expectException
         * @dataProvider provideTestTitlePartToKey
         */
        function testTitlePartToKey( $titlePart, $namespace, $expected, $expectException ) {
index ec74574..acfdc0e 100644 (file)
@@ -27,7 +27,7 @@ class JSONContentTest extends MediaWikiLangTestCase {
         * @dataProvider provideDataToEncode
         */
        public function testBeautifyUsesFormatJson( $data ) {
-               $obj = new JSONContent( FormatJson::encode( $data) );
+               $obj = new JSONContent( FormatJson::encode( $data ) );
                $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
        }
 
@@ -46,7 +46,7 @@ class JSONContentTest extends MediaWikiLangTestCase {
         */
        public function testPreSaveTransform( $data ) {
                $obj = new JSONContent( FormatJson::encode( $data ) );
-               $newObj = $obj->preSaveTransform( $this->getMockTitle(), $this->getMockUser() , $this->getMockParserOptions() );
+               $newObj = $obj->preSaveTransform( $this->getMockTitle(), $this->getMockUser(), $this->getMockParserOptions() );
                $this->assertTrue( $newObj->equals( new JSONContent( FormatJson::encode( $data, true ) ) ) );
        }
 
@@ -112,5 +112,4 @@ class JSONContentTest extends MediaWikiLangTestCase {
                        ),
                );
        }
-
-}
\ No newline at end of file
+}
index 9b6391c..5b2de15 100644 (file)
@@ -17,7 +17,7 @@ class XCFHandlerTest extends MediaWikiMediaTestCase {
        /**
         * @param string $filename
         * @param int $expectedWidth Width
-        * @param int $expectedHeigh Height
+        * @param int $expectedHeight Height
         * @dataProvider provideGetImageSize
         * @covers XCFHandler::getImageSize
         */
index e98f0e8..038a0e1 100644 (file)
@@ -5,9 +5,9 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $this->setMwGlobals( array(
-                       'wgValidSkinNames' => array( 'vector' => 'Vector' ),
-               );
+               // The return value of the closure shouldn't matter since this test should
+               // never call it
+               SkinFactory::getDefaultInstance()->register( 'vector', 'Vector', function(){});
        }
 
        /**
index 4497cba..7b7c7f8 100644 (file)
@@ -7,7 +7,7 @@ class SkinFactoryTest extends MediaWikiTestCase {
         */
        public function testRegister() {
                $factory = new SkinFactory();
-               $factory->register( 'fallback', 'Fallback', function() {
+               $factory->register( 'fallback', 'Fallback', function () {
                        return new SkinFallback();
                } );
                $this->assertTrue( true ); // No exception thrown
index dad30b7..45d5ea8 100644 (file)
@@ -30,7 +30,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         *
         * @param Page $page Page to add the revision to
         * @param string $text Revisions text
-        * @param string $text Revisions summare
+        * @param string $summary Revisions summare
         *
         * @throws MWException
         */
@@ -181,7 +181,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         * Asserts that the xml reader is at the final closing tag of an xml file and
         * closes the reader.
         *
-        * @param string $tag (optional) the name of the final tag
+        * @param string $name (optional) the name of the final tag
         *   (e.g.: "mediawiki" for </mediawiki>)
         */
        protected function assertDumpEnd( $name = "mediawiki" ) {
@@ -304,9 +304,9 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
         * @param string $text_sha1 The base36 SHA-1 of the revision's text
         * @param string|bool $text (optional) The revision's string, or false to check for a
         *            revision stub
+        * @param int|bool $parentid (optional) id of the parent revision
         * @param string $model The expected content model id (default: CONTENT_MODEL_WIKITEXT)
         * @param string $format The expected format model id (default: CONTENT_FORMAT_WIKITEXT)
-        * @param int|bool $parentid (optional) id of the parent revision
         */
        protected function assertRevision( $id, $summary, $text_id, $text_bytes,
                $text_sha1, $text = false, $parentid = false,
index 1ad4656..b2141d3 100644 (file)
@@ -100,7 +100,7 @@ class FetchTextTest extends MediaWikiTestCase {
         *
         * @param WikiPage $page The page to add the revision to
         * @param string $text The revisions text
-        * @param string $text The revisions summare
+        * @param string $summary The revisions summare
         *
         * @throws MWException
         */
index 717c5f3..d6609f4 100644 (file)
@@ -570,7 +570,7 @@ class TestFileIterator implements Iterator {
         * Throw an exception if it is not set, referencing current section
         * and adding the current file name and line number
         *
-        * @param string|array $token Expected token(s) that should have been
+        * @param string|array $tokens Expected token(s) that should have been
         * mentioned before closing this section
         * @param bool $fatal True iff an exception should be thrown if
         * the section is not found.
@@ -702,7 +702,7 @@ class DelayedParserTest {
        /**
         * Similar to ParserTest object but does not run anything
         * Use unleash() to really execute the hook function
-        * @param string $fnHook
+        * @param string $hook
         */
        public function requireTransparentHook( $hook ) {
                $this->transparentHooks[] = $hook;
index efaa65b..d8ed246 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -553,7 +553,7 @@ function wfExtractThumbRequestInfo( $thumbRel ) {
  * file handler.
  *
  * @param File $file File object for file in question
- * @param array $param Array of parameters so far
+ * @param array $params Array of parameters so far
  * @return array Parameters array with more parameters
  */
 function wfExtractThumbParams( $file, $params ) {