MediaWiki
REL1_24
|
00001 <?php 00024 require_once __DIR__ . '/Maintenance.php'; 00025 00032 class DeleteRevision extends Maintenance { 00033 00034 public function __construct() { 00035 parent::__construct(); 00036 $this->mDescription = "Delete one or more revisions by moving them to the archive table"; 00037 } 00038 00039 public function execute() { 00040 if ( count( $this->mArgs ) == 0 ) { 00041 $this->error( "No revisions specified", true ); 00042 } 00043 00044 $this->output( "Deleting revision(s) " . implode( ',', $this->mArgs ) . 00045 " from " . wfWikiID() . "...\n" ); 00046 $dbw = wfGetDB( DB_MASTER ); 00047 00048 $affected = 0; 00049 foreach ( $this->mArgs as $revID ) { 00050 $dbw->insertSelect( 'archive', array( 'page', 'revision' ), 00051 array( 00052 'ar_namespace' => 'page_namespace', 00053 'ar_title' => 'page_title', 00054 'ar_page_id' => 'page_id', 00055 'ar_comment' => 'rev_comment', 00056 'ar_user' => 'rev_user', 00057 'ar_user_text' => 'rev_user_text', 00058 'ar_timestamp' => 'rev_timestamp', 00059 'ar_minor_edit' => 'rev_minor_edit', 00060 'ar_rev_id' => 'rev_id', 00061 'ar_text_id' => 'rev_text_id', 00062 'ar_deleted' => 'rev_deleted', 00063 'ar_len' => 'rev_len', 00064 ), 00065 array( 00066 'rev_id' => $revID, 00067 'page_id = rev_page' 00068 ), 00069 __METHOD__ 00070 ); 00071 if ( !$dbw->affectedRows() ) { 00072 $this->output( "Revision $revID not found\n" ); 00073 } else { 00074 $affected += $dbw->affectedRows(); 00075 $pageID = $dbw->selectField( 00076 'revision', 00077 'rev_page', 00078 array( 'rev_id' => $revID ), 00079 __METHOD__ 00080 ); 00081 $pageLatest = $dbw->selectField( 00082 'page', 00083 'page_latest', 00084 array( 'page_id' => $pageID ), 00085 __METHOD__ 00086 ); 00087 $dbw->delete( 'revision', array( 'rev_id' => $revID ) ); 00088 if ( $pageLatest == $revID ) { 00089 // Database integrity 00090 $newLatest = $dbw->selectField( 00091 'revision', 00092 'rev_id', 00093 array( 'rev_page' => $pageID ), 00094 __METHOD__, 00095 array( 'ORDER BY' => 'rev_timestamp DESC' ) 00096 ); 00097 $dbw->update( 00098 'page', 00099 array( 'page_latest' => $newLatest ), 00100 array( 'page_id' => $pageID ), 00101 __METHOD__ 00102 ); 00103 } 00104 } 00105 } 00106 $this->output( "Deleted $affected revisions\n" ); 00107 } 00108 } 00109 00110 $maintClass = "DeleteRevision"; 00111 require_once RUN_MAINTENANCE_IF_MAIN;