[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> populateRecentChangesSource.php (source)

   1  <?php
   2  /**
   3   * Upgrade script to populate the rc_source field
   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   */
  23  
  24  require_once  __DIR__ . '/Maintenance.php';
  25  
  26  /**
  27   * Maintenance script to populate the rc_source field.
  28   *
  29   * @ingroup Maintenance
  30   * @since 1.22
  31   */
  32  class PopulateRecentChangesSource extends LoggedUpdateMaintenance {
  33  	public function __construct() {
  34          parent::__construct();
  35          $this->mDescription =
  36              "Populates rc_source field of the recentchanges table with the data in rc_type.";
  37          $this->setBatchSize( 100 );
  38      }
  39  
  40  	protected function doDBUpdates() {
  41          $dbw = $this->getDB( DB_MASTER );
  42          if ( !$dbw->fieldExists( 'recentchanges', 'rc_source' ) ) {
  43              $this->error( 'rc_source field in recentchanges table does not exist.' );
  44          }
  45  
  46          $start = $dbw->selectField( 'recentchanges', 'MIN(rc_id)', false, __METHOD__ );
  47          if ( !$start ) {
  48              $this->output( "Nothing to do.\n" );
  49  
  50              return true;
  51          }
  52          $end = $dbw->selectField( 'recentchanges', 'MAX(rc_id)', false, __METHOD__ );
  53          $end += $this->mBatchSize - 1;
  54          $blockStart = $start;
  55          $blockEnd = $start + $this->mBatchSize - 1;
  56  
  57          $updatedValues = $this->buildUpdateCondition( $dbw );
  58  
  59          while ( $blockEnd <= $end ) {
  60              $cond = "rc_id BETWEEN $blockStart AND $blockEnd";
  61  
  62              $dbw->update(
  63                  'recentchanges',
  64                  array( $updatedValues ),
  65                  array(
  66                      "rc_source = ''",
  67                      "rc_id BETWEEN $blockStart AND $blockEnd"
  68                  ),
  69                  __METHOD__
  70              );
  71  
  72              $this->output( "." );
  73              wfWaitForSlaves();
  74  
  75              $blockStart += $this->mBatchSize;
  76              $blockEnd += $this->mBatchSize;
  77          }
  78  
  79          $this->output( "\nDone.\n" );
  80      }
  81  
  82  	protected function getUpdateKey() {
  83          return __CLASS__;
  84      }
  85  
  86  	protected function buildUpdateCondition( DatabaseBase $dbw ) {
  87          $rcNew = $dbw->addQuotes( RC_NEW );
  88          $rcSrcNew = $dbw->addQuotes( RecentChange::SRC_NEW );
  89          $rcEdit = $dbw->addQuotes( RC_EDIT );
  90          $rcSrcEdit = $dbw->addQuotes( RecentChange::SRC_EDIT );
  91          $rcLog = $dbw->addQuotes( RC_LOG );
  92          $rcSrcLog = $dbw->addQuotes( RecentChange::SRC_LOG );
  93          $rcExternal = $dbw->addQuotes( RC_EXTERNAL );
  94          $rcSrcExternal = $dbw->addQuotes( RecentChange::SRC_EXTERNAL );
  95  
  96          return "rc_source = CASE
  97                      WHEN rc_type = $rcNew THEN $rcSrcNew
  98                      WHEN rc_type = $rcEdit THEN $rcSrcEdit
  99                      WHEN rc_type = $rcLog THEN $rcSrcLog
 100                      WHEN rc_type = $rcExternal THEN $rcSrcExternal
 101                      ELSE ''
 102                  END";
 103      }
 104  }
 105  
 106  $maintClass = "PopulateRecentChangesSource";
 107  require_once RUN_MAINTENANCE_IF_MAIN;


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