API: Added help text message that specifies whether a module is POST-only
[lhc/web/wiklou.git] / includes / api / ApiBase.php
index d690603..4295046 100644 (file)
@@ -186,6 +186,9 @@ abstract class ApiBase {
                                );
                        $msg = $lnPrfx . implode($lnPrfx, $msg) . "\n";
 
+                       if ($this->mustBePosted())
+                               $msg .= "\nThis module only accepts POST requests.\n";
+
                        // Parameters
                        $paramsMsg = $this->makeHelpMsgParameters();
                        if ($paramsMsg !== false) {
@@ -452,7 +455,7 @@ abstract class ApiBase {
                                                if( $value == 'max' ) {
                                                        if( $parseMaxLimit ) {
                                                                $value = $this->getMain()->canApiHighLimits() ? $paramSettings[self :: PARAM_MAX2] : $paramSettings[self :: PARAM_MAX];
-                                                               $this->getResult()->addValue( 'limits', 'limit', $value );
+                                                               $this->getResult()->addValue( 'limits', $this->getModuleName(), $value );
                                                                $this->validateLimit($paramName, $value, $min, $paramSettings[self :: PARAM_MAX], $paramSettings[self :: PARAM_MAX2]);
                                                        }
                                                }
@@ -503,6 +506,8 @@ abstract class ApiBase {
        * @return (allowMultiple ? an_array_of_values : a_single_value) 
        */
        protected function parseMultiValue($valueName, $value, $allowMultiple, $allowedValues) {
+               if( trim($value) === "" )
+                       return array();
                $valuesList = explode('|', $value);
                if (!$allowMultiple && count($valuesList) != 1) {
                        $possibleValues = is_array($allowedValues) ? "of '" . implode("', '", $allowedValues) . "'" : '';
@@ -556,6 +561,7 @@ abstract class ApiBase {
        public static $messageMap = array(
                // This one MUST be present, or dieUsageMsg() will recurse infinitely
                'unknownerror' => array('code' => 'unknownerror', 'info' => "Unknown error: ``\$1''"),
+               'unknownerror-nocode' => array('code' => 'unknownerror', 'info' => 'Unknown error'),
                
                // Messages from Title::getUserPermissionsErrors()
                'ns-specialprotected' => array('code' => 'unsupportednamespace', 'info' => "Pages in the Special namespace can't be edited"),
@@ -574,22 +580,51 @@ abstract class ApiBase {
                'nocreatetext' => array('code' => 'cantcreate-anon', 'info' => "Anonymous users can't create new pages"),
                'movenologintext' => array('code' => 'cantmove-anon', 'info' => "Anonymous users can't move pages"),
                'movenotallowed' => array('code' => 'cantmove', 'info' => "You don't have permission to move pages"),
+               'confirmedittext' => array('code' => 'confirmemail', 'info' => "You must confirm your e-mail address before you can edit"),
+               'blockedtext' => array('code' => 'blocked', 'info' => "You have been blocked from editing"),
+               'autoblockedtext' => array('code' => 'autoblocked', 'info' => "Your IP address has been blocked automatically, because it was used by a blocked user"),
                
                // Miscellaneous interface messages
+               'actionthrottledtext' => array('code' => 'ratelimited', 'info' => "You've exceeded your rate limit. Please wait some time and try again"),
                'alreadyrolled' => array('code' => 'alreadyrolled', 'info' => "The page you tried to rollback was already rolled back"),
                'cantrollback' => array('code' => 'onlyauthor', 'info' => "The page you tried to rollback only has one author"), 
-               'blocked' => array('code' => 'blocked', 'info' => "You have been blocked from editing"),
                'readonlytext' => array('code' => 'readonly', 'info' => "The wiki is currently in read-only mode"),
                'sessionfailure' => array('code' => 'badtoken', 'info' => "Invalid token"),
                'cannotdelete' => array('code' => 'cantdelete', 'info' => "Couldn't delete ``\$1''. Maybe it was deleted already by someone else"),
                'notanarticle' => array('code' => 'missingtitle', 'info' => "The page you requested doesn't exist"),
+               'selfmove' => array('code' => 'selfmove', 'info' => "Can't move a page to itself"),
+               'immobile_namespace' => array('code' => 'immobilenamespace', 'info' => "You tried to move pages from or to a namespace that is protected from moving"),
+               'articleexists' => array('code' => 'articleexists', 'info' => "The destination article already exists and is not a redirect to the source article"),
+               'protectedpage' => array('code' => 'protectedpage', 'info' => "You don't have permission to perform this move"),
+               'hookaborted' => array('code' => 'hookaborted', 'info' => "The modification you tried to make was aborted by an extension hook"),
+               'cantmove-titleprotected' => array('code' => 'protectedtitle', 'info' => "The destination article has been protected from creation"),
+               // 'badarticleerror' => shouldn't happen
+               // 'badtitletext' => shouldn't happen
+               'ip_range_invalid' => array('code' => 'invalidrange', 'info' => "Invalid IP range"),
+               'range_block_disabled' => array('code' => 'rangedisabled', 'info' => "Blocking IP ranges has been disabled"),
+               'nosuchusershort' => array('code' => 'nosuchuser', 'info' => "The user you specified doesn't exist"),
+               'badipaddress' => array('code' => 'invalidip', 'info' => "Invalid IP address specified"),
+               'ipb_expiry_invalid' => array('code' => 'invalidexpiry', 'info' => "Invalid expiry time"),
+               'ipb_already_blocked' => array('code' => 'alreadyblocked', 'info' => "The user you tried to block was already blocked"),
+               'ipb_blocked_as_range' => array('code' => 'blockedasrange', 'info' => "IP address ``\$1'' was blocked as part of range ``\$2''. You can't unblock the IP invidually, but you can unblock the range as a whole."),
+               'ipb_cant_unblock' => array('code' => 'cantunblock', 'info' => "The block you specified was not found. It may have been unblocked already"),
                
                // API-specific messages
-               'notitle' => array('code' => 'notitle', 'info' => "The title parameter must be set"),
-               'notoken' => array('code' => 'notoken', 'info' => "The token parameter must be set"),
-               'nouser' => array('code' => 'nouser', 'info' => "The user parameter must be set"),
+               'missingparam' => array('code' => 'no$1', 'info' => "The \$1 parameter must be set"),
                'invalidtitle' => array('code' => 'invalidtitle', 'info' => "Bad title ``\$1''"),
-               'invaliduser' => array('code' => 'invaliduser', 'info' => "Invalid username ``\$1''")
+               'invaliduser' => array('code' => 'invaliduser', 'info' => "Invalid username ``\$1''"),
+               'invalidexpiry' => array('code' => 'invalidexpiry', 'info' => "Invalid expiry time"),
+               'pastexpiry' => array('code' => 'pastexpiry', 'info' => "Expiry time is in the past"),
+               'create-titleexists' => array('code' => 'create-titleexists', 'info' => "Existing titles can't be protected with 'create'"),
+               'missingtitle-createonly' => array('code' => 'missingtitle-createonly', 'info' => "Missing titles can only be protected with 'create'"),
+               'cantblock' => array('code' => 'cantblock', 'info' => "You don't have permission to block users"),
+               'canthide' => array('code' => 'canthide', 'info' => "You don't have permission to hide user names from the block log"),
+               'cantblock-email' => array('code' => 'cantblock-email', 'info' => "You don't have permission to block users from sending e-mail through the wiki"),
+               'unblock-notarget' => array('code' => 'notarget', 'info' => "Either the id or the user parameter must be set"),
+               'unblock-idanduser' => array('code' => 'idanduser', 'info' => "The id and user parameters can\'t be used together"),
+               'cantunblock' => array('code' => 'permissiondenied', 'info' => "You don't have permission to unblock users"),
+               'cannotundelete' => array('code' => 'cantundelete', 'info' => "Couldn't undelete: the requested revisions may not exist, or may have been undeleted already"),
+               'permdenied-undelete' => array('code' => 'permissiondenied', 'info' => "You don't have permission to restore deleted revisions"),
        );
        
        /**
@@ -599,7 +634,7 @@ abstract class ApiBase {
        public function dieUsageMsg($error) {
                $key = array_shift($error);
                if(isset(self::$messageMap[$key]))
-                       $this->dieUsage(wfMsgReplaceArgs(self::$messageMap[$key]['info'], $error), self::$messageMap[$key]['code']);
+                       $this->dieUsage(wfMsgReplaceArgs(self::$messageMap[$key]['info'], $error), wfMsgReplaceArgs(self::$messageMap[$key]['code'], $error));
                // If the key isn't present, throw an "unknown error"
                $this->dieUsageMsg(array('unknownerror', $key));
        }
@@ -624,6 +659,13 @@ abstract class ApiBase {
        public function isEditMode() {
                return false;
        }
+       
+       /**
+        * Indicates whether this module must be called with a POST request
+        */
+       public function mustBePosted() {
+               return false;
+       }
 
 
        /**