* (bug 18698) Renaming non entry point maintenance scripts from .inc.php to .inc
[lhc/web/wiklou.git] / maintenance / deleteOrphanedRevisions.php
1 <?php
2
3 /**
4 * Maintenance script to delete revisions which refer to a nonexisting page
5 * Sometimes manual deletion done in a rush leaves crap in the database
6 *
7 * @file
8 * @ingroup Maintenance
9 * @author Rob Church <robchur@gmail.com>
10 * @todo More efficient cleanup of text records
11 */
12
13 $options = array( 'report', 'help' );
14 require_once( 'commandLine.inc' );
15 require_once( 'deleteOrphanedRevisions.inc' );
16 echo( "Delete Orphaned Revisions\n" );
17
18 if( isset( $options['help'] ) ) {
19 showUsage();
20 exit(1);
21 }
22
23 $report = isset( $options['report'] );
24
25 $dbw = wfGetDB( DB_MASTER );
26 $dbw->immediateBegin();
27 extract( $dbw->tableNames( 'page', 'revision' ) );
28
29 # Find all the orphaned revisions
30 echo( "Checking for orphaned revisions..." );
31 $sql = "SELECT rev_id FROM {$revision} LEFT JOIN {$page} ON rev_page = page_id WHERE page_namespace IS NULL";
32 $res = $dbw->query( $sql, 'deleteOrphanedRevisions' );
33
34 # Stash 'em all up for deletion (if needed)
35 while( $row = $dbw->fetchObject( $res ) )
36 $revisions[] = $row->rev_id;
37 $dbw->freeResult( $res );
38 $count = count( $revisions );
39 echo( "found {$count}.\n" );
40
41 # Nothing to do?
42 if( $report || $count == 0 ) {
43 $dbw->immediateCommit();
44 exit(0);
45 }
46
47 # Delete each revision
48 echo( "Deleting..." );
49 deleteRevisions( $revisions, $dbw );
50 echo( "done.\n" );
51
52 # Close the transaction and call the script to purge unused text records
53 $dbw->immediateCommit();
54 require_once( 'purgeOldText.inc' );
55 PurgeRedundantText( true );
56