extractRequestParams(); // make sure the user is allowed if ( !$this->getUser()->isAllowed( 'managechangetags' ) ) { $this->dieUsage( "You don't have permission to manage change tags", 'permissiondenied' ); } $result = $this->getResult(); $funcName = "{$params['operation']}TagWithChecks"; $status = ChangeTags::$funcName( $params['tag'], $params['reason'], $this->getUser(), $params['ignorewarnings'] ); if ( !$status->isOK() ) { $this->dieStatus( $status ); } $ret = array( 'operation' => $params['operation'], 'tag' => $params['tag'], ); if ( !$status->isGood() ) { $ret['warnings'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'warning' ); } $ret['success'] = $status->value !== null; if ( $ret['success'] ) { $ret['logid'] = $status->value; } $result->addValue( null, $this->getModuleName(), $ret ); } public function mustBePosted() { return true; } public function isWriteMode() { return true; } public function getAllowedParams() { return array( 'operation' => array( ApiBase::PARAM_TYPE => array( 'create', 'delete', 'activate', 'deactivate' ), ApiBase::PARAM_REQUIRED => true, ), 'tag' => array( ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true, ), 'reason' => array( ApiBase::PARAM_TYPE => 'string', ), 'ignorewarnings' => array( ApiBase::PARAM_TYPE => 'boolean', ApiBase::PARAM_DFLT => false, ), ); } public function needsToken() { return 'csrf'; } protected function getExamplesMessages() { return array( 'action=managetags&operation=create&tag=spam&reason=For+use+in+edit+patrolling&token=123ABC' => 'apihelp-managetags-example-create', 'action=managetags&operation=delete&tag=vandlaism&reason=Misspelt&token=123ABC' => 'apihelp-managetags-example-delete', 'action=managetags&operation=activate&tag=spam&reason=For+use+in+edit+patrolling&token=123ABC' => 'apihelp-managetags-example-activate', 'action=managetags&operation=deactivate&tag=spam&reason=No+longer+required&token=123ABC' => 'apihelp-managetags-example-deactivate', ); } public function getHelpUrls() { return 'https://www.mediawiki.org/wiki/API:Tag_management'; } }