X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiProtect.php;h=d28906069fc0b066053c7c488227d9be3d2f1055;hb=88f73a5d6567c1f7df53d498be4d0c63b431b881;hp=c07aaca436020f289ec447b8666c62516064cfeb;hpb=4e90d55fdc9d31d93e24cf05687eb7d180806f44;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiProtect.php b/includes/api/ApiProtect.php index c07aaca436..d28906069f 100644 --- a/includes/api/ApiProtect.php +++ b/includes/api/ApiProtect.php @@ -42,25 +42,35 @@ class ApiProtect extends ApiBase { $this->dieUsageMsg( reset( $errors ) ); } + $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 ) != count( $params['protections'] ) ) { if ( count( $expiry ) == 1 ) { $expiry = array_fill( 0, count( $params['protections'] ), $expiry[0] ); } else { - $this->dieUsageMsg( array( + $this->dieUsageMsg( [ 'toofewexpiries', count( $expiry ), count( $params['protections'] ) - ) ); + ] ); } } $restrictionTypes = $titleObj->getRestrictionTypes(); - $db = $this->getDB(); - $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] ); @@ -73,10 +83,10 @@ class ApiProtect extends ApiBase { } if ( !in_array( $p[0], $restrictionTypes ) && $p[0] != 'create' ) { - $this->dieUsageMsg( array( 'protect-invalidaction', $p[0] ) ); + $this->dieUsageMsg( [ 'protect-invalidaction', $p[0] ] ); } if ( !in_array( $p[1], $this->getConfig()->get( 'RestrictionLevels' ) ) && $p[1] != 'all' ) { - $this->dieUsageMsg( array( 'protect-invalidlevel', $p[1] ) ); + $this->dieUsageMsg( [ 'protect-invalidlevel', $p[1] ] ); } if ( wfIsInfinity( $expiry[$i] ) ) { @@ -84,26 +94,23 @@ class ApiProtect extends ApiBase { } else { $exp = strtotime( $expiry[$i] ); if ( $exp < 0 || !$exp ) { - $this->dieUsageMsg( array( 'invalidexpiry', $expiry[$i] ) ); + $this->dieUsageMsg( [ 'invalidexpiry', $expiry[$i] ] ); } $exp = wfTimestamp( TS_MW, $exp ); if ( $exp < wfTimestampNow() ) { - $this->dieUsageMsg( array( 'pastexpiry', $expiry[$i] ) ); + $this->dieUsageMsg( [ 'pastexpiry', $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']; - if ( $params['watch'] ) { - $this->logFeatureUsage( 'action=protect&watch' ); - } $watch = $params['watch'] ? 'watch' : $params['watchlist']; $this->setWatch( $watch, $titleObj, 'watchdefault' ); @@ -112,16 +119,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; } @@ -140,38 +148,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() { @@ -179,7 +191,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', @@ -189,7 +201,7 @@ class ApiProtect extends ApiBase { 'action=protect&title=Main%20Page&token=123ABC&' . 'protections=&reason=Lifting%20restrictions' => 'apihelp-protect-example-unprotect2', - ); + ]; } public function getHelpUrls() {