Jump to content

User:Tks4Fish/nukeAll.js

From Meta, a Wikimedia project coordination wiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
//Tool for nuking all edits of a certain user
//by [[User:Martin Urbanec]] and [[User:Tks4Fish]]

function manualNuke() {
	var username = mw.config.get("wgRelevantUserName");
	new mw.Api().get({
		"action": "query",
		"format": "json",
		"list": "allrevisions",
		"arvprop": "ids|timestamp|flags|comment|user",
		"arvlimit": "max",
		"arvuser": username
	}).then(function(data) {
		mw.notify('Deleting all pages created by ' + username + '. To abort, close this tab.');
		reason = prompt('Deletion reason');
		manualNukeProcess(data, reason);
	});
}

var countDeleted = 0;

function manualNukeProcessInternal(queue, reason) {
	if ( queue.length === 0 ) {
		return $.Deferred().resolve();
	}
	let id = queue.shift();
	return new mw.Api().postWithEditToken({
		action: "delete",
		pageid: id,
		reason: reason,
	}).then(function(data){
		if (data.error !== undefined)
		{
			console.log(data);
		}
		else
		{
			countDeleted = countDeleted + 1;
			console.log(countDeleted);
		}
		return manualNukeProcessInternal(queue, reason);
	});
}

function manualNukeProcess(data, reason) {
	let ids = [];
	for(var i = 0; i < data.query.allrevisions.length; i++) {
		if(data.query.allrevisions[i].revisions[0].parentid !== 0) {
			continue;
		}
		ids.push(data.query.allrevisions[i].pageid);
	}
	manualNukeProcessInternal(ids, reason).then(() => {
		console.log (countDeleted);
		mw.notify(countDeleted + ' pages were successfully deleted.');
	});
}

$(document).ready(function()
{
	if( mw.config.get("wgCanonicalSpecialPageName") == "Contributions" )
	{
		mw.loader.getScript("//meta.wikimedia.org/w/index.php?title=User:Tks4Fish/gsCheck.js&action=raw&ctype=text/javascript").then( function() {
			verifyWiki(mw.config.get("wgDBname")).then(function(data) {
				if (data === true) {
					verifyUser(mw.config.get("wgUserName")).then(function(data) {
						if (data === true) {
							mw.loader.using("mediawiki.util").done( function ()
							{
								mw.util.addPortletLink('p-cactions','#',"nuke all","ca-nukeeverything","nuke all created pages displayed here");
								$("#ca-nukeeverything").click( function(event)
									{
										if (confirm("Are you sure you want to delete all of this user's contributions?"))
										{
											event.preventDefault();
											return manualNuke();
										}
										else return;
								});
							});
						}
					});
				}
				else if (/sysop/.test(mw.config.get("wgUserGroups"))) {
					mw.loader.using("mediawiki.util").done( function ()
					{
						mw.util.addPortletLink('p-cactions','#',"nuke all","ca-nukeeverything","nuke all created pages displayed here");
						$("#ca-nukeeverything").click( function(event)
							{
								if (confirm("Are you sure you want to delete all of this user's contributions?"))
								{
									event.preventDefault();
									return manualNuke();
								}
								else return;
						});
					});
				}
			});
		});
	}
});