Utente:MauroBot/BotCancellazioni/core.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.
// <nowiki>
/*=================================================================================================
*
* core.js
*
* Funzioni principali per l'esecuzione del bot.
*
* ================================================================================================
*/
/*=================================================================================================
*
* Classe writeStatusObj()
*
* La classe rappresenta lo stato della funzione di scrittura di una pagina. La richiesta AJAX
* è terminata quando this.done=true. L'esito della scrittura è riportato in this.ok. In caso
* di errore (this.ok=false), il testo è riportato in this.error
*
* ================================================================================================
*/
function writeStatusObj()
{
this.done = false;
this.ok = true;
this.error = '';
}
/*=================================================================================================
*
* Classe readPDCStatusObj()
*
* La classe rappresenta lo stato della funzione che si occupa della lettura delle procedure di
* cancellazione.
*
* ================================================================================================
*/
function readPDCStatusObj()
{
this.done = false;
this.qcontinue = false;
this.ok = false;
this.finish = false;
this.error = '';
this.gcmcontinue = false;
this.clcontinue = false;
this.rawData = [];
}
/*=================================================================================================
*
* Classe pdcObj()
*
* La classe rappresenta una procedura di cancellazione.
*
* ================================================================================================
*/
function pdcObj()
{
this.pdc = {'pageid':0, 'titolo-pdc':'', 'titolo-voce':'', 'multipla':0, 'len':0, 'temperatura':0, 'protezione':false, 'data-apertura':false, 'ultima-modifica':false, 'errors':[]};
this.isconsensuale = false; // Categorizzata in Categoria:Cancellazioni consensuali del XX
this.isprorogata = false; // Categorizzata in Categoria:Cancellazioni consensuali prorogate del XX
this.isvotazione = false; // Categorizzata in Categoria:Cancellazioni con votazione del XX
this.incorso = false; // Procedura di cancellazione in fase di discussione
this.incompleta = true; // Indica se la lettura della categorizzazione è completa
}
/*=================================================================================================
*
* Funzione iniziaLetturaCategoriaPDC(tipo, data, status)
*
* La funzione avvia la lettura (invia la richiesta all'API) delle procedure di cancellazione
* contenute nella categoria individuata dai parametri tipo e data, cioè se tipo=semplificate e
* data=2013/01/01, verrà letto in contenuto di Categoria:Cancellazioni semplificate del 1 gennaio 2013.
* Il parametro status è un oggetto di tipo readPDCStatusObj()
*
* ================================================================================================
*/
function iniziaLetturaCategoriaPDC(tipo, data, status)
{
status.done = false;
// Converto la data in formato giorno mese anno (testuale)
datatxt = convertiDateToCategoria(data);
// Genero il nome della categoria da scansionare in funzione del tipo di procedure da caricare
// (semplificata, consensuale, consensuale prorogata, ordinaria)
switch(tipo)
{
case 'semplificate':
categoria = Cat_Semplificata_Prefix+datatxt;
break;
case 'consensuali':
categoria = Cat_Consensuale_Prefix+datatxt;
break;
case 'consprorogate':
categoria = Cat_ConsProrogata_Prefix+datatxt;
break;
case 'ordinarie':
categoria = Cat_Ordinaria_Prefix+datatxt;
break;
case 'votazioni':
categoria = Cat_Votazione_Prefix+datatxt;
break;
}
// Richiesta da inviare all'API
request = {
format: 'json',
action: 'query',
generator: 'categorymembers', // Legge le voci nella categoria
gcmtitle: categoria,
gcmtype: 'page',
gcmsort: 'timestamp', // Ordinamento per data di inserimento nella categoria
gcmdir: 'asc',
prop: 'info|categories|revisions', // Per ogni voce carico info, categorie e ultima revisione
inprop: 'protection',
clprop: 'sortkey',
rvprop: 'timestamp',
rawcontinue: '1'
}
// Gestione della prosecuzione della query (query-continue dell'API)
if( status.qcontinue )
{
if( status.clcontinue )
request['clcontinue'] = status.clcontinue;
if( status.gcmcontinue )
request['gcmcontinue'] = status.gcmcontinue;
}
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: request,
dataType: 'json',
type: 'GET',
timeout: 5000,
success: function( data ) {
processRawData(tipo, data, status);
},
error: function( xhr, textStatus, errorThrown ) {
d = new Date();
status.error = '['+d.toISOString()+'] [JQuery/AJAX Error] Errore durante la lettura delle procedure \"'+tipo+'" del '+datatxt+' ('+textStatus+')';
status.ok = false;
status.done = true;
}
});
}
/*=================================================================================================
*
* Funzione processRawData(tipo, data, status)
*
* La funzione analizza la risposta dell'API, estraendo le informazioni delle PDC
*
* ================================================================================================
*/
function processRawData(tipo, data, status)
{
// La richiesta ha avuto esito positivo?
if ( data && data.query && data.query.pages )
{
var idcontinue = 0;
// Gestione del query-continue
if ( data['query-continue'] )
{
// La query non è completata
status.qcontinue = true;
if( data['query-continue'].categories )
{
status.clcontinue = data['query-continue'].categories.clcontinue;
s = status.clcontinue.split('|');
idcontinue = parseInt(s[0]);
}
else
{
status.clcontinue = false;
if ( data['query-continue'].categorymembers )
status.gcmcontinue = data['query-continue'].categorymembers.gcmcontinue;
}
}
else
status.qcontinue = false;
// Ciclo per ogni PDC
for( var pageid in data.query.pages )
{
// La pdc è già stata processata?
var i;
for(i=0; i < status.rawData.length; i++)
{
if( status.rawData[i]['pdc'].pageid == parseInt(pageid) )
break;
}
if( i == status.rawData.length ) // La pdc non è ancora stata processata!
{
// Leggo i dati di base
titoloPDC = data.query.pages[pageid].title;
// Controllo la correttezza del prefisso della PDC
if( titoloPDC.indexOf(PDC_Prefix) != 0 )
continue;
// Creo un nuovo oggetto per la pdc
status.rawData.push( new pdcObj() );
status.rawData[i]['pdc'].pageid = parseInt(pageid);
status.rawData[i]['pdc']['titolo-pdc'] = titoloPDC;
status.rawData[i]['pdc']['len'] = data.query.pages[pageid]['length'];
// Controllo se la procedura è multipla
if( titoloPDC.indexOf(PDC_Prefix_multiple) == 0 )
status.rawData[i]['pdc']['multipla'] = 1;
}
// Verifico se ho devo processare le categorie
if( status.rawData[i].incompleta && data.query.pages[pageid].categories)
{
// Le categorie della pdc devono essere lette
for( var index in data.query.pages[pageid].categories )
{
cat = data.query.pages[pageid].categories[index].title;
if( cat.indexOf(Cat_Semplificata_Prefix) == 0 )
{
// Converto la data dal formato giorno mesetxt anno in un oggetto Date
status.rawData[i]['pdc']['data-apertura'] = convertiCategoriaToDate( cat.substring( Cat_Semplificata_Prefix.length ) );
status.rawData[i]['pdc']['titolo-voce'] = data.query.pages[pageid].categories[index].sortkeyprefix;
}
else if( cat.indexOf(Cat_Consensuale_Prefix) == 0 )
status.rawData[i].isconsensuale = true;
else if ( cat.indexOf(Cat_ConsProrogata_Prefix) == 0 )
status.rawData[i].isprorogata = true;
else if ( cat.indexOf(Cat_Ordinaria_Prefix) == 0 )
status.rawData[i].isvotazione = true;
else if ( cat.indexOf(Cat_Votazione_Prefix) == 0 )
status.rawData[i].isvotazione = true;
else if ( cat.indexOf(Cat_InCorso) == 0 )
status.rawData[i].incorso = true;
}
if( pageid != idcontinue)
{
status.rawData[i].incompleta = false;
titoloPDC = data.query.pages[pageid].title;
// Il titolo della voce da cancellare è contenuto nell'ordinamento {{DEFAULTSORT}}
//titolo = data.query.pages[pageid].categories[0].sortkeyprefix;
titolo = status.rawData[i]['pdc']['titolo-voce'];
// Controllo validità del titolo della pdc
// Rimuovo il prefisso della PDC. Esempio:
// Wikipedia:Pagine da cancellare/titolo/2 -> titolo/2
if( status.rawData[i]['pdc']['multipla'] == 1 )
titolo1 = titoloPDC.substring(PDC_Prefix_multiple.length);
else
titolo1 = titoloPDC.substring(PDC_Prefix.length);
// Se il titolo della voce da cancellare è differente da quello della PDC si tratta
// di una procedura con precedenti
if( titolo != titolo1 )
{
// Il titolo della procedura multipla è lungo, come minimo, 2 caratteri più del
// titolo della PDC: i caratteri sono '/' e il numero progressivo
if( titolo1.length < titolo.length+2 )
status.rawData[i]['pdc']['errors'].push('title-error');
else
{
if( titolo1[titolo.length] != '/' || isNaN( Number( titolo1.substring( titolo.length+1 ) ) ) )
status.rawData[i]['pdc']['errors'].push('title-error');
}
}
//status.rawData[i]['pdc']['titolo-voce'] = titolo;
rev_timestamp = data.query.pages[pageid].revisions[0].timestamp;
// rev_timestamp -> YYYY-MM-DD
anno = Number(rev_timestamp.substr(0,4));
mese = Number(rev_timestamp.substr(5,2))-1;
giorno = Number(rev_timestamp.substr(8,2));
status.rawData[i]['pdc']['ultima-modifica'] = new Date(anno, mese, giorno);
if( data.query.pages[pageid].protection.length > 0 )
{
for(var ip=0; ip < data.query.pages[pageid].protection.length; ip++)
{
v = data.query.pages[pageid].protection[ip];
if(v["type"]=="edit")
{
if(v["level"]=="sysop")
status.rawData[i]['pdc']['protezione'] = true;
break;
}
}
}
}
}
} //fine ciclo lettura pdc
status.ok = true;
status.done = true;
}
else if ( data && data.error )
{
// Will this ever happen??
d = new Date();
status.error = '['+d.toISOString()+'] [API Error] Errore durante la lettura delle procedure \"'+tipo+'" del '+
datatxt+' (Errore"'+data.error.code + '": ' + data.error.info+')';
status.ok = false;
status.done = true;
}
else
{
status.ok = true;
status.done = true;
}
}
/*=================================================================================================
*
* Funzione processLetturaCategoriaPDC(tipo, data, status)
*
* La funzione analizza le procedure lette con la funzione processRawData() e restituisce
* una struttura con la seguente forma:
*
* pdc['incorso']{array di pdc}
* pdc['concluse']{array di pdc}
* pdc['errate']{array di pdc}
*
* ================================================================================================
*/
function processLetturaCategoriaPDC(tipo, rawData)
{
var pdc = {'incorso':[], 'concluse':[], 'errate':[]};
for(var i=0; i < rawData.length; i++)
{
// Individuo il tipo di PDC analizzando le categorie presenti nella PDC
var inserisciPDC = false;
switch(tipo)
{
case 'semplificate':
if ( !rawData[i].isconsensuale && !rawData[i].isprorogata && !rawData[i].isvotazione )
inserisciPDC = true;
break;
case 'consensuali':
if ( rawData[i].isconsensuale && !rawData[i].isprorogata && !rawData[i].isvotazione )
inserisciPDC = true;
break;
case 'consprorogate':
if ( rawData[i].isconsensuale && rawData[i].isprorogata && !rawData[i].isvotazione )
inserisciPDC = true;
break;
case 'ordinarie':
case 'votazioni':
if ( rawData[i].isconsensuale && rawData[i].isvotazione )
inserisciPDC = true;
break;
}
// Controllo eventuali errori di categorizzazione
if( !rawData[i].isconsensuale && ( rawData[i].isprorogata || rawData[i].isvotazione ) )
rawData[i]['pdc']['errors'].push( 'category-error' );
// Controllo la presenza di errori nella pdc
if( rawData[i]['pdc']['errors'].length == 0 )
{
if( inserisciPDC )
{
rawData[i]['pdc']['temperatura'] = calcolaTemperatura(tipo, rawData[i]['pdc']['len']);
if ( rawData[i].incorso && !rawData[i]['pdc']['protezione'] )
pdc['incorso'].push(rawData[i]['pdc']);
else
pdc['concluse'].push(rawData[i]['pdc']);
}
}
else // con errori
pdc['errate'].push(rawData[i]['pdc']);
}
return pdc;
}
/*=================================================================================================
*
* Funzione processPDCErrate(procedure)
*
* La funzione analizza le procedure passate come argomento:
*
* procedure['semplificate']['incorso']{array di pdc}
* procedure['semplificate']['concluse']{array di pdc}
* procedure['consensuali']['incorso']{array di pdc}
* procedure['consensuali']['concluse']{array di pdc}
* procedure['consprorogate']['incorso']{array di pdc}
* procedure['consprorogate']['concluse']{array di pdc}
* procedure['votazioni']['incorso']{array di pdc}
* procedure['votazioni']['concluse']{array di pdc}
*
* e individua le errate, rimuovendo eventuali doppioni
*
* ================================================================================================
*/
function processPDCErrate(procedure)
{
var errate = [];
for(var i=0; i < tipologie.length; i++ )
{
tipo = tipologie[i];
if ( procedure[tipo] )
{
// Loop sulle pdc errate
for(var j=0; j<procedure[tipo]['errate'].length;j++ )
{
pdc = procedure[tipo]['errate'][j];
// Verifico che la PDC non sia già stata inserita
var k;
for(k=0; k < errate.length; k++)
{
if( errate[k].pageid == pdc.pageid )
break;
}
if( k == errate.length )
errate.push(pdc);
}
}
}
procedure['errate'] = errate;
}
/*=================================================================================================
*
* Funzione generaLogGiornaliero(data, procedure)
*
* La funzione genera il testo del Log giornaliero
*
* ================================================================================================
*/
function generaLogGiornaliero(data, procedure)
{
txt = '<noinclude>{{paginecancellare}}</noinclude>\n';
txt += '== '+data.getDate()+' '+convertiMeseToTxt(data.getMonth()+1)+' ==\n';
txt += '{{'+Conta_Prefix+convertiDateToLogTxt(data)+'}}\n';
// Procedure errate
if( procedure['errate'].length > 0)
txt += '\n<!--inizio procedure con errori-->\n';
for(var j=0; j<procedure['errate'].length; j++ )
txt += '{{'+procedure['errate'][j]['titolo-pdc']+'}}\n';
// Procedure in corso
for(var i=0; i < tipologie.length; i++ )
{
tipo = tipologie[i];
if( !procedure[tipo] )
continue;
if( procedure[tipo]['incorso'].length > 0 )
{
switch(tipo)
{
case 'ordinarie':
case 'votazioni':
txt += '\n<!--inizio procedure con votazione-->\n';
break;
case 'consprorogate':
txt += '\n<!--inizio procedure consensuali prorogate-->\n';
break;
case 'consensuali':
txt += '\n<!--inizio procedure consensuali-->\n';
break;
case 'semplificate':
txt += '\n<!--inizio procedure semplificate-->\n';
}
for(var j=0; j<procedure[tipo]['incorso'].length;j++ )
txt += '{{'+procedure[tipo]['incorso'][j]['titolo-pdc']+'}}\n';
}
}
// Procedure concluse
var concluse = false;
for(var i=0; i < tipologie.length; i++ )
{
tipo = tipologie[i];
if( !procedure[tipo] )
continue;
if( procedure[tipo]['concluse'].length > 0 && !concluse )
{
txt += '\n<!--inizio procedure concluse/annullate-->\n';
concluse = true;
}
for(var j=0; j<procedure[tipo]['concluse'].length;j++ )
txt += '{{'+procedure[tipo]['concluse'][j]['titolo-pdc']+'}}\n';
}
return txt;
}
/*=================================================================================================
*
* Funzione generaTabellaConteggio(data, procedure)
*
* La funzione genera il testo della la tabella di conteggio.
*
* ================================================================================================
*/
function generaTabellaConteggio(data, procedure)
{
var tabella_InCorso='', tabella_Concluse='', tabella_Errate='';
var n;
var Log_name = Log_Prefix+convertiDateToLogTxt(data);
// Procedure errate
n=0;
for(var j=0; j<procedure['errate'].length; j++ )
{
pdc = procedure['errate'][j];
n++;
riga = CP_errate_row;
riga = riga.replace('__n__', n);
riga = riga.replace('__SP_name__', pdc['titolo-pdc']);
riga = riga.replace('__SP_name__', pdc['titolo-pdc']);
riga = riga.replace('__bgcolor__', '#f6f6f6');
var errors = '';
if( pdc['errors'].length == 1)
errors = error_messages[pdc['errors'][0]];
else
{
var e = [];
for(var i=0; i < pdc['errors'].length; i++)
e.push( (i+1)+') '+error_messages[pdc['errors'][i]] );
errors = '<div style="padding-left:10px;">'+e.join('<br />')+'</div>';
}
riga = riga.replace('__note__', errors);
tabella_Errate = tabella_Errate + riga;
}
// Procedure in corso
n = 0;
for(var i=0; i < tipologie.length; i++ )
{
tipo = tipologie[i];
if( !procedure[tipo] )
continue;
for(var j=0; j<procedure[tipo]['incorso'].length;j++ )
{
pdc = procedure[tipo]['incorso'][j];
n++;
riga = CP_incorso_row;
riga = riga.replace('__n__', n);
riga = riga.replace('__temperatura__', pdc['temperatura']);
riga = riga.replace(/__title__/g, pdc['titolo-voce']);
if( pdc['multipla'] == 1 )
riga = riga.replace('__title_link__', pdc['titolo-voce']);
else
riga = riga.replace('__title_link__', '[[:'+pdc['titolo-voce']+']]');
riga = riga.replace('__SP_name__', pdc['titolo-pdc']);
riga = riga.replace('__LP_name__', Log_name);
if( pdc['multipla'] == 1 )
riga = riga.replace('__note__', notes_messages['multipla']);
else
riga = riga.replace('__note__', '');
switch(tipo)
{
case 'semplificate':
riga = riga.replace('__modalita__', 'semplificata');
riga = riga.replace('__azione__', 'commenta');
riga = riga.replace('__vai_alla__', 'proposta di cancellazione');
riga = riga.replace('__bgcolor__', '#e5ffe5');
break;
case 'consensuali':
riga = riga.replace('__modalita__', 'consensuale');
riga = riga.replace('__azione__', 'commenta');
riga = riga.replace('__vai_alla__', 'discussione');
riga = riga.replace('__bgcolor__', '#fffccc');
break;
case 'consprorogate':
riga = riga.replace('__modalita__', 'consensuale prorogata');
riga = riga.replace('__azione__', 'commenta');
riga = riga.replace('__vai_alla__', 'discussione');
riga = riga.replace('__bgcolor__', '#fffccc');
break;
case 'ordinarie':
case 'votazioni':
riga = riga.replace('__modalita__', 'votazione');
riga = riga.replace('__azione__', 'vota');
riga = riga.replace('__vai_alla__', 'votazione');
riga = riga.replace('__bgcolor__', '#ffe2df');
break;
}
tabella_InCorso = tabella_InCorso + riga;
}
}
// Procedure concluse
n = 0;
for(var i=0; i < tipologie.length; i++ )
{
tipo = tipologie[i];
if( !procedure[tipo] )
continue;
for(var j=0; j<procedure[tipo]['concluse'].length;j++ )
{
pdc = procedure[tipo]['concluse'][j];
n++;
riga = CP_concluse_row;
riga = riga.replace('__n__', n);
riga = riga.replace('__temperatura__', pdc['temperatura']);
riga = riga.replace(/__title__/g, pdc['titolo-voce']);
if( pdc['multipla'] == 1 )
riga = riga.replace('__title_link__', pdc['titolo-voce']);
else
riga = riga.replace('__title_link__', '[[:'+pdc['titolo-voce']+']]');
riga = riga.replace('__SP_name__', pdc['titolo-pdc']);
riga = riga.replace('__LP_name__', Log_name);
if( pdc['multipla'] == 1 )
riga = riga.replace('__note__', notes_messages['multipla']);
else
riga = riga.replace('__note__', '');
if( pdc.protezione )
{
d = pdc['ultima-modifica']-pdc['data-apertura'];
d = Math.ceil(d/1000/3600/24);
if (d > 1)
riga = riga.replace('__durata__', d+' giorni');
else if (d==1)
riga = riga.replace('__durata__', '1 giorno');
else
riga = riga.replace('__durata__', '< 1 giorno');
}
else
riga = riga.replace('__durata__', 'non protetta');
riga = riga.replace('__SP_name__', pdc['titolo-pdc']);
switch(tipo)
{
case 'semplificate':
riga = riga.replace('__modalita__', 'semplificata');
riga = riga.replace('__bgcolor__', '#e5ffe5');
break;
case 'consensuali':
riga = riga.replace('__modalita__', 'consensuale');
riga = riga.replace('__bgcolor__', '#fffccc');
break;
case 'consprorogate':
riga = riga.replace('__modalita__', 'consensuale prorogata');
riga = riga.replace('__bgcolor__', '#fffccc');
break;
case 'ordinarie':
case 'votazioni':
riga = riga.replace('__modalita__', 'votazione');
riga = riga.replace('__bgcolor__', '#ffe2df');
break
}
tabella_Concluse = tabella_Concluse + riga;
}
}
var tabella = '';
if( tabella_Errate.length > 0 )
{
header = CP_errate_header.replace('__last_update_errate__', '<small>Ultimo aggiornamento: ~~~~~</small>');
tabella = header +tabella_Errate+CP_errate_footer;
}
if( tabella_InCorso.length > 0 )
{
if( tabella.length == 0 )
{
header = CP_incorso_header.replace('__last_update_incorso__', '<small>Ultimo aggiornamento: ~~~~~</small>');
tabella = header +tabella_InCorso+CP_incorso_footer;
}
else
{
header = CP_incorso_header.replace('__last_update_incorso__', '');
tabella = tabella + header + tabella_InCorso + CP_incorso_footer;
}
}
if( tabella_Concluse.length > 0)
{
if( tabella.length == 0 )
{
header = CP_concluse_header.replace('__last_update_concluse__', '<small>Ultimo aggiornamento: ~~~~~</small>');
tabella = header + tabella_Concluse + CP_concluse_footer;
}
else
{
header = CP_concluse_header.replace('__last_update_concluse__', '');
tabella = tabella + header + tabella_Concluse + CP_concluse_footer;
}
}
CP_avvisi_1 = CP_avvisi.replace(/__giorno__/g, data.getDate() );
CP_avvisi_1 = CP_avvisi_1.replace(/__mese_num__/g, data.getMonth()+1 );
CP_avvisi_1 = CP_avvisi_1.replace(/__anno__/g, data.getFullYear() );
if( tabella.length > 0 )
return CP_avvisi_1+tabella+CP_footer;
else
return CP_avvisi_1+CP_vuota+CP_footer;
}
/*=================================================================================================
*
* Funzione calcolaTemperatura(tipo, len, voti)
*
* La funzione calcola la temperatura della discussione in funzione della tipologia.
* La temperatura è calcolata come interpolazione lineare tra il decimo e il novantesimo percentile
* della lunghezza della PDC
*
* ================================================================================================
*/
function calcolaTemperatura(tipo, len)
{
switch(tipo)
{
case 'semplificate':
slope = 0.0365;
offset = -24.0;
break;
case 'consensuali':
slope = 0.0075;
offset = -12.81;
break;
case 'consprorogate':
slope = 0.0035;
offset = -9.76;
break;
case 'ordinarie':
case 'votazioni':
slope = 0.0025;
offset = -16.43;
break;
}
temp = Math.round(slope*len+offset);
if (temp > 100)
temp = 100;
else if (temp < 0)
temp = 0;
return temp;
}
/*=================================================================================================
*
* Funzione scriviPagina(titolo, contenuto, summary, editToken)
*
* La funzione scrive una pagina wiki.
*
* ================================================================================================
*/
function scriviPagina(titolo, contenuto, summary, editToken, status)
{
status.done = false;
$.ajax({
url: mw.util.wikiScript( 'api' ),
timeout: 5000,
data: {
format: 'json',
action: 'edit',
title: titolo,
bot: true,
summary: summary,
text: contenuto,
token: editToken
},
dataType: 'json',
type: 'POST',
success: function( data ) {
if ( data && data.edit && data.edit.result == 'Success' )
{
status.ok = true;
status.done = true;
}
else if ( data && data.error )
{
status.done = true;
status.ok = false;
d = new Date();
status.error = '['+d.toISOString()+'] [API Error] Errore durante la scrittura di \"'+titolo+'"'+
' (Errore"'+data.error.code + '": ' + data.error.info+')';
}
else
{
status.done = true;
status.ok = false;
d = new Date();
status.error = '['+d.toISOString()+'] [API Error] Errore durante la scrittura di \"'+titolo+'"'+
' (Errore sconosciuto)';
}
},
error: function( xhr, status ) {
status.done = true;
status.ok = false;
d = new Date();
status.error = '['+d.toISOString()+'] [JQuery/AJAX Error] Errore durante la scrittura \"'+titolo+'" ('+status+')';
}
});
}
/*=================================================================================================
*
* Funzione leggiStatoCatInCorso(statusReq, statusLastUpd)
*
* La funzione si occupa della gestione dell'aggiornamento dei contenuti della categoria
* Categoria:Procedure di cancellazione in corso. La categorizzazione viene fatta per mezzo di
* template e quindi, alla protezione della pdc, l'aggiornamento non è immediato.
* Per aggiornarne il contenuto è necessario modificare la pagina Page_LastCatUpd in modo da
* forzare l'aggiormento della tabella categorylinks
*
* ================================================================================================
*/
function leggiStatoCatInCorso(statusReq, statusLastUpd)
{
// Leggo timestamp dell'ultima richiesta di aggiornamento
$.ajax({
url: mw.util.wikiScript( 'api' ),
timeout: 5000,
data: {
format: 'json',
action: 'query',
titles: Page_LastCatUpd,
prop: 'revisions',
rvprop: 'content',
rvlimit: '1'
},
dataType: 'json',
type: 'GET',
success: function( data ) {
if ( data && data.query && data.query.pages )
{
for( var pageid in data.query.pages )
t = data.query.pages[pageid].revisions[0]['*'];
statusReq.done = true;
if( t.length >= 14 )
{
statusReq.timestamp = convertiTimestampToDate( t.substr(0, 14) );
statusReq.ok = true;
}
else
{
statusReq.ok = false;
d = new Date();
statusReq.error = '['+d.toISOString()+'] Errore durante la lettura di '+Page_LastCatUpd+': formato non valido';
}
}
else if ( data && data.error )
{
statusReq.done = true;
statusReq.ok = false;
d = new Date();
statusReq.error = '['+d.toISOString()+'] [API Error] Errore durante la lettura di Utente:Mauro742/DeletionBot/LastCatUpd"'+
' (Errore"'+data.error.code + '": ' + data.error.info+')';
}
else
{
statusReq.done = true;
statusReq.ok = false;
d = new Date();
statusReq.error = '['+d.toISOString()+'] [API Error] Errore durante la lettura di '+Page_LastCatUpd+
' (Errore sconosciuto)';
}
},
error: function( xhr, status ) {
statusReq.done = true;
statusReq.ok = false;
d = new Date();
statusReq.error = '['+d.toISOString()+'] [JQuery/AJAX Error] Errore durante la lettura di '+Page_LastCatUpd+' ('+status+')';
}
});
// Leggo ultimo aggiornamento effettuato
$.ajax({
url: mw.util.wikiScript( 'api' ),
timeout: 5000,
data: {
format: 'json',
action: 'query',
list: 'categorymembers',
cmtitle: Cat_InCorso,
cmsort: 'timestamp',
cmdir: 'asc',
cmprop: 'title|sortkeyprefix',
cmlimit: '1'
},
dataType: 'json',
type: 'GET',
success: function( data ) {
if ( data && data.query && data.query.categorymembers )
{
t = data.query.categorymembers[0]['sortkeyprefix'];
statusLastUpd.done = true;
if( t.length > 14 )
{
statusLastUpd.timestamp = convertiTimestampToDate( t.substr(t.length-14, 14) );
statusLastUpd.ok = true;
}
else
{
statusLastUpd.ok = false;
d = new Date();
statusLastUpd.error = '['+d.toISOString()+'] Errore durante la lettura di '+Cat_InCorso;
}
}
else if ( data && data.error )
{
statusLastUpd.done = true;
statusLastUpd.ok = false;
d = new Date();
statusLastUpd.error = '['+d.toISOString()+'] [API Error] Errore durante la lettura di '+Cat_InCorso+
' (Errore"'+data.error.code + '": ' + data.error.info+')';
}
else
{
statusLastUpd.done = true;
statusLastUpd.ok = false;
d = new Date();
statusLastUpd.error = '['+d.toISOString()+'] [API Error] Errore durante la lettura di '+Cat_InCorso+
' (Errore sconosciuto)';
}
},
error: function( xhr, status ) {
statusLastUpd.done = true;
statusLastUpd.ok = false;
d = new Date();
statusLastUpd.error = '['+d.toISOString()+'] [JQuery/AJAX Error] Errore durante la lettura di '+Cat_InCorso+' ('+status+')';
}
});
}
// </nowiki>