MediaWiki:Gadget-MassReview.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.
/* Script para verificar em massa as páginas editadas pela última vez por admins */
var	done, max,
	admins = [
		'Dante Cardoso Pinto de Almeida',
		'He7d3r',
		'Jorge Morais',
		'Lightningspirit',
		'MGFE Júnior',
		'Marcos Antônio Nunes de Moura',
		'Raylton P. Sousa'
	];
function review( id, level, comment ){
	var data = {
		'format': 'json',
		'action': 'review',
		'revid': id,
		'token': mw.user.tokens.get( 'csrfToken' ),
		'comment': comment,
		//'unapprove': '',
		'flag_accuracy': (level || 1)
	};
	console.debug( 'A revisão cujo id é ' + id + ' será verificada (com o nível ' + level + ' e o sumário "'+ comment +'"' );
	$.ajax({
		url: mw.util.wikiScript( 'api' ),
		type: 'POST',
		dataType: 'json',
		data: data,
		success: function( data ) {
			if ( !data ) {
				alert( 'Erro: a API não retornou dados.' );
			} else if ( 'error' in data ) {
				alert( 'Erro da API: ' + data.error.code + '. ' + data.error.info );
			} else if ( 'review' in data && data.review.result == 'Success' ) {
				console.debug('A página foi revisada!');
			} else {
				console.debug('Aconteceu algo inesperado ao revisar a página...');
			}
		},
		error: function() {
			alert( 'Houve uma falha ao usar ajax para tentar marcar a página como revisada.' );
		}
	});
}
function processUnreviewedPages( from ){
	var data = {
		'format': 'json',
		'action': 'query',
		'generator': 'unreviewedpages',
		'urnamespace': 0,
		'gurlimit': 100,
		'prop': 'revisions',
		'rvprop': 'ids|user|flags',
		'indexpageids': true
	};
	if ( from ){
		data.gurstart = from;
	}
	$.ajax({
		url: mw.util.wikiScript( 'api' ),
		dataType: 'json',
		data: data,
		success: function( data ) {
			var cont;
			if ( !data ) {
				alert( 'Erro: a API não retornou dados.' );
			} else if ( 'error' in data ) {
				alert( 'Erro da API: ' + data.error.code + '. ' + data.error.info );
			} else if ( data.query && data.query.pageids && data.query.pages) {
				$.each( data.query.pageids, function(pos, id){
					var	page = data.query.pages[id],
						title = page.title,
						lastEditor = page.revisions[0].user;
					if( $.inArray( lastEditor, admins ) != -1 && done < max ){
						console.debug( 'O script tentará verificar a revisão da página "' + title + '"cujo id é ' + id + ', pois foi editada por: '+ lastEditor +'' );
						done++;
						review(
							page.revisions[0].revid,
							1 /* = level */,
							'Página verificada por um script, pois o último a editá-la é um admininstrador (' + lastEditor + ')'
						);
						mw.notify(
							'A última edição da página "' +
							page.title +
							'" foi feita por um administrador (' +
							lastEditor +
							').'
						);
					}
				});
				cont = data[ 'query-continue' ] &&
					data[ 'query-continue' ].unreviewedpages &&
					data[ 'query-continue' ].unreviewedpages.gurstart;
				if( cont && done < max ){
					processUnreviewedPages( cont );
				} else {
					mw.notify( 'Concluída a verificação em massa de páginas não revisadas. Foram processadas ' + done + ' páginas cuja última revisão foi feita por um administrador.' );
				}
			} else {
				alert( 'Houve um erro desconhecido ao consultar a lista de páginas não revisadas.' );
			}
		},
		error: function() {
			alert( 'Houve uma falha ao usar ajax para consultar a lista de páginas não revisadas.' );
		}
	});
}

$(function(){
	$(mw.util.addPortletLink(
		'p-cactions',
		'#',
		'Processar páginas não revisadas',
		'ca-unreviewedpages',
		'Consulta a lista de páginas que ainda não foram avaliadas, [[Especial:Páginas a analisar]]'
	)).click( function( e ) {
		done = 0;
		max = prompt('Quantas das páginas cuja última edição foi feita por um administrador deseja que o script verifique automáticamente?\n\n(escolha quantidades bem pequenas, pois o script ainda é experimental. Após a revisão, confira os logs para ver se tudo saiu conforme o esperado. Se notar algum bug, feche o navegador e informe o problema ;-)', 2);
		if (!max) {
			return;
		}
		e.preventDefault();
		processUnreviewedPages();
	});
});

// [[Categoria:Gadgets|MassReview.js]]
// [[Categoria:Scripts do Wikilivros|MassReview.js]]