ct777-wiki:サンドボックス

提供: ct777-wiki
ナビゲーションに移動 検索に移動

mw.loader.using(['oojs-ui', 'mediawiki.util']).done( function () {

var scriptActivationLink = mw.util.addPortletLink(

   'p-tb',
   '#',
   '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 = ["不正利用フィルター" ]; 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++ ) { checkUser( reducedList[x] ); } var updButton = new OO.ui.ButtonWidget( { label: 'Update Inactive Administrators?', id: 'upd-inactive-bttn' } ); $("#inactiveList").after( updButton.$element.click( function() { updList(); } ) ); }

    function checkUser( user ) { $.getJSON( //Get contribs and log entries

           mw.util.wikiScript( 'api' ),
           {
               format: 'json',
               action: 'query',
               list: 'logevents|usercontribs',
               leprop: 'timestamp',
               ledir: 'older',
               leuser: user,
               lelimit: 1, //We only need the most recent log action/edit
               uclimit: 1,
               ucuser: user,
               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 ) {
              		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." )*/);
    

    }

    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 3 months mm -= 3; 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 = "[[User:<a href=\"https://newusopedia.miraheze.org/wiki/Special:Contribs/" + userName + "\">" + userName + "</a>|" + userName + "]]"; var tribsInfo; if( tribsArray[0] !== undefined ) { tribsInfo = tribsArray[0].timestamp; tribsInfo = tribsInfo.slice( 0, tribsInfo.indexOf("T") ); tribsInfo = tribsArray[0].revid + "|" + tribsInfo; tribsInfo = "Special:PermanentLink/" + tribsInfo + ""; } else { tribsInfo = 'None'; } var logsInfo = logsArray[0].timestamp; logsInfo = logsInfo.slice( 0, logsInfo.indexOf("T") ); 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: 5348, prop: 'revisions', rvprop: 'content' } ).done( function ( data ) { try { var wtext = data.query.pages[5348].revisions[0]['*']; wtext = wtext.substr( 0, wtext.indexOf("|-") ) + list + "\n" + wtext.substr( wtext.indexOf( "|}" ) ); $.ajax( { url: mw.util.wikiScript( 'api' ), type: 'POST', dataType: 'json', data: { format: 'json', action: 'edit', title: 'User:開拓者/活動のない管理者一覧', text: wtext, summary: 'Automatically updating list', token: mw.user.tokens.get( 'csrfToken' ), } } ).done( function() { alert( "Updated User:開拓者/活動のない管理者一覧" ); var reload = new OO.ui.ButtonWidget( { label: 'Load original 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 ) { // ignore } } ).fail( function ( e, data ) { console.log( e.message ); console.log( JSON.stringify( data ) ); } ); } });