User:Void/findInactiveSysops.js

// //This script automates the process of finding inactive sysops. //Warning: the script will replace the contents of the page you are currently viewing when you click the link at the top right of the page. //Output is in the format of "Example || timestamp || timestamp" mw.loader.using(['oojs-ui', 'mediawiki.util']).done( function {

var scriptActivationLink = mw.util.addPortletLink(   'p-personal',    '#',    'Find Inactive Sysops',    'pt-testscript',    'Replaces the contents of the current page with a list of inactive sysops',    null,    '#pt-adminlinks' );

$( scriptActivationLink ).click( function {	var doThis = confirm('Do you want to run the script?');	if( doThis ){		$.getJSON( //Get userlist mw.util.wikiScript('api'), {               format: 'json', action: 'query', list: 'allusers', augroup: 'sysop', aulimit: 50, //Set limit to 50 as there are no more than 50 sysops }       ).done( function ( data ) { try { var users = data.query.allusers; var userlist = []; users.forEach(function(object){           		userlist.push(object.name);            	}); filterUsers(userlist); }       catch ( e ) { console.log( "Content request error: " + e.message ); console.log( "Content request response: " + JSON.stringify( data ) ); }   } ).fail( function  { console.log( "While getting the userlist, there was an AJAX error." ); } ); } } );

function filterUsers (userlist){ var userstring = userlist.toString; var exempt = ["John","Pup","Void","NDKilla","Reception123","Revi","Southparkfan","Abuse filter"]; for (i = 0; i < exempt.length; i++){ userstring = userstring.replace(exempt[i]+",",""); }	var reducedList = userstring.split(","); var tribsData; var logsData; //Visual output onto the page you activate the script on	$("#mw-content-text").replaceWith("The following users are inactive:" + ""); for (x = 0; x < reducedList.length; x++){ $.getJSON(		//Get contribs and log entries           mw.util.wikiScript('api'),            {                format: 'json',                action: 'query',                list: 'logevents|usercontribs',                leprop: 'timestamp',                ledir: 'older',                leuser: reducedList[x],                lelimit: 1, //We only need the most recent log action/edit                uclimit: 1,                ucuser: reducedList[x],                ucdir: 'older',                ucprop: 'timestamp|ids'            }        ).done( function ( data ) {            try {            	tribsData = data.query.usercontribs;            	logsData = data.query.logevents;            	var activeLogs, activeTribs, active;            	var tribsInfo;

if(typeof(logsData[0].timestamp) != "undefined") { activeLogs = compareDates( logsData[0].timestamp, "logs" ); }           	else { activeLogs = false; }           	if( typeof(tribsData[0]) != "undefined" ) { tribsInfo = (tribsData[0].revid+"|"+tribsData[0].timestamp); activeTribs = compareDates( tribsInfo, "tribs" ); }           	else { activeTribs = false; }           	if( activeLogs === false && activeTribs === false ) { var user = tribsData[0].user; console.log(user + " is inactive"); listInactiveUsers( user, tribsData, logsData ); }           }        catch ( e ) { console.log( "Content request error: " + e.message ); console.log( "Content request response: " + JSON.stringify( data ) ); }   } ).fail(/*console.log( "While getting the userlist, there was an AJAX error." )*/);	}	var updButton = new OO.ui.ButtonWidget( { label: 'Update Inactive Administrators?', id: 'upd-inactive-bttn' } );	$("#inactiveList").after(updButton.$element.click(function{updList;})); } function compareDates ( data, dataType ){	//Gets current date in yyyymmdd	var today = new Date;	var dd = today.getDate;	var mm = today.getMonth + 1; //January is 0!	var yyyy = today.getFullYear;	//Set back 6 months	mm -= 6;	if (mm < 0){		mm += 12;		yyyy -= 1;	}	if(dd<10) {   	dd='0'+dd;	}

if(mm<10) { mm='0'+mm; } 	today = ''+yyyy+mm+dd; //This is a string

var date; var isActive; if( dataType === "logs" ){ date = data.slice(0,data.indexOf('T')); date = date.replace("-",""); }	else if( dataType === "tribs" ){ date = data.slice(data.indexOf('|') + 1, data.indexOf('T')); date = date.replace("-",""); }	if (date < today){ isActive = false; }	else{ isActive = true; }	return isActive; }

function listInactiveUsers( userName, tribsArray, logsArray ){ var userLink = "" + userName + ""; var tribsInfo = tribsArray[0].timestamp; tribsInfo = tribsInfo.slice(0, tribsInfo.indexOf("T")); tribsInfo = tribsArray[0].revid + "|" + tribsInfo; var logsInfo = logsArray[0].timestamp; logsInfo = logsInfo.slice(0, logsInfo.indexOf("T")); tribsInfo = "Special:PermanentLink/" + tribsInfo + ""; logsInfo = "" + logsInfo + ""; $("#inactiveList").append( "" + userLink + " || " + tribsInfo + " || " + logsInfo + "" ); }

function updList { var list = $("#inactiveList")[0].innerText; list = '|-\n|' + list; while(list.indexOf("\n[[User:") > 0){		list = list.substr(0,list.indexOf("\n[[User:")) + '\n|-\n|' + list.substr(list.indexOf("\n[[User:") + 1);	}	$.getJSON(		mw.util.wikiScript('api'),           {                format: 'json',                action: 'query',                pageids: 440,                prop: 'revisions',                rvprop: 'content'            }        ).done( function ( data ) {            try {            	var wtext = data.query.pages[440].revisions[0]['*'];            	wtext = wtext.substr(0, wtext.indexOf("|-")) + list + wtext.substr(wtext.indexOf("|}"));            	$.ajax( {        			url: mw.util.wikiScript( 'api' ),			        type: 'POST',			        dataType: 'json',			        data: {			            format: 'json',			            action: 'edit',			            title: 'TestWiki:Inactivity/Inactive administrators',			            text: wtext,			            summary: 'automatically updating list',			            token: mw.user.tokens.get( 'csrfToken' ),			        }    			} ).done(function {    				alert( "Updated TestWiki:Inactivity/Inactive administrators" );    				var reload = new OO.ui.ButtonWidget({ label: 'Load origional page' });    				$('#upd-inactive-bttn').replaceWith(reload.$element.click(function{window.location.reload;}));    			}    			).fail( function ( e, data ){    				console.log( e.message );    				console.log( JSON.stringify( data ) );    			});            }            catch(e){}        }).fail        ( function ( e, data ){    	console.log( e.message );    	console.log( JSON.stringify( data ) );    }); }

}); //