$pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
$titleObj = $pageObj->getTitle();
- $errors = $titleObj->getUserPermissionsErrors( 'protect', $this->getUser() );
- if ( $errors ) {
- // We don't care about multiple errors, just report one of them
- $this->dieUsageMsg( reset( $errors ) );
+ $this->checkTitleUserPermissions( $titleObj, 'protect' );
+
+ $user = $this->getUser();
+ $tags = $params['tags'];
+
+ // Check if user can add tags
+ if ( !is_null( $tags ) ) {
+ $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $tags, $user );
+ if ( !$ableToTag->isOK() ) {
+ $this->dieStatus( $ableToTag );
+ }
}
$expiry = (array)$params['expiry'];
if ( count( $expiry ) == 1 ) {
$expiry = array_fill( 0, count( $params['protections'] ), $expiry[0] );
} else {
- $this->dieUsageMsg( [
- 'toofewexpiries',
+ $this->dieWithError( [
+ 'apierror-toofewexpiries',
count( $expiry ),
count( $params['protections'] )
] );
$protections[$p[0]] = ( $p[1] == 'all' ? '' : $p[1] );
if ( $titleObj->exists() && $p[0] == 'create' ) {
- $this->dieUsageMsg( 'create-titleexists' );
+ $this->dieWithError( 'apierror-create-titleexists' );
}
if ( !$titleObj->exists() && $p[0] != 'create' ) {
- $this->dieUsageMsg( 'missingtitle-createonly' );
+ $this->dieWithError( 'apierror-missingtitle-createonly' );
}
if ( !in_array( $p[0], $restrictionTypes ) && $p[0] != 'create' ) {
- $this->dieUsageMsg( [ 'protect-invalidaction', $p[0] ] );
+ $this->dieWithError( [ 'apierror-protect-invalidaction', wfEscapeWikiText( $p[0] ) ] );
}
if ( !in_array( $p[1], $this->getConfig()->get( 'RestrictionLevels' ) ) && $p[1] != 'all' ) {
- $this->dieUsageMsg( [ 'protect-invalidlevel', $p[1] ] );
+ $this->dieWithError( [ 'apierror-protect-invalidlevel', wfEscapeWikiText( $p[1] ) ] );
}
if ( wfIsInfinity( $expiry[$i] ) ) {
} else {
$exp = strtotime( $expiry[$i] );
if ( $exp < 0 || !$exp ) {
- $this->dieUsageMsg( [ 'invalidexpiry', $expiry[$i] ] );
+ $this->dieWithError( [ 'apierror-invalidexpiry', wfEscapeWikiText( $expiry[$i] ) ] );
}
$exp = wfTimestamp( TS_MW, $exp );
if ( $exp < wfTimestampNow() ) {
- $this->dieUsageMsg( [ 'pastexpiry', $expiry[$i] ] );
+ $this->dieWithError( [ 'apierror-pastexpiry', wfEscapeWikiText( $expiry[$i] ) ] );
}
$expiryarray[$p[0]] = $exp;
}
$expiryarray,
$cascade,
$params['reason'],
- $this->getUser()
+ $user,
+ $tags
);
if ( !$status->isOK() ) {
ApiBase::PARAM_DFLT => 'infinite',
],
'reason' => '',
+ 'tags' => [
+ ApiBase::PARAM_TYPE => 'tags',
+ ApiBase::PARAM_ISMULTI => true,
+ ],
'cascade' => false,
'watch' => [
ApiBase::PARAM_DFLT => false,