Usuário(a):Stanglavine/countCUStats.js
Nota: Depois de publicar, poderá ter de contornar a cache do seu navegador para ver as alterações.
- Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
- Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
- Internet Explorer / Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5
- Opera: Pressione Ctrl-F5.
/**
* Adaptado de [[m:User:Glaisher/countCUStats.js]] por [[m:User:Stanglavine]]
*
* Permite quantificar as verificações realizadas no mês anterior por cada verificador
* Útil para atualizar [[Wikipédia:CheckUser/Estatísticas]]
* NOTA: Lembre-se que verificações realizadas por outros usuários (stewards, staff) não são contabilizadas
*
* Para usar, inclua o código abaixo em seu .js pessoal ([[Special:Mypage/common.js]]) e acesse [[Special:Checkuserstats]]:
*
* //countCUStats.js
* importScript( 'User:Stanglavine/countCUStats.js' );
*
*
* Créditos originais:
*
* Autor original
* @author Glaisher <https://meta.wikimedia.org/wiki/User:Glaisher>
* @link https://meta.wikimedia.org?oldid=15206551
*
* Correções em julho de 2019
* @author Kunal Mehta <https://meta.wikimedia.org/wiki/User:Legoktm>
* @author Scott Bassett <https://meta.wikimedia.org/wiki/User:SBassett_(WMF)>
*
*/
var api = new mw.Api();
var config = mw.config.get(['wgNamespaceNumber', 'wgTitle', 'skin']);
var dateToday = new Date();
var month = dateToday.getMonth();
switch (month) {
case 0:
var previousMonth = 'December';
var currentMonth = 'January';
break;
case 1:
var previousMonth = 'January';
var currentMonth = 'February';
break;
case 2:
var previousMonth = 'February';
var currentMonth = 'March';
break;
case 3:
var previousMonth = 'March';
var currentMonth = 'April';
break;
case 4:
var previousMonth = 'April';
var currentMonth = 'May';
break;
case 5:
var previousMonth = 'May';
var currentMonth = 'June';
break;
case 6:
var previousMonth = 'June';
var currentMonth = 'July';
break;
case 7:
var previousMonth = 'July';
var currentMonth = 'August';
break;
case 8:
var previousMonth = 'August';
var currentMonth = 'September';
break;
case 9:
var previousMonth = 'September';
var currentMonth = 'October';
break;
case 10:
var previousMonth = 'October';
var currentMonth = 'November';
break;
case 11:
var previousMonth = 'November';
var currentMonth = 'December';
break;
default:
break;
}
var currentYear = dateToday.getFullYear();
if (previousMonth == "December") {
var previousYear = currentYear-1;
} else {
var previousYear = currentYear;
}
var fromDate = '1 '+previousMonth+' '+previousYear+' UTC';
var toDate = '1 '+currentMonth+' '+currentYear+' UTC';
function getCheckusers() {
return api.get( {
format: 'json',
action: 'query',
list: 'allusers',
augroup: 'checkuser',
agulimit: 15 // Nós provavelmente não teremos mais verificadores que isso
} );
}
function queryCheckUserLog( username ) {
return api.get( {
format: 'json',
list: 'checkuserlog',
culuser: username,
cullimit: 4000, // Espera-se que ninguém efetue mais que isso em um mês.
culdir: 'newer',
// Por favor não mude o formato a não ser que saiba o que está fazendo, ou o script irá quebrar
culfrom: new Date( fromDate ).toISOString(), // Data de início
culto: new Date( toDate ).toISOString() // Data de fim
} );
}
function appendToPage( text ) {
// Note: text must be trusted!
$( '#mw-content-text' ).append( text + '<br/>' );
}
function getStatsTable( entries ) {
var html =
'<table class="wikitable sortable">\n'
+ '<tr>'
+ '<th> Usuário </th>'
+ '<th> Contagem </th>'
+ '</tr>\n';
$.each( entries, function( i, entry ) {
var name = (typeof entry.name == "string") ? entry.name : JSON.stringify(entry.name);
var count = (typeof entry.count == "string") ? parseInt(entry.count).toString() :
(typeof entry.count == "number") ? entry.count.toString() : JSON.stringify(entry.count);
html += '<tr>'
+ '<td>' + mw.html.escape( name ) + '</td>'
+ '<td>' + mw.html.escape( count ) + '</td>'
+ '</tr>\n';
} );
html += '</table>';
return html;
}
function init() {
getCheckusers().done( function( data ) {
var checkusers = data.query.allusers,
checkuserCount = checkusers.length,
totalCount = 0,
stats = [];
promises = []; // promise for all query api requests
$( '#mw-content-text' ).empty();
appendToPage( '<span id="cu-status">Consultando... Por favor aguarde.</span>' );
var $status = $( '#cu-status' );
$.each( checkusers, function( i, info ) {
var username = info.name;
var queryPromise = queryCheckUserLog( username );
promises.push( queryPromise );
queryPromise.done( function( data ) {
if ( !data.query ) {
onError( data );
}
var cuCount = data.query.checkuserlog.entries.length;
stats.push( {
name: username,
count: cuCount
} );
totalCount += cuCount;
} ).fail( function( data ) {
onError( data );
} );
function onError( data ) {
$status.text( 'Erro ao consultar.' );
throw 'Erro ao consultar ' + mw.html.escape( username ) + ' detalhes: ' + JSON.stringify( data );
}
} );
$.when.apply( $, promises ).done( function() {
// Mostrar tabela assim que houver todos os dados necessários
$status.text('Estatísticas mensais sempre relativas ao mês anterior (nesse momento, '+previousMonth+' '+previousYear+'). Lembre-se que verificações realizadas por stewards ou staff não são contabilizadas nesta página e precisam ser aferidas manualmente. Total de verificações efetuadas: '+totalCount+'.');
appendToPage( getStatsTable( stats ) );
mw.loader.using( 'jquery.tablesorter', function() {
$( 'table' ).tablesorter();
} );
});
} );
}
if (config.wgNamespaceNumber == -1 &&
config.wgTitle.toLowerCase() == "checkuserstats"
) {
var bodyContent = (config.skin == "cologneblue" ? "article" : "bodyContent");
document.getElementsByTagName("h1")[0].textContent = "Checkuser log stats";
document.title = "Checkuser log stats";
init();
}