[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
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;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |