[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> moveBatch.php (source)

   1  <?php
   2  /**
   3   * Move a batch of pages.
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the GNU General Public License as published by
   7   * the Free Software Foundation; either version 2 of the License, or
   8   * (at your option) any later version.
   9   *
  10   * This program is distributed in the hope that it will be useful,
  11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13   * GNU General Public License for more details.
  14   *
  15   * You should have received a copy of the GNU General Public License along
  16   * with this program; if not, write to the Free Software Foundation, Inc.,
  17   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18   * http://www.gnu.org/copyleft/gpl.html
  19   *
  20   * @file
  21   * @ingroup Maintenance
  22   * @author Tim Starling
  23   *
  24   * USAGE: php moveBatch.php [-u <user>] [-r <reason>] [-i <interval>] [-noredirects] [listfile]
  25   *
  26   * [listfile] - file with two titles per line, separated with pipe characters;
  27   * the first title is the source, the second is the destination.
  28   * Standard input is used if listfile is not given.
  29   * <user> - username to perform moves as
  30   * <reason> - reason to be given for moves
  31   * <interval> - number of seconds to sleep after each move
  32   * <noredirects> - suppress creation of redirects
  33   *
  34   * This will print out error codes from Title::moveTo() if something goes wrong,
  35   * e.g. immobile_namespace for namespaces which can't be moved
  36   */
  37  
  38  require_once  __DIR__ . '/Maintenance.php';
  39  
  40  /**
  41   * Maintenance script to move a batch of pages.
  42   *
  43   * @ingroup Maintenance
  44   */
  45  class MoveBatch extends Maintenance {
  46  	public function __construct() {
  47          parent::__construct();
  48          $this->mDescription = "Moves a batch of pages";
  49          $this->addOption( 'u', "User to perform move", false, true );
  50          $this->addOption( 'r', "Reason to move page", false, true );
  51          $this->addOption( 'i', "Interval to sleep between moves" );
  52          $this->addOption( 'noredirects', "Suppress creation of redirects" );
  53          $this->addArg( 'listfile', 'List of pages to move, newline delimited', false );
  54      }
  55  
  56  	public function execute() {
  57          global $wgUser;
  58  
  59          # Change to current working directory
  60          $oldCwd = getcwd();
  61          chdir( $oldCwd );
  62  
  63          # Options processing
  64          $user = $this->getOption( 'u', 'Move page script' );
  65          $reason = $this->getOption( 'r', '' );
  66          $interval = $this->getOption( 'i', 0 );
  67          $noredirects = $this->getOption( 'noredirects', false );
  68          if ( $this->hasArg() ) {
  69              $file = fopen( $this->getArg(), 'r' );
  70          } else {
  71              $file = $this->getStdin();
  72          }
  73  
  74          # Setup
  75          if ( !$file ) {
  76              $this->error( "Unable to read file, exiting", true );
  77          }
  78          $wgUser = User::newFromName( $user );
  79          if ( !$wgUser ) {
  80              $this->error( "Invalid username", true );
  81          }
  82  
  83          # Setup complete, now start
  84          $dbw = wfGetDB( DB_MASTER );
  85          // @codingStandardsIgnoreStart Ignore avoid function calls in a FOR loop test part warning
  86          for ( $linenum = 1; !feof( $file ); $linenum++ ) {
  87              // @codingStandardsIgnoreEnd
  88              $line = fgets( $file );
  89              if ( $line === false ) {
  90                  break;
  91              }
  92              $parts = array_map( 'trim', explode( '|', $line ) );
  93              if ( count( $parts ) != 2 ) {
  94                  $this->error( "Error on line $linenum, no pipe character" );
  95                  continue;
  96              }
  97              $source = Title::newFromText( $parts[0] );
  98              $dest = Title::newFromText( $parts[1] );
  99              if ( is_null( $source ) || is_null( $dest ) ) {
 100                  $this->error( "Invalid title on line $linenum" );
 101                  continue;
 102              }
 103  
 104              $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
 105              $dbw->begin( __METHOD__ );
 106              $err = $source->moveTo( $dest, false, $reason, !$noredirects );
 107              if ( $err !== true ) {
 108                  $msg = array_shift( $err[0] );
 109                  $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
 110              }
 111              $dbw->commit( __METHOD__ );
 112              $this->output( "\n" );
 113  
 114              if ( $interval ) {
 115                  sleep( $interval );
 116              }
 117              wfWaitForSlaves();
 118          }
 119      }
 120  }
 121  
 122  $maintClass = "MoveBatch";
 123  require_once RUN_MAINTENANCE_IF_MAIN;


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1