X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiBase.php;h=9b3d11664df93b243c913ae9134b6e8cd9f6fc70;hb=044d888c41427967cd6f14303d300ceefa54d0c5;hp=dfaff8b76e1a8c00f179a663557792cb989b15ce;hpb=c073e531cf7a7fe055f002148e97159006b75c22;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php index dfaff8b76e..9b3d11664d 100644 --- a/includes/api/ApiBase.php +++ b/includes/api/ApiBase.php @@ -1282,7 +1282,7 @@ abstract class ApiBase extends ContextSource { } } } else { - $value = intval( $value ); + $value = (int)$value; if ( !is_null( $min ) || !is_null( $max ) ) { $this->validateLimit( $paramName, $value, $min, $max, null, $enforceLimits ); } @@ -1311,7 +1311,7 @@ abstract class ApiBase extends ContextSource { : $paramSettings[self::PARAM_MAX]; $this->getResult()->addParsedLimit( $this->getModuleName(), $value ); } else { - $value = intval( $value ); + $value = (int)$value; $this->validateLimit( $paramName, $value, @@ -1805,13 +1805,16 @@ abstract class ApiBase extends ContextSource { $status = Status::newGood(); foreach ( $errors as $error ) { - if ( is_array( $error ) && isset( self::$blockMsgMap[$error[0]] ) && $user->getBlock() ) { + if ( !is_array( $error ) ) { + $error = [ $error ]; + } + if ( is_string( $error[0] ) && isset( self::$blockMsgMap[$error[0]] ) && $user->getBlock() ) { list( $msg, $code ) = self::$blockMsgMap[$error[0]]; $status->fatal( ApiMessage::create( $msg, $code, [ 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) ] ) ); } else { - $status->fatal( ...(array)$error ); + $status->fatal( ...$error ); } } return $status; @@ -2222,13 +2225,33 @@ abstract class ApiBase extends ContextSource { * @param string $feature Feature being used. */ public function logFeatureUsage( $feature ) { + static $loggedFeatures = []; + + // Only log each feature once per request. We can get multiple calls from calls to + // extractRequestParams() with different values for 'parseLimit', for example. + if ( isset( $loggedFeatures[$feature] ) ) { + return; + } + $loggedFeatures[$feature] = true; + $request = $this->getRequest(); - $s = '"' . addslashes( $feature ) . '"' . - ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' . - ' "' . $request->getIP() . '"' . - ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' . - ' "' . addslashes( $this->getMain()->getUserAgent() ) . '"'; - wfDebugLog( 'api-feature-usage', $s, 'private' ); + $ctx = [ + 'feature' => $feature, + // Spaces to underscores in 'username' for historical reasons. + 'username' => str_replace( ' ', '_', $this->getUser()->getName() ), + 'ip' => $request->getIP(), + 'referer' => (string)$request->getHeader( 'Referer' ), + 'agent' => $this->getMain()->getUserAgent(), + ]; + + // Text string is deprecated. Remove (or replace with just $feature) in MW 1.34. + $s = '"' . addslashes( $ctx['feature'] ) . '"' . + ' "' . wfUrlencode( $ctx['username'] ) . '"' . + ' "' . $ctx['ip'] . '"' . + ' "' . addslashes( $ctx['referer'] ) . '"' . + ' "' . addslashes( $ctx['agent'] ) . '"'; + + wfDebugLog( 'api-feature-usage', $s, 'private', $ctx ); } /**@}*/