From d73fb3713ec30f681fb37a635897f5e0601cd3d8 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sun, 30 May 2010 18:00:01 +0000 Subject: [PATCH] New feature RevisionMove (bug 21312). Introducing SpecialRevisionMove.php and revisionmove permission. Experimental, use at own risk (no group has this permission by default, so it should not break anything unless you are foolish enough to experiment with it :)) --- includes/Article.php | 10 +- includes/AutoLoader.php | 1 + includes/DefaultSettings.php | 1 + includes/HistoryPage.php | 21 +- includes/LogPage.php | 2 +- includes/SpecialPage.php | 1 + includes/Wiki.php | 7 + includes/specials/SpecialRevisionMove.php | 390 ++++++++++++++++++++++ languages/messages/MessagesEn.php | 27 +- maintenance/language/messages.inc | 18 + 10 files changed, 471 insertions(+), 7 deletions(-) create mode 100644 includes/specials/SpecialRevisionMove.php diff --git a/includes/Article.php b/includes/Article.php index 5b56bd4633..597f6e3a79 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -1790,10 +1790,12 @@ class Article { * on. * @param $lastRevIsRedirect Boolean: if given, will optimize adding and * removing rows in redirect table. + * @param $setNewFlag Boolean: Set to true if a page flag should be set + * Needed when $lastRevision has to be set to sth. !=0 * @return bool true on success, false on failure * @private */ - public function updateRevisionOn( &$dbw, $revision, $lastRevision = null, $lastRevIsRedirect = null ) { + public function updateRevisionOn( &$dbw, $revision, $lastRevision = null, $lastRevIsRedirect = null, $setNewFlag = false ) { wfProfileIn( __METHOD__ ); $text = $revision->getText(); @@ -1806,11 +1808,15 @@ class Article { $conditions['page_latest'] = $lastRevision; } + if ( !$setNewFlag ) { + $setNewFlag = ( $lastRevision === 0 ); + } + $dbw->update( 'page', array( /* SET */ 'page_latest' => $revision->getId(), 'page_touched' => $dbw->timestamp(), - 'page_is_new' => ( $lastRevision === 0 ) ? 1 : 0, + 'page_is_new' => $setNewFlag, 'page_is_redirect' => $rt !== null ? 1 : 0, 'page_len' => strlen( $text ), ), diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index ef49db29c3..ac03524013 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -571,6 +571,7 @@ $wgAutoloadLocalClasses = array( 'RevDel_ArchivedFileItem' => 'includes/RevisionDelete.php', 'RevDel_LogList' => 'includes/RevisionDelete.php', 'RevDel_LogItem' => 'includes/RevisionDelete.php', + 'SpecialRevisionMove' => 'includes/specials/SpecialRevisionMove.php', 'ShortPagesPage' => 'includes/specials/SpecialShortpages.php', 'SpecialActiveUsers' => 'includes/specials/SpecialActiveusers.php', 'SpecialAllpages' => 'includes/specials/SpecialAllpages.php', diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 611cc6e767..ca40b4077f 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -3326,6 +3326,7 @@ $wgLogActions = array( 'upload/revert' => 'uploadedimage', 'move/move' => '1movedto2', 'move/move_redir' => '1movedto2_redir', + 'move/move_rev' => 'moverevlogentry', 'import/upload' => 'import-logentry-upload', 'import/interwiki' => 'import-logentry-interwiki', 'merge/merge' => 'pagemerge-logentry', diff --git a/includes/HistoryPage.php b/includes/HistoryPage.php index a62d9a16f0..a9e13b4573 100644 --- a/includes/HistoryPage.php +++ b/includes/HistoryPage.php @@ -395,6 +395,20 @@ class HistoryPager extends ReverseChronologicalPager { wfMsg( 'showhideselectedversions' ) ) . "\n"; } + if( $wgUser->isAllowed( 'revisionmove' ) ) { + $float = $wgContLang->alignEnd(); + # Note bug #20966,