Merge "setGroup doesn't return anything, so don't try and return its value"
authorAaron Schulz <aschulz@wikimedia.org>
Sun, 8 Apr 2012 05:57:02 +0000 (05:57 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 8 Apr 2012 05:57:02 +0000 (05:57 +0000)
25 files changed:
RELEASE-NOTES-1.20
includes/Action.php
includes/Export.php
includes/GlobalFunctions.php
includes/StringUtils.php
includes/WebRequest.php
includes/api/ApiEditPage.php
includes/api/ApiProtect.php
includes/filerepo/file/LocalFile.php
includes/media/IPTC.php
includes/specials/SpecialVersion.php
languages/Language.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/messages/MessagesEn.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesLad.php
languages/messages/MessagesMwl.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesTe.php
maintenance/backup.inc
maintenance/backupTextPass.inc
maintenance/storage/checkStorage.php

index c6b2756..92e8367 100644 (file)
@@ -84,6 +84,7 @@ production.
 * (bug 32384) Allow descending order for list=watchlistraw.
 * (bug 31883) Limit of bkusers of list=blocks and titles of action=query is not documented in API help.
 * (bug 32492) API now allows editing using pageid
+* (bug 32497) API now allows changing of protection level using pageid
 
 === Languages updated in 1.20 ===
 
index 84c0f80..a25e8aa 100644 (file)
@@ -266,6 +266,7 @@ abstract class Action {
         *
         * @param $user User: the user to check, or null to use the context user
         * @throws ErrorPageError
+        * @return bool True on success
         */
        protected function checkCanExecute( User $user ) {
                $right = $this->getRestriction();
@@ -287,6 +288,7 @@ abstract class Action {
                if ( $this->requiresWrite() && wfReadOnly() ) {
                        throw new ReadOnlyError();
                }
+               return true;
        }
 
        /**
index 24daa09..48fbc47 100644 (file)
@@ -910,7 +910,7 @@ class DumpFileOutput extends DumpOutput {
  */
 class DumpPipeOutput extends DumpFileOutput {
        protected $command, $filename;
-       private $procOpenResource = false;
+       protected $procOpenResource = false;
 
        function __construct( $command, $file = null ) {
                if ( !is_null( $file ) ) {
index 517f70d..7237b53 100644 (file)
@@ -3603,7 +3603,7 @@ function wfFindFile( $title, $options = array() ) {
  * Returns a valid placeholder object if the file does not exist.
  *
  * @param $title Title|String
- * @return File|null A File, or null if passed an invalid Title
+ * @return LocalFile|null A File, or null if passed an invalid Title
  */
 function wfLocalFile( $title ) {
        return RepoGroup::singleton()->getLocalRepo()->newFile( $title );
index f20c548..582c6cd 100644 (file)
@@ -54,6 +54,7 @@ class StringUtils {
         * @param $callback Callback: function to call on each match
         * @param $subject String
         * @param $flags String: regular expression flags
+        * @throws MWException
         * @return string
         */
        static function delimiterReplaceCallback( $startDelim, $endDelim, $callback, $subject, $flags = '' ) {
@@ -207,6 +208,10 @@ class StringUtils {
  * StringUtils::delimiterReplaceCallback()
  */
 class Replacer {
+
+       /**
+        * @return array
+        */
        function cb() {
                return array( &$this, 'replace' );
        }
@@ -217,10 +222,18 @@ class Replacer {
  */
 class RegexlikeReplacer extends Replacer {
        var $r;
+
+       /**
+        * @param $r string
+        */
        function __construct( $r ) {
                $this->r = $r;
        }
 
+       /**
+        * @param $matches array
+        * @return string
+        */
        function replace( $matches ) {
                $pairs = array();
                foreach ( $matches as $i => $match ) {
@@ -235,12 +248,22 @@ class RegexlikeReplacer extends Replacer {
  * Class to perform secondary replacement within each replacement string
  */
 class DoubleReplacer extends Replacer {
+
+       /**
+        * @param $from
+        * @param $to
+        * @param $index int
+        */
        function __construct( $from, $to, $index = 0 ) {
                $this->from = $from;
                $this->to = $to;
                $this->index = $index;
        }
 
+       /**
+        * @param $matches array
+        * @return mixed
+        */
        function replace( $matches ) {
                return str_replace( $this->from, $this->to, $matches[$this->index] );
        }
@@ -252,11 +275,19 @@ class DoubleReplacer extends Replacer {
 class HashtableReplacer extends Replacer {
        var $table, $index;
 
+       /**
+        * @param $table
+        * @param $index int
+        */
        function __construct( $table, $index = 0 ) {
                $this->table = $table;
                $this->index = $index;
        }
 
+       /**
+        * @param $matches array
+        * @return mixed
+        */
        function replace( $matches ) {
                return $this->table[$matches[$this->index]];
        }
@@ -273,11 +304,15 @@ class ReplacementArray {
        /**
         * Create an object with the specified replacement array
         * The array should have the same form as the replacement array for strtr()
+        * @param array $data
         */
        function __construct( $data = array() ) {
                $this->data = $data;
        }
 
+       /**
+        * @return array
+        */
        function __sleep() {
                return array( 'data' );
        }
@@ -294,39 +329,61 @@ class ReplacementArray {
                $this->fss = false;
        }
 
+       /**
+        * @return array|bool
+        */
        function getArray() {
                return $this->data;
        }
 
        /**
         * Set an element of the replacement array
+        * @param $from string
+        * @param $to stromg
         */
        function setPair( $from, $to ) {
                $this->data[$from] = $to;
                $this->fss = false;
        }
 
+       /**
+        * @param $data array
+        */
        function mergeArray( $data ) {
                $this->data = array_merge( $this->data, $data );
                $this->fss = false;
        }
 
+       /**
+        * @param $other
+        */
        function merge( $other ) {
                $this->data = array_merge( $this->data, $other->data );
                $this->fss = false;
        }
 
+       /**
+        * @param $from string
+        */
        function removePair( $from ) {
                unset($this->data[$from]);
                $this->fss = false;
        }
 
+       /**
+        * @param $data array
+        */
        function removeArray( $data ) {
-               foreach( $data as $from => $to )
+               foreach( $data as $from => $to ) {
                        $this->removePair( $from );
+               }
                $this->fss = false;
        }
 
+       /**
+        * @param $subject string
+        * @return string
+        */
        function replace( $subject ) {
                if ( function_exists( 'fss_prep_replace' ) ) {
                        wfProfileIn( __METHOD__.'-fss' );
@@ -369,8 +426,10 @@ class ExplodeIterator implements Iterator {
        // The current token
        var $current;
 
-       /** 
+       /**
         * Construct a DelimIterator
+        * @param $delim string
+        * @param $s string
         */
        function __construct( $delim, $s ) {
                $this->subject = $s;
@@ -389,7 +448,6 @@ class ExplodeIterator implements Iterator {
                $this->refreshCurrent();
        }
 
-
        function refreshCurrent() {
                if ( $this->curPos === false ) {
                        $this->current = false;
@@ -410,6 +468,9 @@ class ExplodeIterator implements Iterator {
                return $this->curPos;
        }
 
+       /**
+        * @return string
+        */
        function next() {
                if ( $this->endPos === false ) {
                        $this->curPos = false;
@@ -425,8 +486,10 @@ class ExplodeIterator implements Iterator {
                return $this->current;
        }
 
+       /**
+        * @return bool
+        */
        function valid() {
                return $this->curPos !== false;
        }
 }
-
index 81f42dc..9d0e579 100644 (file)
@@ -1383,7 +1383,7 @@ class DerivativeRequest extends FauxRequest {
        }
 
        public function setSessionData( $key, $data ) {
-               return $this->base->setSessionData( $key, $data );
+               $this->base->setSessionData( $key, $data );
        }
 
        public function getAcceptLang() {
index 229afde..796b049 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?php
 /**
  *
  *
@@ -381,7 +381,7 @@ class ApiEditPage extends ApiBase {
                global $wgMaxArticleSize;
 
                return array_merge( parent::getPossibleErrors(),
-                       $this->getRequireOnlyOneParameterErrorMessages( 'title', 'pageid' ),
+                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
                        array(
                                array( 'nosuchpageid', 'pageid' ),
                                array( 'missingtext' ),
@@ -479,7 +479,7 @@ class ApiEditPage extends ApiBase {
                $p = $this->getModulePrefix();
                return array(
                        'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title,
+                       'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
                        'section' => 'Section number. 0 for the top section, \'new\' for a new section',
                        'sectiontitle' => 'The title for a new section',
                        'text' => 'Page content',
index fb225d8..ec7b560 100644 (file)
@@ -37,9 +37,18 @@ class ApiProtect extends ApiBase {
                global $wgRestrictionLevels;
                $params = $this->extractRequestParams();
 
-               $titleObj = Title::newFromText( $params['title'] );
-               if ( !$titleObj ) {
-                       $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+               $this->requireOnlyOneParameter( $params, 'title', 'pageid' );
+
+               if ( isset( $params['title'] ) ) {
+                       $titleObj = Title::newFromText( $params['title'] );
+                       if ( !$titleObj ) {
+                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+                       }
+               } elseif ( isset( $params['pageid'] ) ) {
+                       $titleObj = Title::newFromID( $params['pageid'] );
+                       if ( !$titleObj ) {
+                               $this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
+                       }
                }
 
                $errors = $titleObj->getUserPermissionsErrors( 'protect', $this->getUser() );
@@ -138,7 +147,9 @@ class ApiProtect extends ApiBase {
                return array(
                        'title' => array(
                                ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'pageid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'token' => null,
                        'protections' => array(
@@ -169,8 +180,10 @@ class ApiProtect extends ApiBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'title' => 'Title of the page you want to (un)protect',
+                       'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
+                       'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
                        'token' => 'A protect token previously retrieved through prop=info',
                        'protections' => 'Pipe-separated list of protection levels, formatted action=group (e.g. edit=sysop)',
                        'expiry' => array( 'Expiry timestamps. If only one timestamp is set, it\'ll be used for all protections.',
@@ -188,16 +201,20 @@ class ApiProtect extends ApiBase {
        }
 
        public function getPossibleErrors() {
-               return array_merge( parent::getPossibleErrors(), array(
-                       array( 'invalidtitle', 'title' ),
-                       array( 'toofewexpiries', 'noofexpiries', 'noofprotections' ),
-                       array( 'create-titleexists' ),
-                       array( 'missingtitle-createonly' ),
-                       array( 'protect-invalidaction', 'action' ),
-                       array( 'protect-invalidlevel', 'level' ),
-                       array( 'invalidexpiry', 'expiry' ),
-                       array( 'pastexpiry', 'expiry' ),
-               ) );
+               return array_merge( parent::getPossibleErrors(),
+                       $this->getRequireOnlyOneParameterErrorMessages( array( 'title', 'pageid' ) ),
+                       array(
+                               array( 'invalidtitle', 'title' ),
+                               array( 'nosuchpageid', 'pageid' ),
+                               array( 'toofewexpiries', 'noofexpiries', 'noofprotections' ),
+                               array( 'create-titleexists' ),
+                               array( 'missingtitle-createonly' ),
+                               array( 'protect-invalidaction', 'action' ),
+                               array( 'protect-invalidlevel', 'level' ),
+                               array( 'invalidexpiry', 'expiry' ),
+                               array( 'pastexpiry', 'expiry' ),
+                       )
+               );
        }
 
        public function needsToken() {
index 40ee0fa..04d7a47 100644 (file)
@@ -60,6 +60,11 @@ class LocalFile extends File {
 
        /**#@-*/
 
+       /**
+        * @var LocalRepo
+        */
+       var $repo;
+
        protected $repoClass = 'LocalRepo';
 
        /**
@@ -1653,7 +1658,7 @@ class LocalFileDeleteBatch {
                                        'fa_deleted_user'      => $encUserId,
                                        'fa_deleted_timestamp' => $encTimestamp,
                                        'fa_deleted_reason'    => $encReason,
-                                       'fa_deleted'               => $this->suppress ? $bitfield : 'oi_deleted',
+                                       'fa_deleted'           => $this->suppress ? $bitfield : 'oi_deleted',
 
                                        'fa_name'         => 'oi_name',
                                        'fa_archive_name' => 'oi_archive_name',
@@ -1669,7 +1674,6 @@ class LocalFileDeleteBatch {
                                        'fa_user'         => 'oi_user',
                                        'fa_user_text'    => 'oi_user_text',
                                        'fa_timestamp'    => 'oi_timestamp',
-                                       'fa_deleted'      => $bitfield
                                ), $where, __METHOD__ );
                }
        }
index 1d19791..666ce40 100644 (file)
@@ -395,10 +395,10 @@ class IPTC {
 
        /**
        * Helper function to convert charset for iptc values.
-       * @param $data Mixed String or Array: The iptc string
+       * @param $data string|array The iptc string
        * @param $charset String: The charset
         *
-        * @return string
+        * @return string|array
        */
        private static function convIPTC ( $data, $charset ) {
                if ( is_array( $data ) ) {
index 777af41..2e2b003 100644 (file)
@@ -194,12 +194,16 @@ class SpecialVersion extends SpecialPage {
                global $wgVersion;
                wfProfileIn( __METHOD__ );
 
-               if( $gitVersion = self::getVersionLinkedGit() ) {
+               $gitVersion = self::getVersionLinkedGit();
+               if( $gitVersion ) {
                        $v = $gitVersion;
-               } elseif( $svnVersion = self::getVersionLinkedSvn() ) {
-                       $v = $svnVersion;
                } else {
-                       $v = $wgVersion; // fallback
+                       $svnVersion = self::getVersionLinkedSvn();
+                       if( $svnVersion ) {
+                               $v = $svnVersion;
+                       } else {
+                               $v = $wgVersion; // fallback
+                       }
                }
 
                wfProfileOut( __METHOD__ );
@@ -207,7 +211,7 @@ class SpecialVersion extends SpecialPage {
        }
 
        /**
-        * @return string wgVersion + a link to subversion revision of svn BASE 
+        * @return string wgVersion + a link to subversion revision of svn BASE
         */
        private static function getVersionLinkedSvn() {
                global $wgVersion, $IP;
index 1ef5a74..8db7e84 100644 (file)
@@ -556,7 +556,6 @@ class Language {
         */
        function getVariantname( $code, $usemsg = true ) {
                $msg = "variantname-$code";
-               list( $rootCode ) = explode( '-', $code );
                if ( $usemsg && wfMessage( $msg )->exists() ) {
                        return $this->getMessageFromDB( $msg );
                }
index 953a3f9..c2a3d24 100644 (file)
@@ -113,7 +113,7 @@ class KkConverter extends LanguageConverter {
                        # # Punctuation
                        '/#|No\./' => '№',
                        # # Şç
-                       '/ŞÇʹ/u' => 'ЩЬ', '/Şçʹ/u' => 'Щь', '/Şçʹ/u' => 'Щь',
+                       '/ŞÇʹ/u' => 'ЩЬ', '/Şçʹ/u' => 'Щь',
                        '/Ş[Çç]/u' => 'Щ', '/şç/u' => 'щ',
                        # # soft and hard signs
                        '/([' . KK_L_UC . '])ʺ([' . KK_L_UC . '])/u' => '$1Ъ$2',
index 8f8ea31..81bf6ee 100644 (file)
@@ -55,8 +55,7 @@ class KuConverter extends LanguageConverter {
                'h' => 'ه', 'j' => 'ژ', 'k' => 'ک', 'l' => 'ل',
                'm' => 'م', 'n' => 'ن', 'p' => 'پ', 'q' => 'ق', 'r' => 'ر', 's' => 'س', 'ş' => 'ش',
                't' => 'ت', 'v' => 'ڤ',
-                'x' => 'خ', 'y' => 'ی', 'z' => 'ز',
-
+               'x' => 'خ', 'y' => 'ی', 'z' => 'ز',
 
                'B' => 'ب', 'C' => 'ج', 'Ç' => 'چ', 'D' => 'د', 'F' => 'ف', 'G' => 'گ', 'H' => 'ھ',
                'H' => 'ہ', 'H' => 'ه', 'H' => 'ح', 'J' => 'ژ', 'K' => 'ك', 'K' => 'ک', 'L' => 'ل',
index 8006df5..62065dd 100644 (file)
@@ -1039,9 +1039,6 @@ $2',
 'ns-specialprotected'  => 'Special pages cannot be edited.',
 'titleprotected'       => 'This title has been protected from creation by [[User:$1|$1]].
 The reason given is "\'\'$2\'\'".',
-'filereadonlyerror'    => 'Unable to modify the file "$1" because the file repository "$2" is in read-only mode.
-
-The reason given is "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Bad configuration: Unknown virus scanner: ''$1''",
index 415f226..9e3f92a 100644 (file)
@@ -91,10 +91,6 @@ $namespaceAliases = array(
        '$1_تالقىلاۋى'        => NS_PROJECT_TALK,
        'سۋرەت'              => NS_FILE,
        'سۋرەت_تالقىلاۋى'    => NS_FILE_TALK,
-       'مەدياۋيكي'           => NS_MEDIAWIKI,
-       'مەدياۋيكي_تالقىلاۋى' => NS_MEDIAWIKI_TALK,
-       'ٷلگٸ'              => NS_TEMPLATE,
-       'ٷلگٸ_تالقىلاۋى'    => NS_TEMPLATE_TALK,
        'انىقتاما'            => NS_HELP,
        'انىقتاما_تالقىلاۋى'  => NS_HELP_TALK,
        'سانات'              => NS_CATEGORY,
index dcdf756..24aa511 100644 (file)
@@ -92,10 +92,6 @@ $namespaceAliases = array(
        '$1_تالقىلاۋى'        => NS_PROJECT_TALK,
        'سۋرەت'              => NS_FILE,
        'سۋرەت_تالقىلاۋى'    => NS_FILE_TALK,
-       'مەدياۋيكي'           => NS_MEDIAWIKI,
-       'مەدياۋيكي_تالقىلاۋى' => NS_MEDIAWIKI_TALK,
-       'ٷلگٸ'              => NS_TEMPLATE,
-       'ٷلگٸ_تالقىلاۋى'    => NS_TEMPLATE_TALK,
        'انىقتاما'            => NS_HELP,
        'انىقتاما_تالقىلاۋى'  => NS_HELP_TALK,
        'سانات'              => NS_CATEGORY,
index 603914a..02b26f5 100644 (file)
@@ -47,7 +47,6 @@ $namespaceAliases = array(
        'Cows_Restren'       => NS_FILE_TALK,
        'Keskows_Restren'    => NS_FILE_TALK,
        'Cows_MediaWiki'     => NS_MEDIAWIKI_TALK,
-       'Cows_MediaWiki'     => NS_MEDIAWIKI_TALK,
        'Keskows_MediaWiki'  => NS_MEDIAWIKI_TALK,
        'Cows_Scantlyn'      => NS_TEMPLATE_TALK,
        'Skantlyn'           => NS_TEMPLATE,
index cbc3b9b..884162e 100644 (file)
@@ -63,7 +63,6 @@ $namespaceAliases = array(
        'Diskussión_de_Xabblón'    => NS_MEDIAWIKI_TALK,
        'Xabblón'                  => NS_TEMPLATE,
        'Diskusyón_de_Xabblón'     => NS_TEMPLATE_TALK,
-       'Plantilla_Discusión'      => NS_TEMPLATE_TALK,
        'Diskussión_de_Ayudo'      => NS_HELP_TALK,
        'Kateggoría'               => NS_CATEGORY,
        'Diskussión_de_Kateggoría' => NS_CATEGORY_TALK,
index 2fc9aba..990892b 100644 (file)
@@ -44,7 +44,7 @@ $namespaceAliases = array(
        '$1_Discussão' => NS_PROJECT_TALK,
        'Ficheiro' => NS_FILE,
        'Ficheiro_Discussão' => NS_FILE_TALK,
-       'Imagem_Discussão' => NS_FILE,
+       'Imagem' => NS_FILE,
        'Imagem_Discussão' => NS_FILE_TALK,
        'MediaWiki_Discussão' => NS_MEDIAWIKI_TALK,
        'Predefinição' => NS_TEMPLATE,
index 4b8dd80..73e87c9 100644 (file)
@@ -50,7 +50,6 @@ $namespaceAliases = array(
        'Categorie'          => NS_CATEGORY,
        'Overleg_categorie'  => NS_CATEGORY_TALK,
        'Kattegerie'         => NS_CATEGORY,
-       'Overleg_categorie'  => NS_CATEGORY_TALK,
        'Overleg_kattegerie' => NS_HELP_TALK,
 );
 
index 54ecae8..68af6ea 100644 (file)
@@ -53,7 +53,6 @@ $namespaceAliases = array(
        'బొమ్మపై_చర్చ' => NS_FILE_TALK,
        'ఫైలు' => NS_FILE,
        'ఫైలుపై_చర్చ' => NS_FILE_TALK,
-       'బొమ్మపై_చర్చ' => NS_FILE_TALK,
        'సహాయము' => NS_HELP,
        'సహాయము_చర్చ' => NS_HELP_TALK,
 );
index 6eccb26..04c65ba 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup Dump Maintenance
  */
 class DumpDBZip2Output extends DumpPipeOutput {
-       function DumpDBZip2Output( $file ) {
+       function __construct( $file ) {
                parent::__construct( "dbzip2", $file );
        }
 }
index 2b533ec..6752166 100644 (file)
@@ -43,9 +43,25 @@ class TextPassDumper extends BackupDumper {
 
        var $php = "php";
        var $spawn = false;
+
+       /**
+        * @var bool|resource
+        */
        var $spawnProc = false;
+
+       /**
+        * @var bool|resource
+        */
        var $spawnWrite = false;
+
+       /**
+        * @var bool|resource
+        */
        var $spawnRead = false;
+
+       /**
+        * @var bool|resource
+        */
        var $spawnErr = false;
 
        var $xmlwriterobj = false;
index af1f9ee..5887a75 100644 (file)
@@ -381,8 +381,8 @@ class CheckStorage {
                        $extDb->freeResult( $res );
 
                        // Print errors for missing blobs rows
-                       foreach ( $oldIds as $blobId => $oldIds ) {
-                               $this->error( 'restore text', "Error: missing target $cluster/$blobId for two-part ES URL", $oldIds );
+                       foreach ( $oldIds as $blobId => $oldIds2 ) {
+                               $this->error( 'restore text', "Error: missing target $cluster/$blobId for two-part ES URL", $oldIds2 );
                        }
                }
        }