MediaWiki:Common.js/staff-tagger.js

/** Staff Tagger * * Code to automate some part of administrator's actions for staff promotion/demotion * * Staff "tag" option appears on Template:User_rights_request * It is commonly used on HSW:AN */

/* jshint esversion: 5, forin: true, immed: true, indent: 4, latedef: true, newcap: true, noarg: true, undef: true, undef: true, unused: true, browser: true, jquery: true, onevar: true, eqeqeq: true, multistr: true, maxerr: 999999, -W082, -W084

/* global mw */ "use strict"; mw.loader.using(["mediawiki.api", "mediawiki.util", "mediawiki.Uri"]).then(function {	if (!/sysop|soap|staff|helper|wiki-manager|content-team-member|util/.test(mw.config.get('wgUserGroups').join('\n')) || (window.StaffTagger && window.StaffTagger.Loaded)) {		return;	}	window.StaffTagger = window.StaffTagger || {};	window.StaffTagger.Loaded = true;	console.log("[StaffTagger v1.0] Loading.");	$('span#tag-user > a[href*="prepend="].text').click(function(e) { e.preventDefault; var rank = prompt('Please enter a staff rank to tag the user with', 'rollback'); var user = $(this).parent.attr('data-user'); var rank2; function getSection(rank) { var matches = { 'bureaucrat': 4, 'sysop': 5, 'codeeditor': 6, 'content-moderator': 8, 'threadmoderator': 10, 'rollback': 11, };			return matches[rank] || null; }		var aliases = { 'bur': 'bureaucrat', 'bcrat': 'bureaucrat', 'bureau': 'bureaucrat', 'bureaucrat': 'bureaucrat', 'crat': 'bureaucrat', 'b': 'bureaucrat', 'admin': 'administrator', 'adm': 'administrator', 'ad': 'administrator', 'administrator': 'administrator', 'administr': 'administrator', 'sysop': 'administrator', 'ce': 'codeeditor', 'codeeditor': 'codeeditor', 'code editor': 'codeeditor', 'code': 'codeeditor', 'code edit': 'codeeditor', 'c e': 'codeeditor', 'cd edit': 'codeeditor', 'cde edit': 'codeeditor', 'codeedit': 'codeeditor', 'cdeedit': 'codeeditor', 'cde edtr': 'codeeditor', 'cdeedtr': 'codeeditor', 'content': 'content-moderator', 'cont': 'content-moderator', 'cont mod': 'content-moderator', 'cont moderator': 'content-moderator', 'content mod': 'content-moderator', 'content moderator': 'content-moderator', 'c moderator': 'content-moderator', 'c mod': 'content-moderator', 'cm': 'content-moderator', 'content-moderator': 'content-moderator', 'd mod': 'threadmoderator', 'd moderator': 'threadmoderator', 'disc mod': 'threadmoderator', 'disc moderator': 'threadmoderator', 'discuss m': 'threadmoderator', 'discuss mod': 'threadmoderator', 'discuss moderator': 'threadmoderator', 'disc m': 'threadmoderator', 'discussions m': 'threadmoderator', 'discussions mod': 'threadmoderator', 'threadmoderator': 'threadmoderator', 'dm': 'threadmoderator', 'thread-moderator': 'threadmoderator', 'thread moderator': 'threadmoderator', 'th': 'threadmoderator', 'th m': 'threadmoderator', 'thr mod': 'threadmoderator', 'thread mod': 'threadmoderator', 't mod': 'threadmoderator', 'rollback': 'rollback', 'roll': 'rollback', 'rollb': 'rollback', 'rb': 'rollback', 'rollbacker': 'rollback', 'rback': 'rollback', 'bot': 'bot', 'robot': 'bot', 'bt': 'bot', };		if (rank.match(/.+?\s*[\,\|\;]\s*.+/)) { rank = rank.split(/\s*[\,\|\;]\s*/); rank2 = aliases[rank[1]]; rank = aliases[rank[0]]; } else { rank2 = null; rank = aliases[rank]; }		new mw.Api.post({			action: 'edit',			minor: true,			bot: true,			watchlist: 'nochange',			title: 'User:' + user,			summary: 'Adding message box to userpage',			prependtext: '',			token: mw.user.tokens.values.editToken,		}).always(function(data) {			if (data.edit) {				console.log("[StaffTagger]: Successfully tagged", user, 'With rank "' + rank + '"');				new mw.Api.post({ action: 'protect', bot: true, watchlist: 'nochange', title: 'User:' + user, protections: (							rank2 							? rank2 !== "threadmoderator" && rank2 !== "rollback" && rank2 !== "bot" 							: rank !== "threadmoderator" && rank !== "rollback" && rank !== "bot"						) ? 'edit=sysop|move=sysop' : 'edit=autoconfirmed|move=autoconfirmed', expiry: 'infinite', reason: 'Protecting wiki staff userpage', token: mw.user.tokens.values.editToken, }).always(function(data) { if (data.protect) { console.log("[StaffTagger]: Successfully protected ", user + '\'s userpage'); new mw.Api.get({								action: 'query',								list: 'users',								ususers: user,								ustoken: 'userrights',							}).always(function(data) {								var usToken = data.query.users[0].userrightstoken;								if (data.query) {									new mw.Api.post({ "action": "userrights", "format": "json", "user": user, "add": rank + (rank2 ? "|" + rank2 : ""), "expiry": "infinite", "reason": "Per request to be staff: Hypixel_SkyBlock_Wiki_talk:Requests_to_be_staff", "token": usToken, }).always(function(data) { if (data.userrights) { console.log('[StaffTagger]: Successfully added ranks!'); if (rank2) { new mw.Api.post({													"action": "userrights",													"format": "json",													"user": user,													"add": rank + (rank2 ? "|" + rank2 : ""),													"expiry": "infinite",													"reason": "Per request to be staff: Hypixel_SkyBlock_Wiki_talk:Requests_to_be_staff",													"token": usToken,												}).always(function(data) {													if (data.userrights) {														console.log('[StaffTagger]: Successfully added second rank!');													} else {														console.warn('[StaffTagger]: Failed to add ranks: ' + data);													}												}); new mw.Api.post({													action: "edit",													section: getSection(rank),													appendtext: '\n*',													token: mw.user.tokens.values.editToken,													title: 'Hypixel_SkyBlock_Wiki:Staff',													summary: 'Adding ' + user + ' to the staff list per request to be staff: Hypixel_SkyBlock_Wiki_talk:Requests_to_be_staff",													minor: 1,													bot: 1,													watchlist: 'nochange',												}).always(function(data) {													if (data.edit) {														console.log('[StaffTagger]: Successfully added ' + user + ' to staff member list');														new mw.Api.post({ action: "edit", section: getSection(rank2), appendtext: '\n*', token: mw.user.tokens.values.editToken, title: 'Hypixel_SkyBlock_Wiki:Staff', summary: 'Adding ' + user + ' to the staff list per request to be staff: Hypixel_SkyBlock_Wiki_talk:Requests_to_be_staff", minor: 1, bot: 1, watchlist: 'nochange', }).always(function(data) { if (data.userrights) { console.log('[StaffTagger]: Successfully added ' + user + ' to staff member list'); mw.hook('hsw.gadget.staffColorsUpdater').add(function(updater) {																	updater;																	console.log('[StaffTagger]: Updating Staff colors...');																}); mw.hook('hsw.gadget.staffColorsUpdater').add(console.log); } else { console.warn('[StaffTagger]: Failed to Add user to staff member list: ' + data); }														});													} else {														console.warn('[StaffTagger]: Failed to Add user to staff member list: ' + data);													}												}); } else { new mw.Api.post({													action: "edit",													section: getSection(rank),													appendtext: '\n*',													token: mw.user.tokens.values.editToken,													title: 'Hypixel_SkyBlock_Wiki:Staff',													summary: 'Adding ' + user + ' to the staff list per request to be staff: Hypixel_SkyBlock_Wiki_talk:Requests_to_be_staff",													minor: 1,													bot: 1,													watchlist: 'nochange',												}).always(function(data) {													if (data.edit) {														console.log('[StaffTagger]: Successfully added ' + user + ' to staff member list');													} else {														console.warn('[StaffTagger]: Failed to Add user to staff member list: ' + data);													}												}); }										} else { console.warn('[StaffTagger]: Failed to give ranks: ' + data); }									});								} else {									console.warn("[StaffTagger]: API error in getting user rights token: " + data, '(API Error code \"' + data + '\")');								}							}); } else { console.warn("[StaffTagger]: API error in protecting ", user + '\'s userpage:', data, '(API Error code \"' + data + '\")'); }				});			} else {				console.warn('[StaffTagger]: API Error in Tagging', user + ':', data, '(API Error code "' + data + '")');			}		}); }); });