Year of the Dragon: Through April 23rd, claim the adventure pack Slice of Life for free! Speak to Xatheral in the Hall of Heroes.

Game mechanicsNewbie guideIn developmentDDO StoreSocial Media


ChallengesClassesCollectablesCraftingEnhancementsEpic DestiniesFavorFeats

GlossaryItemsMapsMonstersPlacesQuestsRacesReincarnationSkillsSpells


Please create an account or log in to build a reputation and unlock more editing privileges, and then visit DDO wiki's IRC Chat/Discord if you need any help!

MediaWiki:Gadget-SpecialPages.js/Autopromote.js

From DDO wiki
Jump to navigation Jump to search

Note: After saving, you may have to bypass your browser's cache to see the changes, you can click here or try one of the methods below..

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl+F5 or Ctrl+r ( Command+r on a Mac)
  • Google Chrome: Press Ctrl+ Shift+R ( Command+ Shift+R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl+F5
  • Konqueror: Click Reload or press F5
  • Opera: Clear the cache in Tools ‣ Preferences
//<nowiki>
( function ( $, mw ) {
  // Get a complete list of users, edit counts, account ages, and current groups.
  var promotionCandidates = {};
  var ecVIP = 100;// [[DDO:Ddowikivip]]: "The general consensus seems to be that any user with a triple digit edit count ([[:C:100 edit users]]) is qualified for this group."
  var ecSU = 250;// [[DDO:Superuser]]: "Users that are up to at least [[:C:250 edit users]] should be in this group."
  var aufrom = '';// start at the beginning
  while( aufrom !== '#' ) {
    $.ajax( {//* REALLY DON'T LIKE THIS!!! *//*
      url: 'https://ddowiki.com/api.php?action=query&format=json&aulimit=max&list=allusers&auexcludegroup=sysop|bureaucrat|steward&auprop=groups|blockinfo|editcount|registration&auwitheditsonly=1&aufrom=' + aufrom,
      dataType: 'json',
      async: false,//* REALLY DON'T LIKE THIS!!! IT WILL FAIL IN THE FUTURE!!! *//*
      success: function( successData ) {
        var resultObject = successData.query.allusers;
        $.each( resultObject, function( ) {
          var isBlocked = ( $( this )[ 0 ].blockedby !== undefined ? true : false );
          var editCount = $( this )[ 0 ].editcount;// Get the edit count from the API (doesn't include deleted edits)
          var isSU = ( $.inArray( 'superuser', $( this )[ 0 ].groups ) !== -1 ? true : false );// Is the user a superuser
          var isVIP = ( $.inArray( 'ddowikivip', $( this )[ 0 ].groups ) !== -1 ? true : false );// Is the user a ddowikivip
          // If the user is not blocked, and should be a VIP or SU but isn't, then...
          if ( !isBlocked && ( ( !isVIP && editCount >= ecVIP ) || ( !isSU && editCount >= ecSU ) ) ) {
            promotionCandidates[ $( this )[ 0 ].name ] = {};// Create an object with the user name
            promotionCandidates[ $( this )[ 0 ].name ].editcount = editCount;// Put edit count in user's object
            var currDate = new Date();// Define a new date constructor
            var currDateInMonths = currDate.getFullYear() * 12 + currDate.getMonth();// Calculate the current number of months since Jan 2000
            var regSince = ( $( this )[ 0 ].registration === '' ? new Date( 1999, 11, 30 ) : new Date( $( this )[ 0 ].registration ) );// Date object for registration date
            var age = ( currDateInMonths - ( ( regSince.getFullYear() * 12 ) + regSince.getMonth() ) );// Calculate age in months
            promotionCandidates[ $( this )[ 0 ].name ].age = age;// Put the age in the user's object
            promotionCandidates[ $( this )[ 0 ].name ].isSU = isSU;// Toggle the superuser object element
            promotionCandidates[ $( this )[ 0 ].name ].isVIP = isVIP;// Toggle the ddowikivip object element
          }
        } );
        if ( successData[ 'query-continue' ] !== undefined ) {
          aufrom = successData[ 'query-continue' ].allusers.aufrom;// More users to process
        } else {
          aufrom = '#';// Last page - [[User:#]] can not exits and returns "Bad title" if you try. Seems like a fitting way to end the while loop
        }
      },
      fail: function( failureData ) {
        alert( 'Sorry, failed to retrieve information from API.\nPlease check the console for more details if available.' );
        console.error( '%O', failureData );
      }
    } );
  }
  $( 'a[title="Special:UserRights"]' ).parent( 'li' ).after( '<li><a href="./Special:BlankPage?withJS=MediaWiki:Autopromote.js" title="Special:Semi-auto-promote">Semi-auto-promote</a> (' + Object.keys(promotionCandidates).length.toLocaleString() + ')</li>' );
} )( mediaWiki, jQuery );
//</nowiki>[[Category:Gadgets]]