Aller au contenu

Utilisateur:NoFWDaddress/Gadget-markAdmins-updater.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/**
* Provide an easy way to update the table of the gadget "markAdmins"
*  
* @author NoFWDaddress <https://twitter.com/NoFWDaddress>, 2018
* @documentation <https://fr.wikipedia.org/wiki/Discussion Utilisateur:NoFWDaddress/Gadget-markAdmins-updater.js#Documentation>
* 
* Quick install: add "importScript('Utilisateur:NoFWDaddress/Gadget-markAdmins-updater.js');" to your Commons.js
* Usage: Simply go on the gadget page and click the blue button to update the list (needs JS-admin privileges)
*/

// <nowiki>

window.markAdminUpdate = {
	config : {
		dataPage : 'Utilisateur:NoFWDaddress/Brouillon/MediaWiki:Gadget-markAdmins-data.js',
		groups : {
			frwiki : ['sysop', 'oversight', 'checkuser', 'bureaucrat'],
			meta : ['steward', 'otrs-member']
		}
	},
	groupsByUsers : {},
	
	init: function() {
		if ( mw.config.get( 'wgPageName' ) != this.config.dataPage )
			return;

		// Create the button
		firstHeading = document.getElementById("firstHeading");
 
		var html =
		'<a href="#" onclick="markAdminUpdate.updateList()" id="markAdminUpdate">'
		+ '<span class="mw-ui-button mw-ui-progressive" role="button">'
		+ 'Mettre à jour avec les dernières données'
		+ '</span></a>';
		
		var div = document.createElement("div");
		div.className = 'plainlinks';
		div.innerHTML = html;
		
		firstHeading.parentNode.insertBefore(div, firstHeading.nextSibling);
	},
	updateList: function() {
		this.$fetchData();
	},
	$fetchData: function() {
		var api = new mw.Api(),
			params = {
				action: 'query',
				list: ['globalallusers', 'allusers'],
				agugroup: this.config.groups.meta,
				augroup: this.config.groups.frwiki,
				aguprop: 'groups',
				auprop: 'groups',
				auwitheditsonly: 1,
				agulimit: 'max',
				aulimit: 'max'
			};
			
		api.get(params).done(function (data) {
		    markAdminUpdate.evalResult(data);
		    markAdminUpdate.updateContent();
		});
	},
	updateContent: function() {
		var output = "mw.hook('userjs.script-loaded.markadmins').fire(";
		
		output += JSON.stringify(this.groupsByUsers).replace('"],"', '"],\r\n\t"');
		
		output += ");";

		// Edit
		new mw.Api().edit(this.config.dataPage,
		    function (revision) {
		        return {
		            text: output,
		            summary: 'Mise à jour des groupes',
		            minor: true
		        };
		    })
		    .then(function () {
		        console.log( 'Saved! ');
		    });
		
		// Alert
		alert('Le nouveau contenu a été inséré. Controllez votre historique svp.');
	},
	evalResult: function(data) {
		var that = markAdminUpdate;
		
		console.log(data);
		
		// Allusers
		$.each(data.query.allusers, function(i, v) {
			that.groupsByUsers[v.name] = that.stripgroups(v.groups);
		});
		
		// Globalallusers
		$.each(data.query.globalallusers, function(i, v) {
			var gbu = that.groupsByUsers[v.name];
			if(gbu === undefined)
				gbu = that.stripgroups(v.groups);
			else
				gbu = gbu.concat(that.stripgroups(v.groups));
				
			that.groupsByUsers[v.name] = gbu;
		});
		
		console.log(that.groupsByUsers);
	},
	stripgroups: function(groups) {
		var tcg = this.config.groups.frwiki.concat(this.config.groups.meta);
	
		groups = groups.filter( function( el ) {
		  return tcg.indexOf( el ) >= 0;
		});
		
		return groups;
	}
};

markAdminUpdate.init();
// </nowiki>