Merge "API: Warn when unsupported PHP array syntax is used"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 29 Apr 2014 03:30:10 +0000 (03:30 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 29 Apr 2014 03:30:10 +0000 (03:30 +0000)
1  2 
includes/api/ApiMain.php

diff --combined includes/api/ApiMain.php
@@@ -147,9 -147,9 +147,9 @@@ class ApiMain extends ApiBase 
        /**
         * Constructs an instance of ApiMain that utilizes the module and format specified by $request.
         *
 -       * @param $context IContextSource|WebRequest - if this is an instance of
 +       * @param IContextSource|WebRequest $context If this is an instance of
         *    FauxRequest, errors are thrown and no printing occurs
 -       * @param bool $enableWrite should be set to true if the api may modify data
 +       * @param bool $enableWrite Should be set to true if the api may modify data
         */
        public function __construct( $context = null, $enableWrite = false ) {
                if ( $context === null ) {
        /**
         * Set how long the response should be cached.
         *
 -       * @param $maxage
 +       * @param int $maxage
         */
        public function setCacheMaxAge( $maxage ) {
                $this->setCacheControl( array(
         * Cache control values set here will only be used if the cache mode is not
         * private, see setCacheMode().
         *
 -       * @param $directives array
 +       * @param array $directives
         */
        public function setCacheControl( $directives ) {
                $this->mCacheControl = $directives + $this->mCacheControl;
        /**
         * Create an instance of an output formatter by its name
         *
 -       * @param $format string
 +       * @param string $format
         *
         * @return ApiFormatBase
         */
         */
        protected function handleException( Exception $e ) {
                // Bug 63145: Rollback any open database transactions
 -              MWExceptionHandler::rollbackMasterChangesAndLog( $e );
 +              if ( !( $e instanceof UsageException ) ) {
 +                      // UsageExceptions are intentional, so don't rollback if that's the case
 +                      MWExceptionHandler::rollbackMasterChangesAndLog( $e );
 +              }
  
                // Allow extra cleanup and logging
                wfRunHooks( 'ApiMain::onException', array( $this, $e ) );
        /**
         * Replace the result data with the information about an exception.
         * Returns the error code
 -       * @param $e Exception
 +       * @param Exception $e
         * @return string
         */
        protected function substituteResultWithError( $e ) {
  
        /**
         * Check the max lag if necessary
 -       * @param $module ApiBase object: Api module being used
 -       * @param array $params an array containing the request parameters.
 -       * @return boolean True on success, false should exit immediately
 +       * @param ApiBase $module Api module being used
 +       * @param array $params Array an array containing the request parameters.
 +       * @return bool True on success, false should exit immediately
         */
        protected function checkMaxLag( $module, $params ) {
                if ( $module->shouldCheckMaxlag() && isset( $params['maxlag'] ) ) {
  
        /**
         * Check for sufficient permissions to execute
 -       * @param $module ApiBase An Api module
 +       * @param ApiBase $module An Api module
         */
        protected function checkExecutePermissions( $module ) {
                $user = $this->getUser();
  
        /**
         * Check asserts of the user's rights
 -       * @param $params array
 +       * @param array $params
         */
        protected function checkAsserts( $params ) {
                if ( isset( $params['assert'] ) ) {
  
        /**
         * Check POST for external response and setup result printer
 -       * @param $module ApiBase An Api module
 +       * @param ApiBase $module An Api module
         * @param array $params an array with the request parameters
         */
        protected function setupExternalResponse( $module, $params ) {
  
        /**
         * Encode a value in a format suitable for a space-separated log line.
 +       * @param string $s
 +       * return string
         */
        protected function encodeRequestLogValue( $s ) {
                static $table;
  
        /**
         * Get the request parameters used in the course of the preceding execute() request
 +       * @return array
         */
        protected function getParamsUsed() {
                return array_keys( $this->mParamsUsed );
  
        /**
         * Get a request value, and register the fact that it was used, for logging.
 +       * @param string $name
 +       * @param mixed $default
 +       * @return mixed
         */
        public function getVal( $name, $default = null ) {
                $this->mParamsUsed[$name] = true;
  
-               return $this->getRequest()->getVal( $name, $default );
+               $ret = $this->getRequest()->getVal( $name );
+               if ( $ret === null ) {
+                       if ( $this->getRequest()->getArray( $name ) !== null ) {
+                               // See bug 10262 for why we don't just join( '|', ... ) the
+                               // array.
+                               $this->setWarning(
+                                       "Parameter '$name' uses unsupported PHP array syntax"
+                               );
+                       }
+                       $ret = $default;
+               }
+               return $ret;
        }
  
        /**
         * Get a boolean request value, and register the fact that the parameter
         * was used, for logging.
 +       * @param string $name
 +       * @return bool
         */
        public function getCheck( $name ) {
-               $this->mParamsUsed[$name] = true;
-               return $this->getRequest()->getCheck( $name );
+               return $this->getVal( $name, null ) !== null;
        }
  
        /**
        /**
         * Print results using the current printer
         *
 -       * @param $isError bool
 +       * @param bool $isError
         */
        protected function printResult( $isError ) {
                global $wgDebugAPI;
        /**
         * Sets whether the pretty-printer should format *bold* and $italics$
         *
 -       * @param $help bool
 +       * @param bool $help
         */
        public function setHelp( $help = true ) {
                $this->mPrinter->setHelp( $help );
        }
  
        /**
 -       * @param $module ApiBase
 +       * @param ApiBase $module
         * @param string $paramName What type of request is this? e.g. action,
         *    query, list, prop, meta, format
         * @return string
         *
         * @deprecated since 1.21, Use getModuleManager()->addModule() instead.
         * @param string $name The identifier for this module.
 -       * @param $class ApiBase The class where this module is implemented.
 +       * @param ApiBase $class The class where this module is implemented.
         */
        protected function addModule( $name, $class ) {
                $this->getModuleManager()->addModule( $name, 'action', $class );
         *
         * @deprecated since 1.21, Use getModuleManager()->addModule() instead.
         * @param string $name The identifier for this format.
 -       * @param $class ApiFormatBase The class implementing this format.
 +       * @param ApiFormatBase $class The class implementing this format.
         */
        protected function addFormat( $name, $class ) {
                $this->getModuleManager()->addModule( $name, 'format', $class );
@@@ -1422,10 -1420,10 +1431,10 @@@ class UsageException extends MWExceptio
        private $mExtraData;
  
        /**
 -       * @param $message string
 -       * @param $codestr string
 -       * @param $code int
 -       * @param $extradata array|null
 +       * @param string $message
 +       * @param string $codestr
 +       * @param int $code
 +       * @param array|null $extradata
         */
        public function __construct( $message, $codestr, $code = 0, $extradata = null ) {
                parent::__construct( $message, $code );