Followup r80122, protected, just incase it's needed..
[lhc/web/wiklou.git] / includes / specials / SpecialRevisionMove.php
index 4aa5e10..7e5e828 100644 (file)
@@ -1,8 +1,30 @@
 <?php
+/**
+ * Implements Special:RevisionMove
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
 /**
  * Special page allowing users with the appropriate permissions to
  * move revisions of a page to a new target (either an existing page or not)
- * 
+ *
  * The user selects revisions in the page history (HistoryPage.php),
  * clicks on the submit button and gets this special page.
  * A form is shown (showForm()) where the user has to enter a target page
  * If the target doesn't exist, a new page gets created. rev_page of the
  * selected revisions is updated, after that it is determined whether page_latest
  * of the target page and the source page require an update.
- * 
+ *
  * **** NOTE: This feature is EXPERIMENTAL.  ****
  * **** Do not use on any productive system. ****
- * 
- * @file
+ *
  * @ingroup SpecialPage
- */
-
-/* TODO In case page_deleted gets introduced some day, use it.
- *      Currently it is possible with RevisionMove to make the latest revision
- *      of a page a RevisionDeleted one. When that happens, the user is presented
- *      an empty page with no error message whatsoever (in case he is not permitted
- *      to view deleted edits).
+ * @todo In case page_deleted gets introduced some day, use it.
+ *       Currently it is possible with RevisionMove to make the latest revision
+ *       of a page a RevisionDeleted one. When that happens, the user is presented
+ *       an empty page with no error message whatsoever (in case he is not permitted
+ *       to view deleted edits).
 */
-
 class SpecialRevisionMove extends UnlistedSpecialPage {
-
        # common objects
        var $mOldTitle; # Title object.
        var $mNewTitle; # Title object. Desired new title
@@ -48,11 +65,11 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
 
        /**
         * @param $par subpage part, standard special page parameter, is ignored here
-        * 
+        *
         * Mostly initializes variables and calls either showForm() or submit()
         */
-       public function execute( $par = '' ) {
-               global $wgUser, $wgOut, $wgSkin;
+       public function execute( $par ) {
+               global $wgUser, $wgOut;
 
                $this->setHeaders();
                $this->outputHeader();
@@ -60,6 +77,7 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                $this->mIsAllowedRevisionMove = $wgUser->isAllowed( 'revisionmove' );
                $this->user = $wgUser;
                $this->skin = $wgUser->getSkin();
+
                if ( !$this->request instanceof WebRequest ) {
                        $this->request = $GLOBALS['wgRequest'];
                }
@@ -107,7 +125,6 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                } else {
                        $this->showForm();
                }
-
        }
 
        /**
@@ -129,14 +146,14 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                }
 
                $out = Xml::openElement( 'form', array( 'method' => 'post',
-                               'action' => $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) ), 
+                               'action' => $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) ),
                                'id' => 'mw-revmove-form' ) ) .
                        Xml::fieldset( wfMsg( 'revmove-legend' ) ) .
-                       Xml::hidden( 'wpEditToken', $wgUser->editToken() ) .
-                       Xml::hidden( 'oldTitle', $this->mOldTitle->getPrefixedText() ) .
+                       Html::hidden( 'wpEditToken', $wgUser->editToken() ) .
+                       Html::hidden( 'oldTitle', $this->mOldTitle->getPrefixedText() ) .
                        '<div>' . Xml::inputLabel( wfMsg( 'revmove-reasonfield' ), 'wpReason', 'revmove-reasonfield', 60 ) . '</div>' .
                        Xml::inputLabel( wfMsg( 'revmove-titlefield' ), 'newTitle', 'revmove-titlefield', 20, $this->mOldTitle->getPrefixedText() ) .
-                       Xml::hidden( 'ids', implode( ',', $this->mIds ) ) . 
+                       Html::hidden( 'ids', implode( ',', $this->mIds ) ) .
                        Xml::submitButton( wfMsg( 'revmove-submit' ),
                                                        array( 'name' => 'wpSubmit' ) ) .
                        Xml::closeElement( 'fieldset' ) . "\n" .
@@ -167,18 +184,19 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                }
 
                # No valid revisions specified (e.g. only revs belonging to another page)
-               if( $numRevisions == 0 ) {
+               if ( $numRevisions == 0 ) {
                        $wgOut->showErrorPage( 'revmove-norevisions-title', 'revmove-norevisions' );
                        return false;
                }
-               
+
                $wgOut->addHTML( "</ul>" );
+
                return true;
        }
 
        /**
         * Submit the posted changes (in $this->request).
-        * 
+        *
         * This function does some checks and then calls moveRevisions(), which does the real work
         */
        public function submit() {
@@ -190,8 +208,9 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                        $wgOut->showPermissionsErrorPage( $permErrors, 'revisionmove' );
                        return false;
                }
+
                # Confirm Token
-               if( !$wgUser->matchEditToken( $this->request->getVal( 'wpEditToken' ) ) ) {
+               if ( !$wgUser->matchEditToken( $this->request->getVal( 'wpEditToken' ) ) ) {
                        $wgOut->showErrorPage( 'sessionfailure-title', 'sessionfailure' );
                        return false;
                }
@@ -215,8 +234,6 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
         * This function actually move the revision. NEVER call this function, call submit()
         */
        protected function moveRevisions() {
-               global $wgOut;
-
                $oldArticle = new Article( $this->mOldTitle );
                $newArticle = new Article( $this->mNewTitle );
 
@@ -238,7 +255,7 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                # Update revision table
                $dbw->update( 'revision',
                        array( 'rev_page' => $this->mNewTitle->getArticleID() ),
-                       array( 
+                       array(
                                'rev_id IN (' . $idstring . ')',
                                'rev_page' => $this->mOldTitle->getArticleID(),
                        ),
@@ -248,7 +265,7 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
 
                # Check if we need to update page_latest
                # Get the latest version of the revisions we are moving
-               $timestampNewPage = $this->queryLatestTimestamp( 
+               $timestampNewPage = $this->queryLatestTimestamp(
                        $dbw,
                        $this->mNewTitle->getArticleID(),
                        array( 'rev_id IN (' . $idstring . ')' )
@@ -260,17 +277,17 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                $currentNewPageRev = Revision::newFromId( $this->mNewTitle->getLatestRevID() );
                if ( $this->createArticle || $timestampNewPage > $currentNewPageRev->getTimestamp() ) {
                        # we have to set page_latest to $timestampNewPage's revid
-                       $this->updatePageLatest( 
-                               $dbw, 
+                       $this->updatePageLatest(
+                               $dbw,
                                $this->mNewTitle,
                                $newArticle,
-                               $timestampNewPage, 
+                               $timestampNewPage,
                                array( 'rev_id IN (' . $idstring . ')' )
                        );
                }
 
                # Update the old page's page_latest field
-               $timestampOldPage = $this->queryLatestTimestamp( 
+               $timestampOldPage = $this->queryLatestTimestamp(
                        $dbw,
                        $this->mOldTitle->getArticleID()
                );
@@ -284,13 +301,12 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                                array( 'page_id = ' . $this->mOldTitle->getArticleID() ),
                                __METHOD__
                        );
-                       $deletedOldPage = true;
                } else {
                        # page_latest has to be updated
                        $currentOldPageRev = Revision::newFromId( $this->mOldTitle->getLatestRevID() );
                        if ( $timestampOldPage < $currentOldPageRev->getTimestamp() ) {
-                               $this->updatePageLatest( 
-                                       $dbw, 
+                               $this->updatePageLatest(
+                                       $dbw,
                                        $this->mOldTitle,
                                        $oldArticle,
                                        $timestampOldPage
@@ -318,13 +334,13 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
         * @param &$dbw Database object (Master)
         * @param $articleId Integer page_id
         * @param $conds array database conditions
-        * 
+        *
         * @return String timestamp
         */
        protected function queryLatestTimestamp( &$dbw, $articleId, $conds = array() ) {
-               $timestampNewRow = $dbw->selectRow( 
-                       'revision', 
-                       'max(rev_timestamp) as maxtime',
+               $timestampNewRow = $dbw->selectRow(
+                       'revision',
+                       'max(rev_timestamp) AS maxtime',
                        array_merge( array( 'rev_page' => $articleId ), $conds ),
                        __METHOD__
                );
@@ -334,19 +350,19 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
        /**
         * Updates page_latest and similar database fields (see Article::updateRevisionOn).
         * Called two times, for the new and the old page
-        * 
+        *
         * @param &$dbw Database object (Master)
         * @param $articleTitle Title object of the page
         * @param $articleObj Article object of the page
         * @param $timestamp to search for (use queryLatestTimestamp to get the latest)
         * @param $conds array database conditions
-        * 
+        *
         * @return boolean indicating success
         */
        protected function updatePageLatest( &$dbw, $articleTitle, &$articleObj, $timestamp, $conds = array() ) {
                # Query to find out the rev_id
-               $revisionRow = $dbw->selectRow( 
-                       'revision', 
+               $revisionRow = $dbw->selectRow(
+                       'revision',
                        'rev_id',
                        array_merge( array(
                                'rev_timestamp' => $timestamp,
@@ -354,6 +370,7 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                        ), $conds ),
                        __METHOD__
                );
+
                # Update page_latest
                $latestRev = Revision::newFromId( $revisionRow->rev_id );
                return $articleObj->updateRevisionOn( $dbw, $latestRev, $articleTitle->getLatestRevID(), null, /* set new page flag */  true );
@@ -367,19 +384,19 @@ class SpecialRevisionMove extends UnlistedSpecialPage {
                        $this->mNewTitle->getPrefixedText(),
                        $modifiedRevsNum
                );
+
                $log = new LogPage( 'move' );
                $log->addEntry( 'move_rev', $this->mOldTitle, $this->mReason, $paramArray, $this->user );
-
        }
 
        protected function showSuccess( $modifiedRevsNum ) {
                global $wgOut;
 
                if ( $this->createArticle ) {
-                       $wgOut->addWikiMsg( 'revmove-success-created', $modifiedRevsNum, 
+                       $wgOut->addWikiMsg( 'revmove-success-created', $modifiedRevsNum,
                                $this->mOldTitle->getPrefixedText(), $this->mNewTitle->getPrefixedText() );
                } else {
-                       $wgOut->addWikiMsg( 'revmove-success-existing', $modifiedRevsNum, 
+                       $wgOut->addWikiMsg( 'revmove-success-existing', $modifiedRevsNum,
                                $this->mOldTitle->getPrefixedText(), $this->mNewTitle->getPrefixedText() );
                }
        }