}
}
} else {
- $value = intval( $value );
+ $value = (int)$value;
if ( !is_null( $min ) || !is_null( $max ) ) {
$this->validateLimit( $paramName, $value, $min, $max, null, $enforceLimits );
}
: $paramSettings[self::PARAM_MAX];
$this->getResult()->addParsedLimit( $this->getModuleName(), $value );
} else {
- $value = intval( $value );
+ $value = (int)$value;
$this->validateLimit(
$paramName,
$value,
$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;
* @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 );
}
/**@}*/