]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - maintenance/deleteOldRevisions.inc
MediaWiki 1.15.5
[autoinstallsdev/mediawiki.git] / maintenance / deleteOldRevisions.inc
1 <?php
2 /**
3  * Support functions for the deleteOldRevisions script
4  *
5  * @file
6  * @ingroup Maintenance
7  * @author Rob Church <robchur@gmail.com>
8  */
9  
10 require_once( 'purgeOldText.inc' );
11
12 function DeleteOldRevisions( $delete = false, $args = array() ) {
13
14         # Data should come off the master, wrapped in a transaction
15         $dbw = wfGetDB( DB_MASTER );
16         $dbw->begin();
17         
18         $tbl_pag = $dbw->tableName( 'page' );
19         $tbl_rev = $dbw->tableName( 'revision' );
20         
21         $pageIdClause = '';
22         $revPageClause = '';
23         
24         # If a list of page_ids was provided, limit results to that set of page_ids
25         if ( sizeof( $args ) > 0 ) {
26                 $pageIdList = implode( ',', $args );
27                 $pageIdClause = " WHERE page_id IN ({$pageIdList})";
28                 $revPageClause = " AND rev_page IN ({$pageIdList})";
29                 echo( "Limiting to {$tbl_pag}.page_id IN ({$pageIdList})\n" );
30         }
31         
32         # Get "active" revisions from the page table
33         echo( "Searching for active revisions..." );
34         $res = $dbw->query( "SELECT page_latest FROM $tbl_pag{$pageIdClause}" );
35         while( $row = $dbw->fetchObject( $res ) ) {
36                 $cur[] = $row->page_latest;
37         }
38         echo( "done.\n" );
39         
40         # Get all revisions that aren't in this set
41         echo( "Searching for inactive revisions..." );
42         $set = implode( ', ', $cur );
43         $res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_id NOT IN ( $set ){$revPageClause}" );
44         while( $row = $dbw->fetchObject( $res ) ) {
45                 $old[] = $row->rev_id;
46         }
47         echo( "done.\n" );
48         
49         # Inform the user of what we're going to do
50         $count = count( $old );
51         echo( "$count old revisions found.\n" );
52         
53         # Delete as appropriate
54         if( $delete && $count ) {
55                 echo( "Deleting..." );
56                 $set = implode( ', ', $old );
57                 $dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" );
58                 echo( "done.\n" );
59         }
60         
61         # This bit's done
62         # Purge redundant text records
63         $dbw->commit();
64         if( $delete ) {
65                 PurgeRedundantText( true );
66         }
67
68 }