From: blackspirit96 Date: Tue, 29 Nov 2016 22:34:21 +0000 (+0200) Subject: API should allow querying user contribs by userid X-Git-Tag: 1.31.0-rc.0~4380^2 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22upgrade%22%2C%22reinstall=non%22%29%20.%20%22?a=commitdiff_plain;h=82ee5f6e4c62e408e1bc40717d8fd6b3e190b855;p=lhc%2Fweb%2Fwiklou.git API should allow querying user contribs by userid It verifies that the userids are valid and then it gathers all the contribs. Anonymous users are not suported by userids because every anonymous user have userid === 0. Bug: T114465 Change-Id: Id4f4fb76ea06332a7c83a55922fdfda2d665e85a --- diff --git a/includes/api/ApiQueryUserContributions.php b/includes/api/ApiQueryUserContributions.php index b6d871b817..31a9238001 100644 --- a/includes/api/ApiQueryUserContributions.php +++ b/includes/api/ApiQueryUserContributions.php @@ -65,18 +65,36 @@ class ApiQueryContributions extends ApiQueryBase { // 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( @@ -84,7 +102,7 @@ class ApiQueryContributions extends ApiQueryBase { ); } foreach ( $this->params['user'] as $u ) { - if ( is_null( $u ) || $u === '' ) { + if ( $u === '' ) { $encParamName = $this->encodeParamName( 'user' ); $this->dieWithError( [ 'apierror-paramempty', $encParamName ], "paramempty_$encParamName" @@ -495,6 +513,10 @@ class ApiQueryContributions extends ApiQueryBase { ApiBase::PARAM_TYPE => 'user', ApiBase::PARAM_ISMULTI => true ], + 'userids' => [ + ApiBase::PARAM_TYPE => 'integer', + ApiBase::PARAM_ISMULTI => true + ], 'userprefix' => null, 'dir' => [ ApiBase::PARAM_DFLT => 'older', diff --git a/includes/api/i18n/en.json b/includes/api/i18n/en.json index 9915d391ca..e7f85d784b 100644 --- a/includes/api/i18n/en.json +++ b/includes/api/i18n/en.json @@ -1198,8 +1198,9 @@ "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 $1userids or $1userprefix.", + "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Cannot be used with $1user or $1userids.", + "apihelp-query+usercontribs-param-userids": "The user IDs to retrieve contributions for. Cannot be used with $1user or $1userprefix.", "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.", @@ -1641,6 +1642,7 @@ "apierror-invalidtitle": "Bad title \"$1\".", "apierror-invalidurlparam": "Invalid value for $1urlparam ($2=$3).", "apierror-invaliduser": "Invalid username \"$1\".", + "apierror-invaliduserid": "User ID $1 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.", diff --git a/includes/api/i18n/qqq.json b/includes/api/i18n/qqq.json index c6b14cd72b..b1b350e348 100644 --- a/includes/api/i18n/qqq.json +++ b/includes/api/i18n/qqq.json @@ -1118,6 +1118,7 @@ "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}}", @@ -1533,6 +1534,7 @@ "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}}",