]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - maintenance/populateLogUsertext.php
MediaWiki 1.30.2 renames
[autoinstalls/mediawiki.git] / maintenance / populateLogUsertext.php
1 <?php
2 /**
3  * Makes the required database updates for Special:ProtectedPages
4  * to show all protected pages, even ones before the page restrictions
5  * schema change. All remaining page_restriction column values are moved
6  * to the new table.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  * http://www.gnu.org/copyleft/gpl.html
22  *
23  * @file
24  * @ingroup Maintenance
25  */
26
27 require_once __DIR__ . '/Maintenance.php';
28
29 /**
30  * Maintenance script that makes the required database updates for
31  * Special:ProtectedPages to show all protected pages.
32  *
33  * @ingroup Maintenance
34  */
35 class PopulateLogUsertext extends LoggedUpdateMaintenance {
36         public function __construct() {
37                 parent::__construct();
38                 $this->addDescription( 'Populates the log_user_text field' );
39                 $this->setBatchSize( 100 );
40         }
41
42         protected function getUpdateKey() {
43                 return 'populate log_usertext';
44         }
45
46         protected function updateSkippedMessage() {
47                 return 'log_user_text column of logging table already populated.';
48         }
49
50         protected function doDBUpdates() {
51                 $db = $this->getDB( DB_MASTER );
52                 $start = $db->selectField( 'logging', 'MIN(log_id)', false, __METHOD__ );
53                 if ( !$start ) {
54                         $this->output( "Nothing to do.\n" );
55
56                         return true;
57                 }
58                 $end = $db->selectField( 'logging', 'MAX(log_id)', false, __METHOD__ );
59
60                 # Do remaining chunk
61                 $end += $this->mBatchSize - 1;
62                 $blockStart = $start;
63                 $blockEnd = $start + $this->mBatchSize - 1;
64                 while ( $blockEnd <= $end ) {
65                         $this->output( "...doing log_id from $blockStart to $blockEnd\n" );
66                         $cond = "log_id BETWEEN $blockStart AND $blockEnd AND log_user = user_id";
67                         $res = $db->select( [ 'logging', 'user' ],
68                                 [ 'log_id', 'user_name' ], $cond, __METHOD__ );
69
70                         $this->beginTransaction( $db, __METHOD__ );
71                         foreach ( $res as $row ) {
72                                 $db->update( 'logging', [ 'log_user_text' => $row->user_name ],
73                                         [ 'log_id' => $row->log_id ], __METHOD__ );
74                         }
75                         $this->commitTransaction( $db, __METHOD__ );
76                         $blockStart += $this->mBatchSize;
77                         $blockEnd += $this->mBatchSize;
78                         wfWaitForSlaves();
79                 }
80                 $this->output( "Done populating log_user_text field.\n" );
81
82                 return true;
83         }
84 }
85
86 $maintClass = "PopulateLogUsertext";
87 require_once RUN_MAINTENANCE_IF_MAIN;