]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - maintenance/deleteDefaultMessages.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / maintenance / deleteDefaultMessages.php
1 <?php
2 /**
3  * Deletes all pages in the MediaWiki namespace which were last edited by
4  * "MediaWiki default".
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  * http://www.gnu.org/copyleft/gpl.html
20  *
21  * @file
22  * @ingroup Maintenance
23  */
24
25 require_once __DIR__ . '/Maintenance.php';
26
27 /**
28  * Maintenance script that deletes all pages in the MediaWiki namespace
29  * which were last edited by "MediaWiki default".
30  *
31  * @ingroup Maintenance
32  */
33 class DeleteDefaultMessages extends Maintenance {
34         public function __construct() {
35                 parent::__construct();
36                 $this->addDescription( 'Deletes all pages in the MediaWiki namespace' .
37                         ' which were last edited by "MediaWiki default"' );
38                 $this->addOption( 'dry-run', 'Perform a dry run, delete nothing' );
39         }
40
41         public function execute() {
42                 global $wgUser;
43
44                 $this->output( "Checking existence of old default messages..." );
45                 $dbr = $this->getDB( DB_REPLICA );
46                 $res = $dbr->select( [ 'page', 'revision' ],
47                         [ 'page_namespace', 'page_title' ],
48                         [
49                                 'page_namespace' => NS_MEDIAWIKI,
50                                 'page_latest=rev_id',
51                                 'rev_user_text' => 'MediaWiki default',
52                         ]
53                 );
54
55                 if ( $dbr->numRows( $res ) == 0 ) {
56                         // No more messages left
57                         $this->output( "done.\n" );
58                         return;
59                 }
60
61                 $dryrun = $this->hasOption( 'dry-run' );
62                 if ( $dryrun ) {
63                         foreach ( $res as $row ) {
64                                 $title = Title::makeTitle( $row->page_namespace, $row->page_title );
65                                 $this->output( "\n* [[$title]]" );
66                         }
67                         $this->output( "\n\nRun again without --dry-run to delete these pages.\n" );
68                         return;
69                 }
70
71                 // Deletions will be made by $user temporarly added to the bot group
72                 // in order to hide it in RecentChanges.
73                 $user = User::newFromName( 'MediaWiki default' );
74                 if ( !$user ) {
75                         $this->error( "Invalid username", true );
76                 }
77                 $user->addGroup( 'bot' );
78                 $wgUser = $user;
79
80                 // Handle deletion
81                 $this->output( "\n...deleting old default messages (this may take a long time!)...", 'msg' );
82                 $dbw = $this->getDB( DB_MASTER );
83
84                 foreach ( $res as $row ) {
85                         wfWaitForSlaves();
86                         $dbw->ping();
87                         $title = Title::makeTitle( $row->page_namespace, $row->page_title );
88                         $page = WikiPage::factory( $title );
89                         $error = ''; // Passed by ref
90                         // FIXME: Deletion failures should be reported, not silently ignored.
91                         $page->doDeleteArticle( 'No longer required', false, 0, true, $error, $user );
92                 }
93
94                 $this->output( "done!\n", 'msg' );
95         }
96 }
97
98 $maintClass = "DeleteDefaultMessages";
99 require_once RUN_MAINTENANCE_IF_MAIN;