Difference between revisions of "Extension:NukeDPL.php"

From Organic Design wiki
(setup call doubled up)
m
Line 6: Line 6:
 
# - Adapted from Special:Nuke by Brion Vibber, see http://www.mediawiki.org/wiki/Nuke
 
# - Adapted from Special:Nuke by Brion Vibber, see http://www.mediawiki.org/wiki/Nuke
  
if( !defined( 'MEDIAWIKI' ) ) die( 'Not an entry point.' );
+
if(!defined('MEDIAWIKI')) die('Not a valid entry point.');
  
 
define('NUKEDPL_VERSION', '1.0.2, 2007-05-14');
 
define('NUKEDPL_VERSION', '1.0.2, 2007-05-14');
  
 
$wgGroupPermissions['sysop']['nuke'] = true;
 
$wgGroupPermissions['sysop']['nuke'] = true;
$wgAvailableRights[] = 'nuke';
+
$wgAvailableRights[]                 = 'nuke';
$wgExtensionFunctions[] = 'wfSetupNukeDPL';
+
$wgExtensionFunctions[]             = 'wfSetupNukeDPL';
  
 
$wgExtensionCredits['specialpage'][] = array(
 
$wgExtensionCredits['specialpage'][] = array(
        'name'        => 'Special:NukeDPL',
+
'name'        => 'Special:NukeDPL',
        'author'      => '[http://www.organicdesign.co.nz/nad User:Nad]',
+
'author'      => '[http://www.organicdesign.co.nz/nad User:Nad]',
        'description' => 'Mass delete by DPL query',
+
'description' => 'Mass delete by DPL query',
        'url'        => 'http://www.mediawiki.org/wiki/Extension:NukeDPL',
+
'url'        => 'http://www.mediawiki.org/wiki/Extension:NukeDPL',
        'version'    => NUKEDPL_VERSION
+
'version'    => NUKEDPL_VERSION
        );
+
);
  
 
function wfSetupNukeDPL() {
 
function wfSetupNukeDPL() {
        global $wgMessageCache;
+
global $wgMessageCache,$wgSpecialPages;
        $wgMessageCache->addMessages(
+
$wgMessageCache->addMessages(array(
                array(
+
'nukedpl'           => 'Mass delete by DPL query',
                        'nukedpl' => 'Mass delete by DPL query',
+
'nuke-nopages'       => "No pages to delete using DPL-query: <tt>$1</tt>",
                        'nuke-nopages' => "No pages to delete using DPL-query: <tt>$1</tt>",
+
'nuke-list'         => "The following pages were selected by DPL-query: <tt>$1</tt> hit the button to delete them.",
                        'nuke-list' => "The following pages were selected by DPL-query: <tt>$1</tt> hit the button to delete them.",
+
'nuke-defaultreason' => "Mass removal of pages selected by DPL-query: ($1)",
                        'nuke-defaultreason' => "Mass removal of pages selected by DPL-query: ($1)",
+
));
                )
 
        );
 
  
        $GLOBALS['wgSpecialPages']['NukeDPL'] = array(
+
$wgSpecialPages['NukeDPL'] = array(
                /*class*/ 'SpecialPage',
+
'SpecialPage', # class
                /*name*/ 'NukeDPL',
+
'NukeDPL',     # name as seen in links
                /* permission */'nuke',
+
'nuke',       # user rights required
                /*listed*/ true,
+
true,         # listed in special:specialpages
                /*function*/ false,
+
false,        # function called by execute() - defaults to wfSpecial{$name}
                /*file*/ false );
+
false,         # file included by execute() - defaults to Special{$name}.php
}
+
false         # includable
 +
);
 +
}
  
 
function wfSpecialNukeDPL( $par = '' ) {
 
function wfSpecialNukeDPL( $par = '' ) {
        global $wgRequest;
+
global $wgRequest;
        $target = $wgRequest->getText( 'target', $par );
+
$target = $wgRequest->getText( 'target', $par );
        $form = new NukeDPLForm( $target, $wgRequest );
+
$form = new NukeDPLForm( $target, $wgRequest );
        $form->run();
+
$form->run();
}
+
}
  
 
class NukeDPLForm {
 
class NukeDPLForm {
        function NukeDPLForm( $target, $request ) {
+
function NukeDPLForm( $target, $request ) {
                global $wgUser;
+
global $wgUser;
                $this->mTarget = $target;
+
$this->mTarget = $target;
                $this->mReason = $request->getText( 'wpReason',
+
$this->mReason = $request->getText( 'wpReason',
                        wfMsgForContent( 'nuke-defaultreason', $target ) );
+
wfMsgForContent( 'nuke-defaultreason', $target ) );
                $this->mPosted = $request->wasPosted() &&
+
$this->mPosted = $request->wasPosted() &&
                        $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
+
$wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
                if( $this->mPosted ) {
+
if( $this->mPosted ) {
                        $this->mPages = $request->getArray( 'pages' );
+
$this->mPages = $request->getArray( 'pages' );
                }
+
}
        }
+
}
  
        function run() {
+
function run() {
                if( $this->mPosted && $this->mPages ) {
+
if( $this->mPosted && $this->mPages ) {
                        return $this->doDelete( $this->mPages, $this->mReason );
+
return $this->doDelete( $this->mPages, $this->mReason );
                }
+
}
                if( $this->mTarget != '' ) {
+
if( $this->mTarget != '' ) {
                        $this->listForm( $this->mTarget, $this->mReason );
+
$this->listForm( $this->mTarget, $this->mReason );
                } else {
+
} else {
                        $this->promptForm();
+
$this->promptForm();
                }
+
}
        }
+
}
  
        function promptForm() {
+
function promptForm() {
                global $wgUser, $wgOut;
+
global $wgUser, $wgOut;
                $sk =& $wgUser->getSkin();
+
$sk =& $wgUser->getSkin();
  
                $nuke = Title::makeTitle( NS_SPECIAL, 'NukeDPL' );
+
$nuke = Title::makeTitle( NS_SPECIAL, 'NukeDPL' );
                $submit = wfElement( 'input', array( 'type' => 'submit' ) );
+
$submit = wfElement( 'input', array( 'type' => 'submit' ) );
  
                $wgOut->addWikiText( "This tool allows for mass deletions of pages selected by a DPL query:" );
+
$wgOut->addWikiText( "This tool allows for mass deletions of pages selected by a DPL query:" );
                $wgOut->addHTML( wfElement( 'form', array(
+
$wgOut->addHTML( wfElement( 'form', array(
                                'action' => $nuke->getLocalURL( 'action=submit' ),
+
'action' => $nuke->getLocalURL( 'action=submit' ),
                                'method' => 'post' ),
+
'method' => 'post' ),
                                null ) . '<textarea name="target" cols=25 rows=10></textarea>' . "\n$submit\n" );
+
null ) . '<textarea name="target" cols=25 rows=10></textarea>' . "\n$submit\n" );
  
                $wgOut->addHTML( "</form>" );
+
$wgOut->addHTML( "</form>" );
        }
+
}
  
        function listForm( $query, $reason ) {
+
function listForm( $query, $reason ) {
                global $wgUser, $wgOut, $wgLang;
+
global $wgUser, $wgOut, $wgLang;
  
                $pages = $this->getPages( $query );
+
$pages = $this->getPages( $query );
                if( count( $pages ) == 0 ) {
+
if( count( $pages ) == 0 ) {
                        $wgOut->addWikiText( wfMsg( 'nuke-nopages', $query ) );
+
$wgOut->addWikiText( wfMsg( 'nuke-nopages', $query ) );
                        return $this->promptForm();
+
return $this->promptForm();
                }
+
}
                $wgOut->addWikiText( wfMsg( 'nuke-list', $query ) );
+
$wgOut->addWikiText( wfMsg( 'nuke-list', $query ) );
  
                $nuke = Title::makeTitle( NS_SPECIAL, 'NukeDPL' );
+
$nuke = Title::makeTitle( NS_SPECIAL, 'NukeDPL' );
                $submit = wfElement( 'input', array( 'type' => 'submit' ) );
+
$submit = wfElement( 'input', array( 'type' => 'submit' ) );
  
                $wgOut->addHTML( wfElement( 'form', array(
+
$wgOut->addHTML( wfElement( 'form', array(
                        'action' => $nuke->getLocalURL( 'action=delete' ),
+
'action' => $nuke->getLocalURL( 'action=delete' ),
                        'method' => 'post' ),
+
'method' => 'post' ),
                        null ) .
+
null ) .
                        "\n<div>" .
+
"\n<div>" .
                        wfMsgHtml( 'deletecomment' ) . ': ' .
+
wfMsgHtml( 'deletecomment' ) . ': ' .
                        wfElement( 'input', array(
+
wfElement( 'input', array(
                                'name' => 'wpReason',
+
'name' => 'wpReason',
                                'value' => $reason,
+
'value' => $reason,
                                'size' => 60 ) ) .
+
'size' => 60 ) ) .
                        "</div>\n" .
+
"</div>\n" .
                        $submit .
+
$submit .
                        wfElement( 'input', array(
+
wfElement( 'input', array(
                                'type' => 'hidden',
+
'type' => 'hidden',
                                'name' => 'wpEditToken',
+
'name' => 'wpEditToken',
                                'value' => $wgUser->editToken() ) ) .
+
'value' => $wgUser->editToken() ) ) .
                        "\n<ul>\n" );
+
"\n<ul>\n" );
  
                $sk =& $wgUser->getSkin();
+
$sk =& $wgUser->getSkin();
                foreach( $pages as $title ) {
+
foreach( $pages as $title ) {
                        $wgOut->addHTML( '<li>' .
+
$wgOut->addHTML( '<li>' .
                                wfElement( 'input', array(
+
wfElement( 'input', array(
                                        'type' => 'checkbox',
+
'type' => 'checkbox',
                                        'name' => "pages[]",
+
'name' => "pages[]",
                                        'value' => $title,
+
'value' => $title,
                                        'checked' => 'checked' ) ) .
+
'checked' => 'checked' ) ) .
                                '&nbsp;' .
+
'&nbsp;' .
                                $sk->makeKnownLinkObj( Title::newFromText($title) ) . "</li>\n" );
+
$sk->makeKnownLinkObj( Title::newFromText($title) ) . "</li>\n" );
                }
+
}
                $wgOut->addHTML( "</ul>\n$submit</form>" );
+
$wgOut->addHTML( "</ul>\n$submit</form>" );
        }
+
}
  
        function getPages( $query ) {
+
function getPages( $query ) {
                global $wgTitle,$wgParser,$wgUser;
+
global $wgTitle,$wgParser,$wgUser;
                $fname = 'NukeDPLForm::getNewPages';
+
$fname = 'NukeDPLForm::getNewPages';
                $query = trim($query)."\nmode=userformat\nlistseparators=,\\n$$$%PAGE%$$$,,\n";
+
$query = trim($query)."\nmode=userformat\nlistseparators=,\\n$$$%PAGE%$$$,,\n";
                $opt = ParserOptions::newFromUser($wgUser);
+
$opt = ParserOptions::newFromUser($wgUser);
                $out = $wgParser->parse("<dpl>$query</dpl>",$wgTitle,$opt,false,true);
+
$out = $wgParser->parse("<dpl>$query</dpl>",$wgTitle,$opt,false,true);
                preg_match_all('|^\\${3}(.+?)\\${3}|m',$out->getText(),$matches);
+
preg_match_all('|^\\${3}(.+?)\\${3}|m',$out->getText(),$matches);
                return $matches[1];
+
return $matches[1];
        }
+
}
  
        function doDelete( $pages, $reason ) {
+
function doDelete( $pages, $reason ) {
                foreach( $pages as $page ) {
+
foreach( $pages as $page ) {
                        $title = Title::newFromUrl( $page );
+
$title = Title::newFromUrl( $page );
                        $article = new Article( $title );
+
$article = new Article( $title );
                        $article->doDelete( $reason );
+
$article->doDelete( $reason );
                }
+
}
        }
+
}
 
}
 
}
  
 
?>
 
?>

Revision as of 00:56, 20 May 2007

<?php

  1. Extension:NukeDPL
Info.svg These are the MediaWiki extensions we're using and/or developing. Please refer to the information on the mediawiki.org wiki for installation and usage details. Extensions here which have no corresponding mediawiki article are either not ready for use or have been superseded. You can also browse our extension code in our local Subversion repository or our GitHub mirror.

{{#Security:*|dev}}{{#Security:view|*}}Template:Php

  1. - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
  2. - See http://www.mediawiki.org/wiki/Extension:NukeDPL for installation and usage details
  3. - Author: http://www.organicdesign.co.nz/nad User:Nad
  4. - Adapted from Special:Nuke by Brion Vibber, see http://www.mediawiki.org/wiki/Nuke

if(!defined('MEDIAWIKI')) die('Not a valid entry point.');

define('NUKEDPL_VERSION', '1.0.2, 2007-05-14');

$wgGroupPermissions['sysop']['nuke'] = true; $wgAvailableRights[] = 'nuke'; $wgExtensionFunctions[] = 'wfSetupNukeDPL';

$wgExtensionCredits['specialpage'][] = array( 'name' => 'Special:NukeDPL', 'author' => 'User:Nad', 'description' => 'Mass delete by DPL query', 'url' => 'http://www.mediawiki.org/wiki/Extension:NukeDPL', 'version' => NUKEDPL_VERSION );

function wfSetupNukeDPL() { global $wgMessageCache,$wgSpecialPages; $wgMessageCache->addMessages(array( 'nukedpl' => 'Mass delete by DPL query', 'nuke-nopages' => "No pages to delete using DPL-query: $1", 'nuke-list' => "The following pages were selected by DPL-query: $1 hit the button to delete them.", 'nuke-defaultreason' => "Mass removal of pages selected by DPL-query: ($1)", ));

$wgSpecialPages['NukeDPL'] = array( 'SpecialPage', # class 'NukeDPL', # name as seen in links 'nuke', # user rights required true, # listed in special:specialpages false, # function called by execute() - defaults to wfSpecial{$name} false, # file included by execute() - defaults to Special{$name}.php false # includable ); }

function wfSpecialNukeDPL( $par = ) { global $wgRequest; $target = $wgRequest->getText( 'target', $par ); $form = new NukeDPLForm( $target, $wgRequest ); $form->run(); }

class NukeDPLForm { function NukeDPLForm( $target, $request ) { global $wgUser; $this->mTarget = $target; $this->mReason = $request->getText( 'wpReason', wfMsgForContent( 'nuke-defaultreason', $target ) ); $this->mPosted = $request->wasPosted() && $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) ); if( $this->mPosted ) { $this->mPages = $request->getArray( 'pages' ); } }

function run() { if( $this->mPosted && $this->mPages ) { return $this->doDelete( $this->mPages, $this->mReason ); } if( $this->mTarget != ) { $this->listForm( $this->mTarget, $this->mReason ); } else { $this->promptForm(); } }

function promptForm() { global $wgUser, $wgOut; $sk =& $wgUser->getSkin();

$nuke = Title::makeTitle( NS_SPECIAL, 'NukeDPL' ); $submit = wfElement( 'input', array( 'type' => 'submit' ) );

$wgOut->addWikiText( "This tool allows for mass deletions of pages selected by a DPL query:" ); $wgOut->addHTML( wfElement( 'form', array( 'action' => $nuke->getLocalURL( 'action=submit' ), 'method' => 'post' ), null ) . '<textarea name="target" cols=25 rows=10></textarea>' . "\n$submit\n" );

$wgOut->addHTML( "</form>" ); }

function listForm( $query, $reason ) { global $wgUser, $wgOut, $wgLang;

$pages = $this->getPages( $query ); if( count( $pages ) == 0 ) { $wgOut->addWikiText( wfMsg( 'nuke-nopages', $query ) ); return $this->promptForm(); } $wgOut->addWikiText( wfMsg( 'nuke-list', $query ) );

$nuke = Title::makeTitle( NS_SPECIAL, 'NukeDPL' ); $submit = wfElement( 'input', array( 'type' => 'submit' ) );

$wgOut->addHTML( wfElement( 'form', array( 'action' => $nuke->getLocalURL( 'action=delete' ), 'method' => 'post' ), null ) .

"\n

" .

wfMsgHtml( 'deletecomment' ) . ': ' . wfElement( 'input', array( 'name' => 'wpReason', 'value' => $reason, 'size' => 60 ) ) .

"

\n" .

$submit . wfElement( 'input', array( 'type' => 'hidden', 'name' => 'wpEditToken', 'value' => $wgUser->editToken() ) ) .

"\n

    \n" ); $sk =& $wgUser->getSkin(); foreach( $pages as $title ) { $wgOut->addHTML( '
  • ' . wfElement( 'input', array( 'type' => 'checkbox', 'name' => "pages[]", 'value' => $title, 'checked' => 'checked' ) ) . ' ' . $sk->makeKnownLinkObj( Title::newFromText($title) ) . "
  • \n" );

    }

    $wgOut->addHTML( "

\n$submit</form>" );

}

function getPages( $query ) { global $wgTitle,$wgParser,$wgUser; $fname = 'NukeDPLForm::getNewPages'; $query = trim($query)."\nmode=userformat\nlistseparators=,\\n$$$%PAGE%$$$,,\n"; $opt = ParserOptions::newFromUser($wgUser);

$out = $wgParser->parse("

Extension:DynamicPageList (DPL), version 3.3.3: Warning: No parameter option supplied for '$query'. (Missing '=')


Extension:DynamicPageList (DPL), version 3.3.3: Error: No selection criteria found! You must use at least one of the following parameters: category, namespace, titlematch, linksto, uses, createdby, modifiedby, lastmodifiedby, or their 'not' variants


Extension:DynamicPageList (DPL), version 3.3.3: Warning: No results.

",$wgTitle,$opt,false,true);

preg_match_all('|^\\${3}(.+?)\\${3}|m',$out->getText(),$matches); return $matches[1]; }

function doDelete( $pages, $reason ) { foreach( $pages as $page ) { $title = Title::newFromUrl( $page ); $article = new Article( $title ); $article->doDelete( $reason ); } } }

?>