If the default content model changes due to a page move, a NULL in
rev_content_model will now reference the new default, which is not how
the revision was serialized, causing an exception to be thrown.
This was caused by
a5bc9f49cd01e, since previously NULL would use the
correct, but techncially inaccurate, page_content_model.
Bug: T105260
Change-Id: I0c29d0e657ad0b656e5da6ba365f337229ad4dfd
$redirectContent = null;
}
$redirectContent = null;
}
+ // Figure out whether the content model is no longer the default
+ $oldDefault = ContentHandler::getDefaultModelFor( $this->oldTitle );
+ $contentModel = $this->oldTitle->getContentModel();
+ $newDefault = ContentHandler::getDefaultModelFor( $nt );
+ $defaultContentModelChanging = ( $oldDefault !== $newDefault
+ && $oldDefault === $contentModel );
+
// bug 57084: log_page should be the ID of the *moved* page
$oldid = $this->oldTitle->getArticleID();
$logTitle = clone $this->oldTitle;
// bug 57084: log_page should be the ID of the *moved* page
$oldid = $this->oldTitle->getArticleID();
$logTitle = clone $this->oldTitle;
$newpage->doEditUpdates( $nullRevision, $user,
array( 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ) );
$newpage->doEditUpdates( $nullRevision, $user,
array( 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ) );
+ // If the default content model changes, we need to populate rev_content_model
+ if ( $defaultContentModelChanging ) {
+ $dbw->update(
+ 'revision',
+ array( 'rev_content_model' => $contentModel ),
+ array( 'rev_page' => $nt->getArticleID(), 'rev_content_model IS NULL' ),
+ __METHOD__
+ );
+ }
+
if ( !$moveOverRedirect ) {
WikiPage::onArticleCreate( $nt );
}
if ( !$moveOverRedirect ) {
WikiPage::onArticleCreate( $nt );
}