From 0e8a0afedebf2b6df9f70e0ffe3d74765417b86e Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Tue, 14 Sep 2010 09:06:35 +0200 Subject: Add Nuke extension This extension allow mass deletion of pages Revision: 72823 Homepage: http://www.mediawiki.org/wiki/Extension:Nuke --- extensions/Nuke/Nuke_body.php | 154 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 extensions/Nuke/Nuke_body.php (limited to 'extensions/Nuke/Nuke_body.php') diff --git a/extensions/Nuke/Nuke_body.php b/extensions/Nuke/Nuke_body.php new file mode 100644 index 00000000..d493bb8b --- /dev/null +++ b/extensions/Nuke/Nuke_body.php @@ -0,0 +1,154 @@ +userCanExecute( $wgUser ) ){ + $this->displayRestrictionError(); + return; + } + + $this->setHeaders(); + $this->outputHeader(); + + $target = $wgRequest->getText( 'target', $par ); + + // Normalise name + if ( $target !== '' ) { + $user = User::newFromName( $target ); + if ( $user ) $target = $user->getName(); + } + + $reason = $wgRequest->getText( 'wpReason', + wfMsgForContent( 'nuke-defaultreason', $target ) ); + $posted = $wgRequest->wasPosted() && + $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ); + if( $posted ) { + $pages = $wgRequest->getArray( 'pages' ); + if( $pages ) { + return $this->doDelete( $pages, $reason ); + } + } + if( $target != '' ) { + $this->listForm( $target, $reason ); + } else { + $this->promptForm(); + } + } + + function promptForm() { + global $wgOut; + + $input = Xml::input( 'target', 40 ); + $submit = Xml::submitButton( wfMsg( 'nuke-submit-user' ) ); + + $wgOut->addWikiMsg( 'nuke-tools' ); + $wgOut->addHTML( + Xml::openElement( 'form', array( + 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), + 'method' => 'post' ) + ) . "$input\n$submit\n" + ); + + $wgOut->addHTML( "" ); + } + + function listForm( $username, $reason ) { + global $wgUser, $wgOut, $wgLang; + + $pages = $this->getNewPages( $username ); + + if( count( $pages ) == 0 ) { + $wgOut->addWikiMsg( 'nuke-nopages', $username ); + return $this->promptForm(); + } + $wgOut->addWikiMsg( 'nuke-list', $username ); + + $nuke = $this->getTitle(); + $submit = Xml::submitButton( wfMsg( 'nuke-submit-delete' ) ); + + $wgOut->addHTML( + Xml::openElement( 'form', array( + 'action' => $nuke->getLocalURL( 'action=delete' ), + 'method' => 'post' ) + ) . + Xml::hidden( 'wpEditToken', $wgUser->editToken() ) . + Xml::inputLabel( + wfMsg( 'deletecomment' ), 'wpReason', 'wpReason', 60, $reason + ) . '

' . + Xml::submitButton( wfMsg( 'nuke-submit-delete' ) ) + ); + + $wgOut->addHTML( '\n" . + Xml::submitButton( wfMsg( 'nuke-submit-delete' ) ) . + "" + ); + } + + function getNewPages( $username ) { + $dbr = wfGetDB( DB_SLAVE ); + $result = $dbr->select( 'recentchanges', + array( 'rc_namespace', 'rc_title', 'rc_timestamp', 'COUNT(*) AS edits' ), + array( + 'rc_user_text' => $username, + "(rc_new = 1) OR (rc_log_type = 'import' AND rc_log_action = 'upload')" + ), + __METHOD__, + array( + 'ORDER BY' => 'rc_timestamp DESC', + 'GROUP BY' => 'rc_namespace, rc_title' + ) + ); + $pages = array(); + while( $row = $dbr->fetchObject( $result ) ) { + $pages[] = array( Title::makeTitle( $row->rc_namespace, $row->rc_title ), $row->edits ); + } + $dbr->freeResult( $result ); + return $pages; + } + + function doDelete( $pages, $reason ) { + foreach( $pages as $page ) { + $title = Title::newFromURL( $page ); + $file = $title->getNamespace() == NS_IMAGE ? wfLocalFile( $title ) : false; + if ( $file ) { + $oldimage = null; // Must be passed by reference + FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, false ); + } else { + $article = new Article( $title ); + $article->doDelete( $reason ); + } + } + } +} -- cgit v1.2.3-54-g00ecf