Merge "API: Avoid duplicate IDs in API documentation"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 19 May 2016 17:57:26 +0000 (17:57 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 19 May 2016 17:57:26 +0000 (17:57 +0000)
1  2 
includes/api/ApiMain.php

diff --combined includes/api/ApiMain.php
@@@ -49,14 -49,8 +49,14 @@@ class ApiMain extends ApiBase 
         */
        private static $Modules = [
                'login' => 'ApiLogin',
 +              'clientlogin' => 'ApiClientLogin',
                'logout' => 'ApiLogout',
 -              'createaccount' => 'ApiCreateAccount',
 +              'createaccount' => 'ApiAMCreateAccount',
 +              'linkaccount' => 'ApiLinkAccount',
 +              'unlinkaccount' => 'ApiRemoveAuthenticationData',
 +              'changeauthenticationdata' => 'ApiChangeAuthenticationData',
 +              'removeauthenticationdata' => 'ApiRemoveAuthenticationData',
 +              'resetpassword' => 'ApiResetPassword',
                'query' => 'ApiQuery',
                'expandtemplates' => 'ApiExpandTemplates',
                'parse' => 'ApiParse',
        private $mModuleMgr, $mResult, $mErrorFormatter, $mContinuationManager;
        private $mAction;
        private $mEnableWrite;
 -      private $mInternalMode, $mSquidMaxage, $mModule;
 +      private $mInternalMode, $mSquidMaxage;
 +      /** @var ApiBase */
 +      private $mModule;
  
        private $mCacheMode = 'private';
        private $mCacheControl = [];
                if ( $this->mInternalMode ) {
                        $this->executeAction();
                } else {
 -                      $start = microtime( true );
                        $this->executeActionWithErrorHandling();
 -                      if ( $this->isWriteMode() && $this->getRequest()->wasPosted() ) {
 -                              $timeMs = 1000 * max( 0, microtime( true ) - $start );
 -                              $this->getStats()->timing(
 -                                      'api.' . $this->getModuleName() . '.executeTiming', $timeMs );
 -                      }
                }
        }
  
                $isError = false;
                try {
                        $this->executeAction();
 -                      $this->logRequest( microtime( true ) - $t );
 -
 +                      $runTime = microtime( true ) - $t;
 +                      $this->logRequest( $runTime );
 +                      if ( $this->mModule->isWriteMode() && $this->getRequest()->wasPosted() ) {
 +                              $this->getStats()->timing(
 +                                      'api.' . $this->getModuleName() . '.executeTiming', 1000 * $runTime );
 +                      }
                } catch ( Exception $e ) {
                        $this->handleException( $e );
                        $this->logRequest( microtime( true ) - $t, $e );
                                                                        TS_MW, time() - $this->getConfig()->get( 'SquidMaxage' )
                                                                );
                                                        }
 -                                                      Hooks::run( 'OutputPageCheckLastModified', [ &$modifiedTimes ] );
 +                                                      Hooks::run( 'OutputPageCheckLastModified', [ &$modifiedTimes, $this->getOutput() ] );
                                                        $lastMod = max( $modifiedTimes );
                                                        $return304 = wfTimestamp( TS_MW, $lastMod ) <= $ts->getTimestamp( TS_MW );
                                                }
                                $trxProfiler->setExpectations( $limits['POST'], __METHOD__ );
                        } else {
                                $trxProfiler->setExpectations( $limits['POST-nonwrite'], __METHOD__ );
 +                              $this->getRequest()->markAsSafeRequest();
                        }
                } else {
                        $trxProfiler->setExpectations( $limits['GET'], __METHOD__ );
                return array_keys( $this->mParamsUsed );
        }
  
 +      /**
 +       * Mark parameters as used
 +       * @param string|string[] $params
 +       */
 +      public function markParamsUsed( $params ) {
 +              $this->mParamsUsed += array_fill_keys( (array)$params, true );
 +      }
 +
        /**
         * Get a request value, and register the fact that it was used, for logging.
         * @param string $name
                        $tocnumber = &$options['tocnumber'];
  
                        $header = $this->msg( 'api-help-datatypes-header' )->parse();
+                       // Add an additional span with sanitized ID
+                       if ( !$this->getConfig()->get( 'ExperimentalHtmlIds' ) ) {
+                               $header = Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/datatypes' ) ] ) .
+                                       $header;
+                       }
                        $help['datatypes'] .= Html::rawElement( 'h' . min( 6, $level ),
                                [ 'id' => 'main/datatypes', 'class' => 'apihelp-header' ],
-                               Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/datatypes' ) ] ) .
                                $header
                        );
                        $help['datatypes'] .= $this->msg( 'api-help-datatypes' )->parseAsBlock();
                                ];
                        }
  
+                       // Add an additional span with sanitized ID
+                       if ( !$this->getConfig()->get( 'ExperimentalHtmlIds' ) ) {
+                               $header = Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/credits' ) ] ) .
+                                       $header;
+                       }
                        $header = $this->msg( 'api-credits-header' )->parse();
                        $help['credits'] .= Html::rawElement( 'h' . min( 6, $level ),
                                [ 'id' => 'main/credits', 'class' => 'apihelp-header' ],
-                               Html::element( 'span', [ 'id' => Sanitizer::escapeId( 'main/credits' ) ] ) .
                                $header
                        );
                        $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock();