From: Kunal Mehta Date: Fri, 24 Jul 2015 22:58:22 +0000 (-0700) Subject: Populate rev_content_model when a move causes default content model to change X-Git-Tag: 1.31.0-rc.0~10593^2 X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=commitdiff_plain;h=0ce88ddfb2a636104896d75e3a5fb932545dff9b;p=lhc%2Fweb%2Fwiklou.git Populate rev_content_model when a move causes default content model to change 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 --- diff --git a/includes/MovePage.php b/includes/MovePage.php index 9891106022..964fbffff6 100644 --- a/includes/MovePage.php +++ b/includes/MovePage.php @@ -416,6 +416,13 @@ class MovePage { $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; @@ -493,6 +500,16 @@ class MovePage { $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 ); }