[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Delete one or more revisions by moving them to the archive table. 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 that deletes one or more revisions by moving them 28 * to the archive table. 29 * 30 * @ingroup Maintenance 31 */ 32 class DeleteRevision extends Maintenance { 33 34 public function __construct() { 35 parent::__construct(); 36 $this->mDescription = "Delete one or more revisions by moving them to the archive table"; 37 } 38 39 public function execute() { 40 if ( count( $this->mArgs ) == 0 ) { 41 $this->error( "No revisions specified", true ); 42 } 43 44 $this->output( "Deleting revision(s) " . implode( ',', $this->mArgs ) . 45 " from " . wfWikiID() . "...\n" ); 46 $dbw = wfGetDB( DB_MASTER ); 47 48 $affected = 0; 49 foreach ( $this->mArgs as $revID ) { 50 $dbw->insertSelect( 'archive', array( 'page', 'revision' ), 51 array( 52 'ar_namespace' => 'page_namespace', 53 'ar_title' => 'page_title', 54 'ar_page_id' => 'page_id', 55 'ar_comment' => 'rev_comment', 56 'ar_user' => 'rev_user', 57 'ar_user_text' => 'rev_user_text', 58 'ar_timestamp' => 'rev_timestamp', 59 'ar_minor_edit' => 'rev_minor_edit', 60 'ar_rev_id' => 'rev_id', 61 'ar_text_id' => 'rev_text_id', 62 'ar_deleted' => 'rev_deleted', 63 'ar_len' => 'rev_len', 64 ), 65 array( 66 'rev_id' => $revID, 67 'page_id = rev_page' 68 ), 69 __METHOD__ 70 ); 71 if ( !$dbw->affectedRows() ) { 72 $this->output( "Revision $revID not found\n" ); 73 } else { 74 $affected += $dbw->affectedRows(); 75 $pageID = $dbw->selectField( 76 'revision', 77 'rev_page', 78 array( 'rev_id' => $revID ), 79 __METHOD__ 80 ); 81 $pageLatest = $dbw->selectField( 82 'page', 83 'page_latest', 84 array( 'page_id' => $pageID ), 85 __METHOD__ 86 ); 87 $dbw->delete( 'revision', array( 'rev_id' => $revID ) ); 88 if ( $pageLatest == $revID ) { 89 // Database integrity 90 $newLatest = $dbw->selectField( 91 'revision', 92 'rev_id', 93 array( 'rev_page' => $pageID ), 94 __METHOD__, 95 array( 'ORDER BY' => 'rev_timestamp DESC' ) 96 ); 97 $dbw->update( 98 'page', 99 array( 'page_latest' => $newLatest ), 100 array( 'page_id' => $pageID ), 101 __METHOD__ 102 ); 103 } 104 } 105 } 106 $this->output( "Deleted $affected revisions\n" ); 107 } 108 } 109 110 $maintClass = "DeleteRevision"; 111 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 |