MediaWiki r41630 - Code Review

Jump to: navigation, search
Repository:MediaWiki
Revision:r41629‎ | r41630 (on ViewVC)‎ | r41631 >
Date:00:33, 4 October 2008
Author:siebrand
Status:old (Comments)
Tags:
Comment:
* Add functionality of extension Nuke to core. Messages for other languages will be added in a next commit.
* Update Translate
Modified paths:

Diff [purge]

Index: trunk/phase3/maintenance/language/messages.inc
===================================================================
--- trunk/phase3/maintenance/language/messages.inc	(revision 41629)
+++ trunk/phase3/maintenance/language/messages.inc	(revision 41630)
@@ -2759,6 +2759,17 @@
 	'external_images' => array(
 		'external_image_whitelist',
 	),
+	'special-nuke' => array(
+		'nuke',
+		'nuke-nopages',
+		'nuke-list',
+		'nuke-defaultreason',
+		'nuke-tools',
+		'nuke-submit-user',
+		'nuke-submit-delete',
+		'right-nuke',
+	),
+
 );
 
 /** Comments for each block */
@@ -2953,6 +2964,7 @@
 	'special-specialpages'  => 'Special:SpecialPages',
 	'special-blank'         => 'Special:BlankPage',
 	'external_images'       => 'External image whitelist',
+	'special-nuke'          => 'Special:Nuke',
 );
 
 /** Short comments for standalone messages */
Index: trunk/phase3/includes/AutoLoader.php
===================================================================
--- trunk/phase3/includes/AutoLoader.php	(revision 41629)
+++ trunk/phase3/includes/AutoLoader.php	(revision 41630)
@@ -477,6 +477,7 @@
 	'SpecialBookSources' => 'includes/specials/SpecialBooksources.php',
 	'SpecialListGroupRights' => 'includes/specials/SpecialListgrouprights.php',
 	'SpecialMostlinkedtemplates' => 'includes/specials/SpecialMostlinkedtemplates.php',
+	'SpecialNuke' => 'includes/specials/SpecialNuke.php',
 	'SpecialPrefixindex' => 'includes/specials/SpecialPrefixindex.php',
 	'SpecialRandomredirect' => 'includes/specials/SpecialRandomredirect.php',
 	'SpecialRecentchanges' => 'includes/specials/SpecialRecentchanges.php',
Index: trunk/phase3/includes/DefaultSettings.php
===================================================================
--- trunk/phase3/includes/DefaultSettings.php	(revision 41629)
+++ trunk/phase3/includes/DefaultSettings.php	(revision 41630)
@@ -1183,6 +1183,8 @@
 $wgGroupPermissions['sysop']['apihighlimits']    = true;
 $wgGroupPermissions['sysop']['browsearchive']    = true;
 $wgGroupPermissions['sysop']['noratelimit']      = true;
+$wgGroupPermissions['sysop']['nuke']             = true;
+
 #$wgGroupPermissions['sysop']['mergehistory']     = true;
 
 // Permission to change users' group assignments
@@ -2850,6 +2852,7 @@
 	'Export'                    => 'pagetools',
 	'Import'                    => 'pagetools',
 	'Whatlinkshere'             => 'pagetools',
+	'Nuke'                      => 'pagetools',
 
 	'Statistics'                => 'wiki',
 	'Version'                   => 'wiki',
Index: trunk/phase3/includes/specials/SpecialNuke.php
===================================================================
--- trunk/phase3/includes/specials/SpecialNuke.php	(revision 0)
+++ trunk/phase3/includes/specials/SpecialNuke.php	(revision 41630)
@@ -0,0 +1,159 @@
+<?php
+/**
+ * @file
+ * @ingroup SpecialPage
+ *
+ * @author Brion Vibber
+ * @copyright Copyright © 2005-2008, Brion Vibber
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * implements Special:Nuke
+ */
+
+class SpecialNuke extends SpecialPage {
+	function __construct() {
+		parent::__construct( 'Nuke', 'nuke' );
+	}
+
+	function execute( $par ){
+		global $wgUser, $wgRequest;
+
+		if( !$this->userCanExecute( $wgUser ) ){
+			$this->displayRestrictionError();
+			return;
+		}
+
+		$this->setHeaders();
+		$this->outputHeader();
+
+		$target = $wgRequest->getText( 'target', $par );
+		$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 $wgUser, $wgOut;
+		$sk =& $wgUser->getSkin();
+
+		$nuke = Title::makeTitle( NS_SPECIAL, 'Nuke' );
+		$submit = Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMsgHtml( 'nuke-submit-user' ) ) );
+
+		$wgOut->addWikiText( wfMsg( 'nuke-tools' ) );
+		$wgOut->addHTML( Xml::element( 'form', array(
+				'action' => $nuke->getLocalURL( 'action=submit' ),
+				'method' => 'post' ),
+				null ) .
+			Xml::element( 'input', array(
+				'type' => 'text',
+				'size' => 40,
+				'name' => 'target' ) ) .
+			"\n$submit\n" );
+
+		$wgOut->addHTML( "</form>" );
+	}
+
+	function listForm( $username, $reason ) {
+		global $wgUser, $wgOut, $wgLang;
+
+		$pages = $this->getNewPages( $username );
+		$escapedName = wfEscapeWikiText( $username );
+		if( count( $pages ) == 0 ) {
+			$wgOut->addWikiText( wfMsg( 'nuke-nopages', $escapedName ) );
+			return $this->promptForm();
+		}
+		$wgOut->addWikiText( wfMsg( 'nuke-list', $escapedName ) );
+
+		$nuke = $this->getTitle();
+		$submit = Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMsgHtml( 'nuke-submit-delete' ) ) );
+
+		$wgOut->addHTML( Xml::element( 'form', array(
+			'action' => $nuke->getLocalURL( 'action=delete' ),
+			'method' => 'post' ),
+			null ) .
+			"\n<div>" .
+			wfMsgHtml( 'deletecomment' ) . ' ' .
+			Xml::element( 'input', array(
+				'name' => 'wpReason',
+				'value' => $reason,
+				'size' => 60 ) ) .
+			"</div><br />" .
+			$submit .
+			Xml::element( 'input', array(
+				'type' => 'hidden',
+				'name' => 'wpEditToken',
+				'value' => $wgUser->editToken() ) ) .
+			"\n<ul>\n" );
+
+		$sk =& $wgUser->getSkin();
+		foreach( $pages as $info ) {
+			list( $title, $edits ) = $info;
+			$image = $title->getNamespace() == NS_IMAGE ? wfLocalFile( $title ) : false;
+			$thumb = $image && $image->exists() ? $image->getThumbnail( 120, 120 ) : false;
+
+			$wgOut->addHTML( '<li>' .
+				Xml::element( 'input', array(
+					'type' => 'checkbox',
+					'name' => "pages[]",
+					'value' => $title->getPrefixedDbKey(),
+					'checked' => 'checked' ) ) .
+				'&nbsp;' .
+				( $thumb ? $thumb->toHtml( array( 'desc-link' => true ) ) : '' ) .
+				$sk->makeKnownLinkObj( $title ) .
+				'&nbsp;(' .
+				$sk->makeKnownLinkObj( $title, wfMsgExt( 'nchanges', array( 'parsemag' ), $wgLang->formatNum( $edits ) ), 'action=history' ) .
+				")</li>\n" );
+		}
+		$wgOut->addHTML( "</ul>\n$submit</form>" );
+	}
+
+	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 = "upload" 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 );
+			}
+		}
+	}
+}

Property changes on: trunk/phase3/includes/specials/SpecialNuke.php
___________________________________________________________________
Added: svn:mergeinfo
Added: svn:eol-style
   + native

Index: trunk/phase3/includes/SpecialPage.php
===================================================================
--- trunk/phase3/includes/SpecialPage.php	(revision 41629)
+++ trunk/phase3/includes/SpecialPage.php	(revision 41630)
@@ -164,6 +164,7 @@
 		'Listadmins'                => array( 'SpecialRedirectToSpecial', 'Listadmins', 'Listusers', 'sysop' ),
 		'MergeHistory'              => array( 'SpecialPage', 'MergeHistory', 'mergehistory' ),
 		'Listbots'                  => array( 'SpecialRedirectToSpecial', 'Listbots', 'Listusers', 'bot' ),
+		'Nuke'                      => 'SpecialNuke',
 	);
 
 	static public $mAliases;
Index: trunk/phase3/languages/messages/MessagesHe.php
===================================================================
--- trunk/phase3/languages/messages/MessagesHe.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesHe.php	(revision 41630)
@@ -283,6 +283,7 @@
 	'Blankpage'                 => array( 'דף_ריק' ),
 	'LinkSearch'                => array( 'חיפוש_קישורים_חיצוניים' ),
 	'DeletedContributions'      => array( 'תרומות_מחוקות' ),
+	'Nuke'                      => array( 'מחיקה_מרובה' ),
 );
 
 $namespaceNames = array(
Index: trunk/phase3/languages/messages/MessagesAr.php
===================================================================
--- trunk/phase3/languages/messages/MessagesAr.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesAr.php	(revision 41630)
@@ -367,6 +367,7 @@
 	'Blankpage'                 => array( 'صفحة_فارغة' ),
 	'LinkSearch'                => array( 'بحث_الوصلات' ),
 	'DeletedContributions'      => array( 'مساهمات_محذوفة' ),
+	'Nuke'                      => array( 'حذف_كمي' ),
 );
 
 $imageFiles = array(
Index: trunk/phase3/languages/messages/MessagesNds_nl.php
===================================================================
--- trunk/phase3/languages/messages/MessagesNds_nl.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesNds_nl.php	(revision 41630)
@@ -251,6 +251,7 @@
 	'Withoutinterwiki'          => array( 'Gien_interwiki' ),
 	'LinkSearch'                => array( 'Verwiezingen_zeuken' ),
 	'DeletedContributions'      => array( 'Vort-ehaolen gebrukersbiedragen' ),
+	'Nuke'                      => array( 'Massaal_vortdoon' ),
 );
 
 $linkTrail = '/^([a-zäöüïëéèà]+)(.*)$/sDu';
Index: trunk/phase3/languages/messages/MessagesEn.php
===================================================================
--- trunk/phase3/languages/messages/MessagesEn.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesEn.php	(revision 41630)
@@ -439,6 +439,7 @@
 	'Blankpage'                 => array( 'BlankPage' ),
 	'LinkSearch'                => array( 'LinkSearch' ),
 	'DeletedContributions'      => array( 'DeletedContributions' ),
+	'Nuke'                      => array( 'Nuke' ),
 );
 
 /**
@@ -3670,4 +3671,16 @@
 
 #Put all regex fragments above this line. Leave this line exactly as it is</pre>',
 
+# Special:Nuke
+'nuke'               => 'Mass delete',
+'nuke-nopages'       => 'No new pages by [[Special:Contributions/$1|$1]] in recent changes.',
+'nuke-list'          => 'The following pages were recently created by [[Special:Contributions/$1|$1]];
+put in a comment and hit the button to delete them.',
+'nuke-defaultreason' => 'Mass removal of pages added by $1',
+'nuke-tools'         => 'This tool allows for mass deletions of pages recently added by a given user or IP.
+Input the username or IP to get a list of pages to delete.',
+'nuke-submit-user'   => 'Go',
+'nuke-submit-delete' => 'Delete selected',
+'right-nuke'         => 'Mass delete pages',
+
 );
Index: trunk/phase3/languages/messages/MessagesNo.php
===================================================================
--- trunk/phase3/languages/messages/MessagesNo.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesNo.php	(revision 41630)
@@ -163,6 +163,7 @@
 	'Blankpage'                 => array( 'Blank side' ),
 	'LinkSearch'                => array( 'Lenkesøk' ),
 	'DeletedContributions'      => array( 'Slettede bidrag' ),
+	'Nuke'                      => array( 'Massesletting' ),
 );
 
 $messages = array(
Index: trunk/phase3/languages/messages/MessagesArz.php
===================================================================
--- trunk/phase3/languages/messages/MessagesArz.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesArz.php	(revision 41630)
@@ -264,6 +264,7 @@
 	'Blankpage'                 => array( 'صفحة_فارغة' ),
 	'LinkSearch'                => array( 'بحث_الوصلات' ),
 	'DeletedContributions'      => array( 'مساهمات_محذوفة' ),
+	'Nuke'                      => array( 'حذف_كمى' ),
 );
 
 $messages = array(
Index: trunk/phase3/languages/messages/MessagesNl.php
===================================================================
--- trunk/phase3/languages/messages/MessagesNl.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesNl.php	(revision 41630)
@@ -278,6 +278,7 @@
 	'ListUserRestrictions'      => array( 'Gebruikersbeperkingen' ),
 	'RemoveRestrictions'        => array( 'BeperkingenVerwijderen' ),
 	'RestrictUser'              => array( 'GebruikerBeperken' ),
+	'Nuke'                      => array( 'MassaalVerwijderen' ),
 );
 
 $linkTrail = '/^([a-zäöüïëéèà]+)(.*)$/sDu';
Index: trunk/phase3/languages/messages/MessagesDe.php
===================================================================
--- trunk/phase3/languages/messages/MessagesDe.php	(revision 41629)
+++ trunk/phase3/languages/messages/MessagesDe.php	(revision 41630)
@@ -157,6 +157,7 @@
 	'Blankpage'                 => array( 'Leerseite' ),
 	'LinkSearch'                => array( 'Weblink-Suche' ),
 	'DeletedContributions'      => array( 'Gelöschte Beiträge' ),
+	'Nuke'                      => array( 'Massenlöschung' ),
 );
 
 $datePreferences = array(
Index: trunk/phase3/RELEASE-NOTES
===================================================================
--- trunk/phase3/RELEASE-NOTES	(revision 41629)
+++ trunk/phase3/RELEASE-NOTES	(revision 41630)
@@ -58,6 +58,7 @@
 * Special:LinkSearch to search for external links (was extension LinkSearch)
 * RenderHash
 * NoMoveUserPages
+* Special:Nuke to mass delete all pages created by a user
 
 === New features in 1.14 ===
 
Index: trunk/extensions/Translate/groups/MediaWikiExtensions.php
===================================================================
--- trunk/extensions/Translate/groups/MediaWikiExtensions.php	(revision 41629)
+++ trunk/extensions/Translate/groups/MediaWikiExtensions.php	(revision 41630)
@@ -369,7 +369,6 @@
 		'ext-usernameblacklist',
 		'ext-checkuser', // sysop or higher only
 		'ext-globalblocking',
-		'ext-nuke',
 		'ext-oversight',
 		'ext-renameuser',
 		'ext-assertedit', // bots
Index: trunk/extensions/Translate/groups/mediawiki-defines.txt
===================================================================
--- trunk/extensions/Translate/groups/mediawiki-defines.txt	(revision 41629)
+++ trunk/extensions/Translate/groups/mediawiki-defines.txt	(revision 41630)
@@ -455,9 +455,6 @@
 
 No Move Userpages
 
-Nuke
-file = Nuke/SpecialNuke.i18n.php
-
 OAI-PMH repository
 id = ext-oai
 file = OAI/OAIRepo.i18n.php
Index: trunk/extensions/Translate/aliases.txt
===================================================================
--- trunk/extensions/Translate/aliases.txt	(revision 41629)
+++ trunk/extensions/Translate/aliases.txt	(revision 41630)
@@ -151,9 +151,6 @@
 News channel
 file = NewsChannel/NewsChannel.alias.php
 
-Nuke
-file = Nuke/SpecialNuke.alias.php
-
 Oversight
 file = Oversight/HideRevision.alias.php
 

Follow-up revisions

Rev.Commit summaryAuthorDate
r41632* Localisation updates for core messages from Betawiki. Contains follow up on...siebrand00:46, 4 October 2008
r42117Back out r41630 -- merging of Nuke extension to core...brion21:35, 15 October 2008

Comments

#Comment by Tim Starling (Talk | contribs)   04:17, 10 October 2008

I don't understand why this would be a good idea now when it wasn't when the extension was written. What has changed?

#Comment by Siebrand (Talk | contribs)   09:11, 10 October 2008

Nothing really, aside from a List of extensions to be merged to the core.

#Comment by Tim Starling (Talk | contribs)   14:24, 11 October 2008

You mean some random guy created a wiki page and made a whole lot of questionable decisions on it? That's what's changed?

No reversibility, no error handling, 150 lines of code, looks like about 10 minutes' work. I'm not sure this should be in the core as-is.

#Comment by Siebrand (Talk | contribs)   16:49, 11 October 2008

Hmm, well, by now both you and Brion have edited that page. There is no talk saying "this is a fundamentally bad idea". You bear more responsibility for the MediaWiki development than I do, are more skilled, and have a better overview. I thought it a nice feature to have in core, I could add it, and I did it. We are all able to revert, so if you fundamentally disagree, please feel free to do so.

#Comment by Brion VIBBER (Talk | contribs)   21:35, 15 October 2008

Reverted for now in r42117. We'll consider re-merging in future when it's all purty and has reversible tools, better accountability etc.

Status & tagging log

  • 09:06, 18 January 2012 Siebrand (Talk | contribs) changed the tags for r41630 [removed: reverted]
  • 15:32, 12 September 2011 Meno25 (Talk | contribs) changed the status of r41630 [removed: resolved added: old]
  • 19:43, 21 April 2011 Happy-melon (Talk | contribs) changed the tags for r41630 [removed: nuke]
Personal tools
Namespaces
Variants
Views
Actions
Site
Support
Download
Development
Communication
Toolbox