} else {
$contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
}
+ $contentModel = $contentHandler->getModelID();
$name = $titleObj->getPrefixedDBkey();
$model = $contentHandler->getModelID();
}
if ( !isset( $params['contentformat'] ) || $params['contentformat'] == '' ) {
- $params['contentformat'] = $contentHandler->getDefaultFormat();
+ $contentFormat = $contentHandler->getDefaultFormat();
+ } else {
+ $contentFormat = $params['contentformat'];
}
- $contentFormat = $params['contentformat'];
-
if ( !$contentHandler->isSupportedFormat( $contentFormat ) ) {
$this->dieUsage( "The requested format $contentFormat is not supported for content model " .
if ( !$newContent ) {
$this->dieUsageMsg( 'undo-failure' );
}
-
- $params['text'] = $newContent->serialize( $params['contentformat'] );
-
+ if ( empty( $params['contentmodel'] )
+ && empty( $params['contentformat'] )
+ ) {
+ // If we are reverting content model, the new content model
+ // might not support the current serialization format, in
+ // which case go back to the old serialization format,
+ // but only if the user hasn't specified a format/model
+ // parameter.
+ if ( !$newContent->isSupportedFormat( $contentFormat ) ) {
+ $contentFormat = $undoafterRev->getContentFormat();
+ }
+ // Override content model with model of undid revision.
+ $contentModel = $newContent->getModel();
+ }
+ $params['text'] = $newContent->serialize( $contentFormat );
// If no summary was given and we only undid one rev,
// use an autosummary
if ( is_null( $params['summary'] ) &&
$requestArray = [
'wpTextbox1' => $params['text'],
'format' => $contentFormat,
- 'model' => $contentHandler->getModelID(),
+ 'model' => $contentModel,
'wpEditToken' => $params['token'],
'wpIgnoreBlankSummary' => true,
'wpIgnoreBlankArticle' => true,
$ep->importFormData( $req );
$content = $ep->textbox1;
- // The following is needed to give the hook the full content of the
- // new revision rather than just the current section. (Bug 52077)
- if ( !is_null( $params['section'] ) &&
- $contentHandler->supportsSections() && $titleObj->exists()
- ) {
- // If sectiontitle is set, use it, otherwise use the summary as the section title (for
- // backwards compatibility with old forms/bots).
- if ( $ep->sectiontitle !== '' ) {
- $sectionTitle = $ep->sectiontitle;
- } else {
- $sectionTitle = $ep->summary;
- }
-
- $contentObj = $contentHandler->unserializeContent( $content, $contentFormat );
-
- $fullContentObj = $articleObject->replaceSectionContent(
- $params['section'],
- $contentObj,
- $sectionTitle
- );
- if ( $fullContentObj ) {
- $content = $fullContentObj->serialize( $contentFormat );
- } else {
- // This most likely means we have an edit conflict which means that the edit
- // wont succeed anyway.
- $this->dieUsageMsg( 'editconflict' );
- }
- }
-
// Run hooks
// Handle APIEditBeforeSave parameters
$r = [];
- if ( !Hooks::run( 'APIEditBeforeSave', [ $ep, $content, &$r ] ) ) {
+ // Deprecated in favour of EditFilterMergedContent
+ if ( !Hooks::run( 'APIEditBeforeSave', [ $ep, $content, &$r ], '1.28' ) ) {
if ( count( $r ) ) {
$r['result'] = 'Failure';
$apiResult->addValue( null, $this->getModuleName(), $r );
case EditPage::AS_END:
default:
- // $status came from WikiPage::doEdit()
+ // $status came from WikiPage::doEditContent()
$errors = $status->getErrorsArray();
$this->dieUsageMsg( $errors[0] ); // TODO: Add new errors to message map
break;