Extension:NukeDPL.php

From Organic Design wiki
Revision as of 09:32, 1 June 2008 by Nad (talk | contribs)

<?php /**

* NukeDPL extension - Mass delete by DPL query
* 
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.

Template:Php

* See http://www.mediawiki.org/wiki/Extension:NukeDPL for installation and usage details
*
* @package MediaWiki
* @subpackage Extensions
* @author Aran Dunkley User:Nad
* @copyright © 2007 Aran Dunkley
* @licence GNU General Public Licence 2.0 or later
*/

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

define('NUKEDPL_VERSION', '1.1.1, 2007-06-01');

$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;

$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)", ));

# Add the specialpage to the environment SpecialPage::addPage(new SpecialNukeDPL()); }

/**

* Define a new class based on the SpecialPage class
*/

require_once("$IP/includes/SpecialPage.php"); class SpecialNukeDPL extends SpecialPage {

# Constructor function SpecialNukeDPL() { SpecialPage::SpecialPage('NukeDPL','nuke'); }

# Override SpecialPage::execute($param = ) function execute($param) { 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->addWikiText("(Remember, titles are case-sensitive, and don't add any DPL tags of braces)"); $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); } } }