API * Implemented backlinks / imagelinks / embeddedin modules
[mediawiki.git] / maintenance / nukePage.inc
blob921faba6d28868302dce95fd2b8ddbe0a8f0be1d
1 <?php
3 /**
4  * Support functions for the nukeArticle script
5  *
6  * @package MediaWiki
7  * @subpackage Maintenance
8  * @author Rob Church <robchur@gmail.com>
9  */
11 require_once( 'purgeOldText.inc' );
13 function NukePage( $name, $delete = false ) {
15         $dbw =& wfGetDB( DB_MASTER );
16         $dbw->begin();
17         
18         $tbl_pag = $dbw->tableName( 'page' );
19         $tbl_rec = $dbw->tableName( 'recentchanges' );
20         $tbl_rev = $dbw->tableName( 'revision' );
21         
22         # Get page ID
23         echo( "Searching for \"$name\"..." );
24         $title = Title::newFromText( $name );
25         if( $title ) {
26                 $id   = $title->getArticleID();
27                 $real = $title->getPrefixedText();
28                 echo( "found \"$real\" with ID $id.\n" );
29                 
30                 # Get corresponding revisions
31                 echo( "Searching for revisions..." );
32                 $res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_page = $id" );
33                 while( $row = $dbw->fetchObject( $res ) ) {
34                         $revs[] = $row->rev_id;
35                 }
36                 $count = count( $revs );
37                 echo( "found $count.\n" );
38                 
39                 # Delete the page record and associated recent changes entries
40                 if( $delete ) {
41                         echo( "Deleting page record..." );
42                         $dbw->query( "DELETE FROM $tbl_pag WHERE page_id = $id" );
43                         echo( "done.\n" );
44                         echo( "Cleaning up recent changes..." );
45                         $dbw->query( "DELETE FROM $tbl_rec WHERE rc_cur_id = $id" );
46                         echo( "done.\n" );
47                 }
49                 $dbw->commit();
50                 
51                 # Delete revisions as appropriate
52                 if( $delete && $count ) {
53                         echo( "Deleting revisions..." );
54                         DeleteRevisions( $revs );
55                         echo( "done.\n" );
56                         PurgeRedundantText( true );
57                 }
58                 
59         } else {
60                 echo( "not found in database.\n" );
61                 $dbw->commit();
62         }
63         
66 function DeleteRevisions( $ids ) {
68         $dbw =& wfGetDB( DB_MASTER );
69         $dbw->begin();
70         
71         $tbl_rev = $dbw->tableName( 'revision' );
72         
73         $set = implode( ', ', $ids );
74         $dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" );
75         
76         $dbw->commit(); 
77