Year of the Dragon: Through May 28th, claim free Expansion Pack (excluding Vecna Unleashed) or a Greater Elixir of Discovery! Speak to Xatheral in the Hall of Heroes. edit

Thank you for your patience while we continue to upgrade DDOwiki to the latest MediaWiki LTS version. If you find any errors on the site, please visit the Discord chat server and let us know.

Game mechanicsNewbie guideIn developmentDDO StoreSocial Media


ChallengesClassesCollectablesCraftingEnhancementsEpic DestiniesFavorFeats

GlossaryItemsMapsMonstersPlacesQuestsRacesReincarnationSkillsSpells


Please create an account or log in to remove ads, 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]]