MediaWiki:Group-checkuser.js

Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.


Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.

/* jshint maxerr:500 */
/*<nowiki>
  * JS caricato solo dagli utenti del gruppo checkuser
  * Permettere di scegliere rapidamente da una lista le comuni motivazioni dei CU
  * @author [[Utente:Melos]]
  * @ToDo Questo script probabilmente avrà grossi problemi e andrà in parte riscritto quando
  *   anche l'estensione CheckUser userà OOUI.
  * @ToDo Il "fatto" andrebbe messo solo se tutte le azioni richieste vengono eseguite
  *   con successo.
*/

$(function( mw, $ ){
	function getRCUPermalink() {
		return $.getJSON(
			mw.util.wikiScript('api'),
			{
				format: 'json',
				action: 'query',
				prop: 'info',
				titles: 'Wikipedia:Check_user/Richieste'
			}
		).then( function ( data ) {
			if ( !data.query.pages ) {
				alert( 'Nessun permalink trovato!' );
				return;
			}
			var pagercu = Object.keys( data.query.pages )[0],
				lastrevrcu = data.query.pages[pagercu].lastrevid;

			return '[[WP:RCU|Richiesta]] [[Special:Permalink/' +
					lastrevrcu + '#Richieste inevase|Link permanente]]';
		} );
	}
	
	function show() {
		var $cuInput = $('#checkreason')
				.addClass( 'oo-ui-comboBoxInputWidget' )
				.find( 'input' ),
			buttonMenu = new OO.ui.ButtonMenuSelectWidget( {
				classes: [ 'oo-ui-comboBoxInputWidget-dropdownButton' ],
				indicator: 'down',
			} ),
			motivicu = [
				{ data:'', label:' ' },
				{ data:'link', label:'[[RCU]] + Permalink' },
				{ data:'Abuso di utenze multiple', label:'Abuso di utenze multiple' },
				{ data:'Sospetto sockmaster', label:'Sospetto sockmaster' },
				{ data:'Sospetta evasione del blocco', label:'Evasione' },
				{ data:'Spambot', label:'Spambot' },
				{ data:'Vandalismi', label:'Vandalismi' },
				{ data:'Abuso crosswiki', label:'Abuso crosswiki' }
			];

		mw.util.addCSS(
			'#sceltaMotivi { margin-left:8px; margin-top: 0.2em; }' +
			'.cuScript-done { margin: 0.5em; color: green; font-weight:bold; }' +
			'#sceltaMotiviBlocco { margin-bottom: 0.5em; }'+
			'#cuscript-blocktag, #cuscript-talktag { margin-left:5px; margin-top: 0.2em; }'
		);

		for(var i = 0, len = motivicu.length; i < len; i++) {
			buttonMenu.getMenu().addItems( [
				new OO.ui.MenuOptionWidget( motivicu[ i ] )
			] );
		}

		$cuInput
			.wrap( '<div class=oo-ui-comboBoxInputWidget-field>' )
			.after( buttonMenu.$element );

		buttonMenu.getMenu().on( 'choose', function ( menuOption ) {
			var data = menuOption.getData();
			var promise = data == 'link' ?
				getRCUPermalink() :
				$.Deferred().resolve( data );
			promise.done( function ( label ) {
				$cuInput.val( label );
			} );
		} );

		// Pulsante per blocco e protezione
		var checkuserblocksubmit = $('#checkuserblocksubmit'),
		buttonScriptblocksubmit = new OO.ui.ButtonWidget( {
    		label: 'Blocca & proteggi utenti selezionati',
    		icon: 'lock'
		} );
		buttonScriptblocksubmit.on( 'click', doBlock );
		checkuserblocksubmit.after ( buttonScriptblocksubmit.$element );

		// Link di scelta Sostituisci pagine utente
		$('#blocktag').after($('<span>', {id:'cuscript-blocktag'}));
		$('#cuscript-blocktag').append(
			$("<a>", {
				text: "Bloccoinfinito",
				href: '#',
				title: "Inserisci {{BloccoInfinito}}",
				click: function updateBloccoInfinito () {
					OO.ui.infuse($('#blocktag')).setValue('{{BloccoInfinito}}');
					return false;
				}
			}),
			$("<a>", {
				text: "SP",
				title: "Inserisci {{SP}}",
				href: '#',
				class:"cuscript-link",
				click: function updateSP () {
						sock= prompt('Inserisci il nome utente principale (senza [[utente:)');
						OO.ui.infuse($('#blocktag')).setValue('{{SP|' + sock + '}}');
						return false;
				}
			}),
			$("<a>", {
				text: "Bloccoinfinito + SP",
				title: "Inserisci {{BloccoInfinito}} + {{SP}}",
				href:'#',
				class:"cuscript-link",
				click:function updateBISP () {
					sock= prompt('Inserisci il nome utente principale (senza [[utente:)','');
					OO.ui.infuse($('#blocktag')).setValue('{{BloccoInfinito}}{{SP|' + sock + '}}');
						return false;
				}
			})
		);
		$('#cuscript-blocktag').find('a').slice(1).before(' | ');

		// Link di scelta Sostituisci pagine di discussione
		$('#talktag').after($('<span>', {id:'cuscript-talktag'}));
		$('#cuscript-talktag').append(
			$("<a>", {
				text: "Bloccoinfinito",
				href: '#',
				title: "Inserisci {{BloccoInfinito}}",
				click: function updateBloccoInfinitoTalk () {
					OO.ui.infuse($('#talktag')).setValue('{{BloccoInfinito}}');
					return false;
				}
			}),
			$("<a>", {
				text: "SP",
				title: "Inserisci {{SP}}",
				href: '#',
				class: "cuscript-link",
				click: function updateSPTalk () {
					sock= prompt('Inserisci il nome utente principale (senza [[utente:)');
					OO.ui.infuse($('#talktag')).setValue('{{SP|' + sock + '}}');
					return false;
				}
			}),
			$("<a>", {
				text: "Bloccoinfinito + SP",
				title: "Inserisci {{BloccoInfinito}} + {{SP}}",
				href:'#',
				class:"cuscript-link",
				click:function updateBISPTalk () {
					sock= prompt('Inserisci il nome utente principale (senza [[utente:)','');
					OO.ui.infuse($('#talktag')).setValue('{{BloccoInfinito}}{{SP|' + sock + '}}');
					return false;
				}
			})
		);
		$('#cuscript-talktag').find('a').slice(1).before(' | ');

	}

	function doBlock() {
		$( '#checkuserresults li input:checked' ).each( function blockAtom () {
			var $elem = $(this),
				user = $elem.val(),
				blockReason = OO.ui.infuse( $('#blockreason') ).dropdowninput.getValue(),
				blockReasonOther = OO.ui.infuse( $('#blockreason') ).textinput.getValue();

			if( blockReason !== 'other' ) {
				if (blockReasonOther.trim() !== ''){
					finalBlockReason = blockReason + ": " + blockReasonOther.trim();
				} else {
					finalBlockReason = blockReason;
				}
			} else {
				finalBlockReason = blockReasonOther.trim();
			}

			apiBlock(user, finalBlockReason, $elem);
		});
	}

	function apiBlock( username, lareason, $objscan ) {
		//Blocca
		var stringablocco = {
			format: 'json',
			action: 'block',
			user: username,
			expiry: 'infinite',
			reason: lareason,
			reblock:'',
			nocreate: '',
			autoblock: ''
		},
		blockemail = OO.ui.infuse($('#blockemail'));
		
		if( blockemail.isSelected() ){
			stringablocco.noemail = '';
		}

		new mw.Api().postWithToken( 'csrf', stringablocco )
			.done( function editAfterBlock () {
				$objscan.after($('<span class="cuScript-done">').append('Fatto'));
				edita (username);
			} )
			.fail( function reportBlockFailure ( err ) {
				alert( "Impossibile bloccare l'utente " + username +". Messaggio di errore: " + err );
			} );
	}

	function edita( username ) {
		var usetag = OO.ui.infuse($('#usetag')),
		usettag = OO.ui.infuse($('#usettag'));
		if( usetag.isSelected() ) {
			new mw.Api().postWithToken( 'csrf',
				{
					format: 'json',
					action: 'edit',
					title: 'User:' + username,
					text: OO.ui.infuse($('#blocktag')).getValue(),
					summary:'Utente [[WP:BLOCCO|bloccato infinito]]',
					recreate:''
				}
			)
			.done( function proteggiPostPUEdit () {
				proteggi (username, 'putente');
			} )
			.fail ( function reportUPEditFailure ( err ) {
				alert( "Impossibile modificare la pagina utente. Messaggio di errore: " + err );
			} );
		} else {
			proteggi (username, 'putente');
		}
		if( usettag.isSelected() ) {
			new mw.Api().postWithToken( 'csrf',
				{
					format: 'json',
					action: 'edit',
					title: 'User talk:' + username,
					text: OO.ui.infuse($('#talktag')).getValue(),
					summary:'Utente [[WP:BLOCCO|bloccato infinito]]',
					recreate:''
				}
			)
			.done( function proteggiPostTalkEdit () {
				proteggi (username, 'talk');
			} )
			.fail ( function reportTalkEditFailure ( err ) {
				alert( "Impossibile modificare la talk. Messaggio di errore: " + err );
			} );
		}
	}

	function proteggi( username, cosa ) {
		var putente = 'User:' + username,
		usetag = OO.ui.infuse($('#usetag'));

		switch(cosa){
			case 'putente':
				$.getJSON( mw.util.wikiScript('api'),
					{
						format: 'json',
						action: 'query',
						titles: putente,
						rawcontinue: ''
					},
					function proteggiPUtente (data) {
						var pageget = Object.keys( data.query.pages )[0],
							stringaProtect = {
								format: 'json',
								action: 'protect',
								title: 'User:' + username,
								reason: 'Pagina o sottopagina di utente [[WP:BLOCCO|bloccato infinito]]',
								expiry:'infinite',
							},
							protectCreate = pageget === '-1' &&  usetag.isSelected() === false;

						stringaProtect.protections = protectCreate ? 'create=sysop' : 'edit=sysop|move=sysop';
						new mw.Api().postWithToken( 'csrf', stringaProtect )
							.fail ( function reportUPProtectFailure ( err ) {
								alert( "Impossibile proteggere la pagina utente. Messaggio di errore: " + err );
							} );
					}
				);
				break;
			case 'talk':
				//la pagina di discussione deve sempre esserci
				new mw.Api().postWithToken( 'csrf',
					{
						format: 'json',
						action: 'protect',
						title: 'User talk:' + username,
						reason: 'Pagina o sottopagina di utente [[WP:BLOCCO|bloccato infinito]]',
						expiry:'infinite',
						protections:'edit=sysop|move=sysop'
					}
				)
					.fail ( function reportTalkProtectFailure ( err ) {
						alert( "Impossibile proteggere la talk. Messaggio di errore: " + err );
					} );
				break;
		}
	}

	$( function () {
		if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'CheckUser' ) {
			return;
		}

		mw.loader.using( [
			'mediawiki.api',
			'mediawiki.jqueryMsg',
			'mediawiki.util',
			'oojs-ui-core',
			'oojs-ui.styles.indicators',
			'oojs-ui-widgets'
		] )
			.done( function loadMsg () {
				new mw.Api().loadMessagesIfMissing( [ 'Ipbreason-dropdown' ] )
					.done( show )
					.fail( function () {
						mw.log.error( 'MediaWiki:Group-checkuser - Errore di caricamento del messaggio ipbreason-dropdown' );
					} );
			} )
			.fail( function () {
				mw.log.error( 'MediaWiki:Group-checkuser - Errore di caricamento dei moduli del RL' );
			} );
	} );
}( mediaWiki, jQuery ));
//</nowiki>