X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Fapi%2FApiProtect.php;h=746dc9a16bb7104ad5a8e3c279ae5be79cc25cb6;hb=20f0da437eeed7e8ca28be911f53535be82889a1;hp=d07301c520cb8270ab3b4c287397229c98dbc8fc;hpb=0afd118fa86dd4e66a56168816744346e60e66b7;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiProtect.php b/includes/api/ApiProtect.php index d07301c520..746dc9a16b 100644 --- a/includes/api/ApiProtect.php +++ b/includes/api/ApiProtect.php @@ -36,10 +36,17 @@ class ApiProtect extends ApiBase { $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']; @@ -47,35 +54,35 @@ class ApiProtect extends ApiBase { if ( count( $expiry ) == 1 ) { $expiry = array_fill( 0, count( $params['protections'] ), $expiry[0] ); } else { - $this->dieUsageMsg( array( - 'toofewexpiries', + $this->dieWithError( [ + 'apierror-toofewexpiries', count( $expiry ), count( $params['protections'] ) - ) ); + ] ); } } $restrictionTypes = $titleObj->getRestrictionTypes(); - $protections = array(); - $expiryarray = array(); - $resultProtections = array(); + $protections = []; + $expiryarray = []; + $resultProtections = []; foreach ( $params['protections'] as $i => $prot ) { $p = explode( '=', $prot ); $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( array( '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( array( 'protect-invalidlevel', $p[1] ) ); + $this->dieWithError( [ 'apierror-protect-invalidlevel', wfEscapeWikiText( $p[1] ) ] ); } if ( wfIsInfinity( $expiry[$i] ) ) { @@ -83,19 +90,19 @@ class ApiProtect extends ApiBase { } else { $exp = strtotime( $expiry[$i] ); if ( $exp < 0 || !$exp ) { - $this->dieUsageMsg( array( 'invalidexpiry', $expiry[$i] ) ); + $this->dieWithError( [ 'apierror-invalidexpiry', wfEscapeWikiText( $expiry[$i] ) ] ); } $exp = wfTimestamp( TS_MW, $exp ); if ( $exp < wfTimestampNow() ) { - $this->dieUsageMsg( array( 'pastexpiry', $expiry[$i] ) ); + $this->dieWithError( [ 'apierror-pastexpiry', wfEscapeWikiText( $expiry[$i] ) ] ); } $expiryarray[$p[0]] = $exp; } - $resultProtections[] = array( + $resultProtections[] = [ $p[0] => $protections[$p[0]], 'expiry' => $wgContLang->formatExpiry( $expiryarray[$p[0]], TS_ISO_8601, 'infinite' ), - ); + ]; } $cascade = $params['cascade']; @@ -108,16 +115,17 @@ class ApiProtect extends ApiBase { $expiryarray, $cascade, $params['reason'], - $this->getUser() + $user, + $tags ); if ( !$status->isOK() ) { $this->dieStatus( $status ); } - $res = array( + $res = [ 'title' => $titleObj->getPrefixedText(), 'reason' => $params['reason'] - ); + ]; if ( $cascade ) { $res['cascade'] = true; } @@ -136,38 +144,42 @@ class ApiProtect extends ApiBase { } public function getAllowedParams() { - return array( - 'title' => array( + return [ + 'title' => [ ApiBase::PARAM_TYPE => 'string', - ), - 'pageid' => array( + ], + 'pageid' => [ ApiBase::PARAM_TYPE => 'integer', - ), - 'protections' => array( + ], + 'protections' => [ ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_REQUIRED => true, - ), - 'expiry' => array( + ], + 'expiry' => [ ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_ALLOW_DUPLICATES => true, ApiBase::PARAM_DFLT => 'infinite', - ), + ], 'reason' => '', + 'tags' => [ + ApiBase::PARAM_TYPE => 'tags', + ApiBase::PARAM_ISMULTI => true, + ], 'cascade' => false, - 'watch' => array( + 'watch' => [ ApiBase::PARAM_DFLT => false, ApiBase::PARAM_DEPRECATED => true, - ), - 'watchlist' => array( + ], + 'watchlist' => [ ApiBase::PARAM_DFLT => 'preferences', - ApiBase::PARAM_TYPE => array( + ApiBase::PARAM_TYPE => [ 'watch', 'unwatch', 'preferences', 'nochange' - ), - ), - ); + ], + ], + ]; } public function needsToken() { @@ -175,7 +187,7 @@ class ApiProtect extends ApiBase { } protected function getExamplesMessages() { - return array( + return [ 'action=protect&title=Main%20Page&token=123ABC&' . 'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never' => 'apihelp-protect-example-protect', @@ -185,7 +197,7 @@ class ApiProtect extends ApiBase { 'action=protect&title=Main%20Page&token=123ABC&' . 'protections=&reason=Lifting%20restrictions' => 'apihelp-protect-example-unprotect2', - ); + ]; } public function getHelpUrls() {