From: Siebrand Mazeland Date: Sat, 4 Oct 2008 00:33:07 +0000 (+0000) Subject: * Add functionality of extension Nuke to core. Messages for other languages will... X-Git-Tag: 1.31.0-rc.0~44941 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/operations/recherche.php?a=commitdiff_plain;h=c6e24f0a42b34f9be3d310f79c53f02678707ac3;p=lhc%2Fweb%2Fwiklou.git * Add functionality of extension Nuke to core. Messages for other languages will be added in a next commit. * Update Translate --- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index d78a19299b..7c21a262e3 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -58,6 +58,7 @@ The following extensions are migrated into MediaWiki 1.14: * 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 === diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index f9897e2180..4ad086ff70 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -477,6 +477,7 @@ $wgAutoloadLocalClasses = array( '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', diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 78b7327b7c..ea478c77b6 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1183,6 +1183,8 @@ $wgGroupPermissions['sysop']['suppressredirect'] = true; $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 @@ $wgSpecialPageGroups = array( 'Export' => 'pagetools', 'Import' => 'pagetools', 'Whatlinkshere' => 'pagetools', + 'Nuke' => 'pagetools', 'Statistics' => 'wiki', 'Version' => 'wiki', diff --git a/includes/SpecialPage.php b/includes/SpecialPage.php index fec6c0a88a..cf16546570 100644 --- a/includes/SpecialPage.php +++ b/includes/SpecialPage.php @@ -164,6 +164,7 @@ class SpecialPage 'Listadmins' => array( 'SpecialRedirectToSpecial', 'Listadmins', 'Listusers', 'sysop' ), 'MergeHistory' => array( 'SpecialPage', 'MergeHistory', 'mergehistory' ), 'Listbots' => array( 'SpecialRedirectToSpecial', 'Listbots', 'Listusers', 'bot' ), + 'Nuke' => 'SpecialNuke', ); static public $mAliases; diff --git a/includes/specials/SpecialNuke.php b/includes/specials/SpecialNuke.php new file mode 100644 index 0000000000..0b68071238 --- /dev/null +++ b/includes/specials/SpecialNuke.php @@ -0,0 +1,159 @@ +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( "" ); + } + + 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
" . + wfMsgHtml( 'deletecomment' ) . ' ' . + Xml::element( 'input', array( + 'name' => 'wpReason', + 'value' => $reason, + 'size' => 60 ) ) . + "

" . + $submit . + Xml::element( 'input', array( + 'type' => 'hidden', + 'name' => 'wpEditToken', + 'value' => $wgUser->editToken() ) ) . + "\n\n$submit" ); + } + + 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 ); + } + } + } +} diff --git a/languages/messages/MessagesAr.php b/languages/messages/MessagesAr.php index 950e3122c6..ba530ff88e 100644 --- a/languages/messages/MessagesAr.php +++ b/languages/messages/MessagesAr.php @@ -367,6 +367,7 @@ $specialPageAliases = array( 'Blankpage' => array( 'صفحة_فارغة' ), 'LinkSearch' => array( 'بحث_الوصلات' ), 'DeletedContributions' => array( 'مساهمات_محذوفة' ), + 'Nuke' => array( 'حذف_كمي' ), ); $imageFiles = array( diff --git a/languages/messages/MessagesArz.php b/languages/messages/MessagesArz.php index 7a6066cb6f..d2cf231480 100644 --- a/languages/messages/MessagesArz.php +++ b/languages/messages/MessagesArz.php @@ -264,6 +264,7 @@ $specialPageAliases = array( 'Blankpage' => array( 'صفحة_فارغة' ), 'LinkSearch' => array( 'بحث_الوصلات' ), 'DeletedContributions' => array( 'مساهمات_محذوفة' ), + 'Nuke' => array( 'حذف_كمى' ), ); $messages = array( diff --git a/languages/messages/MessagesDe.php b/languages/messages/MessagesDe.php index c2920867ad..7e1b685b5b 100644 --- a/languages/messages/MessagesDe.php +++ b/languages/messages/MessagesDe.php @@ -157,6 +157,7 @@ $specialPageAliases = array( 'Blankpage' => array( 'Leerseite' ), 'LinkSearch' => array( 'Weblink-Suche' ), 'DeletedContributions' => array( 'Gelöschte Beiträge' ), + 'Nuke' => array( 'Massenlöschung' ), ); $datePreferences = array( diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index f13312db33..df95fd25fa 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -439,6 +439,7 @@ $specialPageAliases = array( 'Blankpage' => array( 'BlankPage' ), 'LinkSearch' => array( 'LinkSearch' ), 'DeletedContributions' => array( 'DeletedContributions' ), + 'Nuke' => array( 'Nuke' ), ); /** @@ -3670,4 +3671,16 @@ Enter the filename without the "{{ns:image}}:" prefix.', #Put all regex fragments above this line. Leave this line exactly as it is', +# 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', + ); diff --git a/languages/messages/MessagesHe.php b/languages/messages/MessagesHe.php index 7fb5394e2e..68400ab992 100644 --- a/languages/messages/MessagesHe.php +++ b/languages/messages/MessagesHe.php @@ -283,6 +283,7 @@ $specialPageAliases = array( 'Blankpage' => array( 'דף_ריק' ), 'LinkSearch' => array( 'חיפוש_קישורים_חיצוניים' ), 'DeletedContributions' => array( 'תרומות_מחוקות' ), + 'Nuke' => array( 'מחיקה_מרובה' ), ); $namespaceNames = array( diff --git a/languages/messages/MessagesNds_nl.php b/languages/messages/MessagesNds_nl.php index 115afec0e1..6ca928fc8c 100644 --- a/languages/messages/MessagesNds_nl.php +++ b/languages/messages/MessagesNds_nl.php @@ -251,6 +251,7 @@ $specialPageAliases = array( 'Withoutinterwiki' => array( 'Gien_interwiki' ), 'LinkSearch' => array( 'Verwiezingen_zeuken' ), 'DeletedContributions' => array( 'Vort-ehaolen gebrukersbiedragen' ), + 'Nuke' => array( 'Massaal_vortdoon' ), ); $linkTrail = '/^([a-zäöüïëéèà]+)(.*)$/sDu'; diff --git a/languages/messages/MessagesNl.php b/languages/messages/MessagesNl.php index a3f8cabab7..fae91888fc 100644 --- a/languages/messages/MessagesNl.php +++ b/languages/messages/MessagesNl.php @@ -278,6 +278,7 @@ $specialPageAliases = array( 'ListUserRestrictions' => array( 'Gebruikersbeperkingen' ), 'RemoveRestrictions' => array( 'BeperkingenVerwijderen' ), 'RestrictUser' => array( 'GebruikerBeperken' ), + 'Nuke' => array( 'MassaalVerwijderen' ), ); $linkTrail = '/^([a-zäöüïëéèà]+)(.*)$/sDu'; diff --git a/languages/messages/MessagesNo.php b/languages/messages/MessagesNo.php index 90afc52b14..6d764ed5ff 100644 --- a/languages/messages/MessagesNo.php +++ b/languages/messages/MessagesNo.php @@ -163,6 +163,7 @@ $specialPageAliases = array( 'Blankpage' => array( 'Blank side' ), 'LinkSearch' => array( 'Lenkesøk' ), 'DeletedContributions' => array( 'Slettede bidrag' ), + 'Nuke' => array( 'Massesletting' ), ); $messages = array( diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index ecf3295f5e..86c354fd62 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -2759,6 +2759,17 @@ $wgMessageStructure = array( '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 @@ Variants for Chinese language", 'special-specialpages' => 'Special:SpecialPages', 'special-blank' => 'Special:BlankPage', 'external_images' => 'External image whitelist', + 'special-nuke' => 'Special:Nuke', ); /** Short comments for standalone messages */