// TODO: if the query is going only against the revision table, should this be done?
$this->selectNamedDB( 'contributions', DB_REPLICA, 'contributions' );
+ $this->requireOnlyOneParameter( $this->params, 'userprefix', 'userids', 'user' );
+
$this->idMode = false;
if ( isset( $this->params['userprefix'] ) ) {
$this->prefixMode = true;
$this->multiUserMode = true;
$this->userprefix = $this->params['userprefix'];
+ } elseif ( isset( $this->params['userids'] ) ) {
+ $this->userids = [];
+
+ if ( !count( $this->params['userids'] ) ) {
+ $encParamName = $this->encodeParamName( 'userids' );
+ $this->dieWithError( [ 'apierror-paramempty', $encParamName ], "paramempty_$encParamName" );
+ }
+
+ foreach ( $this->params['userids'] as $uid ) {
+ if ( $uid <= 0 ) {
+ $this->dieWithError( [ 'apierror-invaliduserid', $uid ], 'invaliduserid' );
+ }
+
+ $this->userids[] = $uid;
+ }
+
+ $this->prefixMode = false;
+ $this->multiUserMode = ( count( $this->params['userids'] ) > 1 );
+ $this->idMode = true;
} else {
$anyIPs = false;
$this->userids = [];
$this->usernames = [];
- if ( !is_array( $this->params['user'] ) ) {
- $this->params['user'] = [ $this->params['user'] ];
- }
if ( !count( $this->params['user'] ) ) {
$encParamName = $this->encodeParamName( 'user' );
$this->dieWithError(
);
}
foreach ( $this->params['user'] as $u ) {
- if ( is_null( $u ) || $u === '' ) {
+ if ( $u === '' ) {
$encParamName = $this->encodeParamName( 'user' );
$this->dieWithError(
[ 'apierror-paramempty', $encParamName ], "paramempty_$encParamName"
ApiBase::PARAM_TYPE => 'user',
ApiBase::PARAM_ISMULTI => true
],
+ 'userids' => [
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true
+ ],
'userprefix' => null,
'dir' => [
ApiBase::PARAM_DFLT => 'older',
"apihelp-query+usercontribs-param-limit": "The maximum number of contributions to return.",
"apihelp-query+usercontribs-param-start": "The start timestamp to return from.",
"apihelp-query+usercontribs-param-end": "The end timestamp to return to.",
- "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for.",
- "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Overrides $1user.",
+ "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for. Cannot be used with <var>$1userids</var> or <var>$1userprefix</var>.",
+ "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Cannot be used with <var>$1user</var> or <var>$1userids</var>.",
+ "apihelp-query+usercontribs-param-userids": "The user IDs to retrieve contributions for. Cannot be used with <var>$1user</var> or <var>$1userprefix</var>.",
"apihelp-query+usercontribs-param-namespace": "Only list contributions in these namespaces.",
"apihelp-query+usercontribs-param-prop": "Include additional pieces of information:",
"apihelp-query+usercontribs-paramvalue-prop-ids": "Adds the page ID and revision ID.",
"apierror-invalidtitle": "Bad title \"$1\".",
"apierror-invalidurlparam": "Invalid value for <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
"apierror-invaliduser": "Invalid username \"$1\".",
+ "apierror-invaliduserid": "User ID <var>$1</var> is not valid.",
"apierror-maxlag-generic": "Waiting for a database server: $1 {{PLURAL:$1|second|seconds}} lagged.",
"apierror-maxlag": "Waiting for $2: $1 {{PLURAL:$1|second|seconds}} lagged.",
"apierror-mimesearchdisabled": "MIME search is disabled in Miser Mode.",
"apihelp-query+usercontribs-param-start": "{{doc-apihelp-param|query+usercontribs|start}}",
"apihelp-query+usercontribs-param-end": "{{doc-apihelp-param|query+usercontribs|end}}",
"apihelp-query+usercontribs-param-user": "{{doc-apihelp-param|query+usercontribs|user}}",
+ "apihelp-query+usercontribs-param-userids": "{{doc-apihelp-param|query+usercontribs|userids}}",
"apihelp-query+usercontribs-param-userprefix": "{{doc-apihelp-param|query+usercontribs|userprefix}}",
"apihelp-query+usercontribs-param-namespace": "{{doc-apihelp-param|query+usercontribs|namespace}}",
"apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop|paramvalues=1}}",
"apierror-invalidtitle": "{{doc-apierror}}\n\nParameters:\n* $1 - Title that is invalid",
"apierror-invalidurlparam": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".\n* $2 - Key\n* $3 - Value.",
"apierror-invaliduser": "{{doc-apierror}}\n\nParameters:\n* $1 - User name that is invalid.",
+ "apierror-invaliduserid": "{{doc-apierror}}",
"apierror-maxlag-generic": "{{doc-apierror}}\n\nParameters:\n* $1 - Database is lag in seconds.",
"apierror-maxlag": "{{doc-apierror}}\n\nParameters:\n* $1 - Database lag in seconds.\n* $2 - Database server that is lagged.",
"apierror-mimesearchdisabled": "{{doc-apierror}}",