Let crazy people run updates on broken setups like 5.3.1
[lhc/web/wiklou.git] / maintenance / reassignEdits.php
index daed219..e595e5b 100644 (file)
@@ -2,40 +2,56 @@
 /**
  * Reassign edits from a user or IP address to another user
  *
+ * 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
+ *
  * @ingroup Maintenance
  * @author Rob Church <robchur@gmail.com>
  * @licence GNU General Public Licence 2.0 or later
  */
 
-require_once( "Maintenance.php" );
+require_once( dirname(__FILE__) . '/Maintenance.php' );
 
 class ReassignEdits extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Reassign edits from one user to another";
-               $this->addParam( "force", "Reassign even if the target user doesn't exist" );
-               $this->addParam( "norc", "Don't update the recent changes table" );
-               $this->addParam( "report", "Print out details of what would be changed, but don't update it" );
-               $this->addArgs( array( 'from', 'to' ) );
+               $this->addOption( "force", "Reassign even if the target user doesn't exist" );
+               $this->addOption( "norc", "Don't update the recent changes table" );
+               $this->addOption( "report", "Print out details of what would be changed, but don't update it" );
+               $this->addArg( 'from', 'Old user to take edits from' );
+               $this->addArg( 'to', 'New user to give edits to' );
        }
        
        public function execute() {
                if( $this->hasArg(0) && $this->hasArg(1) ) {
                        # Set up the users involved
-                       $from =& $this->initialiseUser( $this->getArg(0) );
-                       $to   =& $this->initialiseUser( $this->getArg(1) );
+                       $from = $this->initialiseUser( $this->getArg(0) );
+                       $to   = $this->initialiseUser( $this->getArg(1) );
        
                        # If the target doesn't exist, and --force is not set, stop here
                        if( $to->getId() || $this->hasOption('force') ) {
                                # Reassign the edits
                                $report = $this->hasOption('report');
-                               $count = $this->reassignEdits( $from, $to, !$this->hasOption('norc'), $report );
+                               $count = $this->doReassignEdits( $from, $to, !$this->hasOption('norc'), $report );
                                # If reporting, and there were items, advise the user to run without --report   
                                if( $report )
                                        $this->output( "Run the script again without --report to update.\n" );
                        } else {
                                $ton = $to->getName();
-                               $this->error( "User '{$ton}' not found.\n" );
+                               $this->error( "User '{$ton}' not found." );
                        }
                }
        }
@@ -49,9 +65,9 @@ class ReassignEdits extends Maintenance {
         * @param $report Don't change things; just echo numbers
         * @return integer Number of entries changed, or that would be changed
         */
-       private function reassignEdits( &$from, &$to, $rc = false, $report = false ) {
+       private function doReassignEdits( &$from, &$to, $rc = false, $report = false ) {
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->immediateBegin();
+               $dbw->begin();
 
                # Count things
                $this->output( "Checking current edits..." );
@@ -84,9 +100,9 @@ class ReassignEdits extends Maintenance {
                        if( $total ) {
                                # Reassign edits
                                $this->output( "\nReassigning current edits..." );
-                               $res = $dbw->update( 'revision', userSpecification( $to, 'rev_user', 'rev_user_text' ), $this->userConditions( $from, 'rev_user', 'rev_user_text' ), __METHOD__ );
+                               $res = $dbw->update( 'revision', $this->userSpecification( $to, 'rev_user', 'rev_user_text' ), $this->userConditions( $from, 'rev_user', 'rev_user_text' ), __METHOD__ );
                                $this->output( "done.\nReassigning deleted edits..." );
-                               $res = $dbw->update( 'archive', userSpecification( $to, 'ar_user', 'ar_user_text' ), $this->userConditions( $from, 'ar_user', 'ar_user_text' ), __METHOD__ );
+                               $res = $dbw->update( 'archive', $this->userSpecification( $to, 'ar_user', 'ar_user_text' ), $this->userConditions( $from, 'ar_user', 'ar_user_text' ), __METHOD__ );
                                $this->output( "done.\n" );
                                # Update recent changes if required
                                if( $rc ) {
@@ -97,7 +113,7 @@ class ReassignEdits extends Maintenance {
                        }       
                }
        
-               $dbw->immediateCommit();
+               $dbw->commit();
                return (int)$total;     
        }