$user = $this->getUser();
// make sure the user is allowed
- if ( !$user->isAllowed( 'changetags' ) ) {
- $this->dieUsage( "You don't have permission to add or remove change tags from individual edits",
- 'permissiondenied' );
- }
+ $this->checkUserRightsAny( 'changetags' );
if ( $user->isBlocked() ) {
$this->dieBlocked( $user->getBlock() );
}
+ // Check if user can add tags
+ if ( count( $params['tags'] ) ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+ if ( !$ableToTag->isOk() ) {
+ $this->dieStatus( $ableToTag );
+ }
+ }
+
// validate and process each revid, rcid and logid
$this->requireAtLeastOneParameter( $params, 'revid', 'rcid', 'logid' );
$ret = [];
if ( !$valid ) {
$idResult['status'] = 'error';
- $idResult += $this->parseMsg( [ "nosuch$type", $id ] );
+ // Messages: apierror-nosuchrcid apierror-nosuchrevid apierror-nosuchlogid
+ $idResult += $this->getErrorFormatter()->formatMessage( [ "apierror-nosuch$type", $id ] );
return $idResult;
}
} else {
$idResult['status'] = 'success';
if ( is_null( $status->value->logId ) ) {
- $idResult['noop'] = '';
+ $idResult['noop'] = true;
} else {
$idResult['actionlogid'] = $status->value->logId;
$idResult['added'] = $status->value->addedTags;
ApiResult::setIndexedTagName( $idResult['added'], 't' );
$idResult['removed'] = $status->value->removedTags;
ApiResult::setIndexedTagName( $idResult['removed'], 't' );
+
+ if ( $params['tags'] ) {
+ ChangeTags::addTags( $params['tags'], null, null, $status->value->logId );
+ }
}
}
return $idResult;
'reason' => [
ApiBase::PARAM_DFLT => '',
],
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
];
}