*/
class ApiEditPage extends ApiBase {
public function execute() {
+ $this->useTransactionalTimeLimit();
+
$user = $this->getUser();
$params = $this->extractRequestParams();
$contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
}
+ $name = $titleObj->getPrefixedDBkey();
+ $model = $contentHandler->getModelID();
if ( $contentHandler->supportsDirectApiEditing() === false ) {
$this->dieUsage(
- 'Direct editing via API is not supported for this content type.',
+ "Direct editing via API is not supported for content model $model used by $name",
'no-direct-editing'
);
}
$contentFormat = $params['contentformat'];
if ( !$contentHandler->isSupportedFormat( $contentFormat ) ) {
- $name = $titleObj->getPrefixedDBkey();
- $model = $contentHandler->getModelID();
$this->dieUsage( "The requested format $contentFormat is not supported for content model " .
" $model used by $name", 'badformat' );
$errors = array_merge( $errors, $titleObj->getUserPermissionsErrors( 'create', $user ) );
}
if ( count( $errors ) ) {
- $this->dieUsageMsg( $errors[0] );
+ if ( is_array( $errors[0] ) ) {
+ switch ( $errors[0][0] ) {
+ case 'blockedtext':
+ $this->dieUsage(
+ 'You have been blocked from editing',
+ 'blocked',
+ 0,
+ array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+ );
+ break;
+ case 'autoblockedtext':
+ $this->dieUsage(
+ 'Your IP address has been blocked automatically, because it was used by a blocked user',
+ 'autoblocked',
+ 0,
+ array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+ );
+ break;
+ default:
+ $this->dieUsageMsg( $errors[0] );
+ }
+ } else {
+ $this->dieUsageMsg( $errors[0] );
+ }
}
$toMD5 = $params['text'];
$titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo']
) {
$params['summary'] = wfMessage( 'undo-summary' )
- ->params ( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
+ ->params( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
}
}
$requestArray['wpUndidRevision'] = $params['undo'];
}
- // Watch out for basetimestamp == ''
- // wfTimestamp() treats it as NOW, almost certainly causing an edit conflict
- if ( !is_null( $params['basetimestamp'] ) && $params['basetimestamp'] != '' ) {
- $requestArray['wpEdittime'] = wfTimestamp( TS_MW, $params['basetimestamp'] );
+ // Watch out for basetimestamp == '' or '0'
+ // It gets treated as NOW, almost certainly causing an edit conflict
+ if ( $params['basetimestamp'] !== null && (bool)$this->getMain()->getVal( 'basetimestamp' ) ) {
+ $requestArray['wpEdittime'] = $params['basetimestamp'];
} else {
$requestArray['wpEdittime'] = $pageObj->getTimestamp();
}
- if ( !is_null( $params['starttimestamp'] ) && $params['starttimestamp'] != '' ) {
- $requestArray['wpStarttime'] = wfTimestamp( TS_MW, $params['starttimestamp'] );
+ if ( $params['starttimestamp'] !== null ) {
+ $requestArray['wpStarttime'] = $params['starttimestamp'];
} else {
$requestArray['wpStarttime'] = wfTimestampNow(); // Fake wpStartime
}
$this->dieUsageMsg( array( 'spamdetected', $result['spam'] ) );
case EditPage::AS_BLOCKED_PAGE_FOR_USER:
- $this->dieUsageMsg( 'blockedtext' );
+ $this->dieUsage(
+ 'You have been blocked from editing',
+ 'blocked',
+ 0,
+ array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+ );
case EditPage::AS_MAX_ARTICLE_SIZE_EXCEEDED:
case EditPage::AS_CONTENT_TOO_BIG:
'sectiontitle' => array(
ApiBase::PARAM_TYPE => 'string',
),
- 'text' => null,
+ 'text' => array(
+ ApiBase::PARAM_TYPE => 'text',
+ ),
'summary' => null,
'tags' => array(
ApiBase::PARAM_TYPE => ChangeTags::listExplicitlyDefinedTags(),
'minor' => false,
'notminor' => false,
'bot' => false,
- 'basetimestamp' => null,
- 'starttimestamp' => null,
+ 'basetimestamp' => array(
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ),
+ 'starttimestamp' => array(
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ),
'recreate' => false,
'createonly' => false,
'nocreate' => false,
),
),
'md5' => null,
- 'prependtext' => null,
- 'appendtext' => null,
+ 'prependtext' => array(
+ ApiBase::PARAM_TYPE => 'text',
+ ),
+ 'appendtext' => array(
+ ApiBase::PARAM_TYPE => 'text',
+ ),
'undo' => array(
ApiBase::PARAM_TYPE => 'integer'
),