Utente:FixBot/DeletionBot/main.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>
// La variabile contiene i messaggi di log del bot
var messages = [];
var currentAppStatus;

if (wgTitle == "FixBot/TestBot") 
{
   // Il bot viene eseguito quando l'intera pagina è stata caricata
   $(window).load(startDeletionBot);   
}

function startDeletionBot()
{
   var appStatusRouter = [];
   r = {gestioneCategorieGiornaliere:false, gestioneCategorieMensili:false, gestioneCategorieAnnuali:false, letturaPDC:false, leggiStatoCatInCorso:false};
   
   d = new Date();
   
   if( d.getDate() == 1 )
   {
      r['gestioneCategorieMensili'] = true;
      if( d.getMonth() == 0 )
         r['gestioneCategorieAnnuali'] = true;
   }
   
   if( d.getHours() == 12 )
      r['leggiStatoCatInCorso'] = true;
      
   r['gestioneCategorieGiornaliere'] = true;
   r['letturaPDC'] = true;
   
   
   for( key in r )
   {
      if( r[key] )
         appStatusRouter.push(key);
   }
   
   mainDeletionBot(new Date(), days, appStatusRouter, 15);	

}

/*=================================================================================================
 * 
 * Funzione mainDeletionBot()
 * 
 * Funzione principale del bot
 *
 * ================================================================================================
 */
function mainDeletionBot(PDC_date, days, appStatusRouter, timeout)
{
   var catStatus = [];  
   var PDC_Status = [];
   var PDC_Errors = [];
   var iw = 0, ic = 0;
   var writeData = [];
   var writeStatus;
   var daysCnt=0;
   var statusCnt=0;
   var nextAppStatus;
   currentAppStatus = 'selectStatus';
   botTimeout = setTimeout(function(){ currentAppStatus='timeout'; }, timeout*60*1000 );
   
   //token = 0;
   token = mw.user.tokens.get( 'editToken' );

   startDate = new Date();

   // Il codice viene eseguito ogni 100 ms fino alla conclusione
   interval = setInterval(function() {
      
      d = new Date();
      
      switch( currentAppStatus )
      {
         case 'selectStatus':
            if( statusCnt == appStatusRouter.length )
               currentAppStatus = 'finish';
            else
            {
               currentAppStatus = appStatusRouter[statusCnt];
               statusCnt++;
            }
            break;
               
         case 'gestioneCategorieGiornaliere':   
            // Avvio la gestione delle categorie giornaliere
            messages.push('['+d.toISOString()+'] *** Gestione delle categorie giornaliere ***');
            
            catStatus = [];
            for(var i=0; i < tipologie.length; i++)
            {
               catStatus.push( new catStatusObj() );
               creazioneCategorie(tipologie[i], new Date(PDC_date.getTime()), days, catStatus[i]);
            }

            currentAppStatus = 'runningCategorie';
            // Stato da eseguire quando le categorie giornaliere saranno processate
            nextAppStatus = 'selectStatus'; 
            // ic è il numero delle sessioni in parallelo
            ic = tipologie.length;
            break;
            
         case 'gestioneCategorieMensili':
            // Avviso la gestione delle categorie
            messages.push('['+d.toISOString()+'] *** Gestione delle categorie mensili ***');
            
            catStatus.push( new catStatusObj() );
            creazioneCategorieMese(PDC_date.getFullYear(), catStatus[0])
            
            summary = 'Bot: creazione/aggiornamento categorie di servizio';
            currentAppStatus = 'runningCategorie';
            nextAppStatus = 'selectStatus'; 
            ic = 1;
            break;
            
         case 'gestioneCategorieAnnuali':
            // Avviso la gestione delle categorie
        
            messages.push('['+d.toISOString()+'] *** Gestione delle categorie annuali ***');
            
            catStatus.push( new catStatusObj() );
            creazioneCategorieAnno(PDC_date.getFullYear(), catStatus[0])
            
            summary = 'Bot: creazione/aggiornamento categorie di servizio';
            currentAppStatus = 'runningCategorie';
            nextAppStatus = 'selectStatus'; 
            ic = 1;
            break;
            
            
         case 'runningCategorie':
            // Attendo la lettura delle categorie
            var n;
            for( n=0; n < ic; n++)
            {
               if( !catStatus[n].done )
                  break;
            }
            if( n < ic )
               break;
            
            // Lettura completata
            writeData = [];
            for( var n=0; n < ic; n++)
            {
               if( catStatus[n].ok )
                  writeData = writeData.concat(catStatus[n].writeData);
               else
                  messages.push( catStatus[n].error );
            }
            
            // Stato successivo alla scrittura
            currentAppStatus = 'scrittura';     
            break;       

         case 'scrittura':
            if( writeData.length > 0 )
            {
               iw = 0;
               writeStatus = new writeStatusObj(); 
               scriviPagina(writeData[0].title, writeData[0].text, writeData[0].summary, token, writeStatus);
               currentAppStatus = 'runningScrittura';       
            }
            else
            {
               messages.push('['+d.toISOString()+'] Nessuna pagina da scrivere');
               currentAppStatus = nextAppStatus;
            }
            break;
            
         case 'runningScrittura':       
            
            if( writeStatus.done )
            {
               d = new Date();
               if( !writeStatus.ok )
                  messages.push(writeStatus.error);
               else
                  messages.push('['+d.toISOString()+'] Pagina creata/modificata: '+writeData[iw].title);
               
               iw++;
               
               if( iw < writeData.length )
               {
                  writeStatus = new writeStatusObj(); 
                  scriviPagina(writeData[iw].title, writeData[iw].text, writeData[iw].summary, token, writeStatus);
               }
               else
                  currentAppStatus = nextAppStatus;
            }
               
            break;
            
         case 'letturaPDC':
            Running_PDC_date = new Date(PDC_date.getTime());
            daysCnt = days;
            messages.push('['+d.toISOString()+'] *** Lettura delle procedure di cancellazione ***');
            
         case 'iniziaLetturaPDC':
            messages.push('['+d.toISOString()+'] Lettura procedure del '+convertiDateToCategoria(Running_PDC_date) );
            currentAppStatus = 'leggiGiorno';
            PDC_Status = [];
            PDC_Errors = [];
            for(var i=0; i < tipologie.length; i++)
            {
               PDC_Status.push( new readPDCStatusObj() );
               iniziaLetturaCategoriaPDC(tipologie[i], Running_PDC_date, PDC_Status[i]);
            }
               
            break;
            
         case 'leggiGiorno':
            
            finishCnt = 0;
            for(var i=0; i < tipologie.length; i++)
            {
               if( PDC_Status[i].done && !PDC_Status[i].finish) // Lettura completata?
               {
                  if( PDC_Status[i].ok )
                  {
                     // Gestione del query continue                     
                     if( PDC_Status[i].qcontinue )
                        iniziaLetturaCategoriaPDC(tipologie[i], Running_PDC_date, PDC_Status[i]);
                     else
                        PDC_Status[i].finish = true;     
                  }
                  else
                  {
                     // errore!!
                     PDC_Status[i].finish = true; 
                     PDC_Errors.push( PDC_Status[i].error );
                  }
               }
               
               if( PDC_Status[i].finish )
                  finishCnt++;
            
            }
            
            if( finishCnt == tipologie.length )
            {
               if( PDC_Errors.length > 0 )
                  messages = messages.concat(PDC_Errors);
               else
               {
                  procedure = [];
                  for(var i=0; i < tipologie.length; i++)
                     procedure[tipologie[i]] = processLetturaCategoriaPDC(tipologie[i], PDC_Status[i].rawData);
                     
                  processPDCErrate(procedure);                
                  txt_conta = generaTabellaConteggio(Running_PDC_date, procedure);
                  
                  txt_log = generaLogGiornaliero(Running_PDC_date, procedure);
                  
                  writeData = [];
                  //console.log(Conta_Prefix+convertiDateToLogTxt(Running_PDC_date));
                  writeData.push( {'title':Conta_Prefix+convertiDateToLogTxt(Running_PDC_date), 'text':txt_conta, 'summary':'Bot: aggiorno tabella di conteggio'} );
                  writeData.push( {'title':Log_Prefix+convertiDateToLogTxt(Running_PDC_date), 'text':txt_log, 'summary':'Bot: aggiorno log giornaliero'} );
                  
                  // Gestione del giorno successivo
                  daysCnt--;
                  if( daysCnt == 0)
                  {
                     nextAppStatus = 'selectStatus'; 
                     currentAppStatus = 'scrittura';
                  }
                  else
                  {
                     Running_PDC_date.setDate(Running_PDC_date.getDate()-1);
                     nextAppStatus = 'iniziaLetturaPDC';
                     currentAppStatus = 'scrittura';
                  } 
               }
               
               
            }
            
            break;
            
         case 'leggiStatoCatInCorso':
            statusReq = {timestamp:false, done:false, ok:false, error:''};
            statusLastUpd = {timestamp:false, done:false, ok:false, error:''};
            
            leggiStatoCatInCorso(statusReq, statusLastUpd);
            
            currentAppStatus = 'runningLeggiStatoCatInCorso';
            
            break;
            
         case 'runningLeggiStatoCatInCorso':
            
            if( statusReq.done && statusLastUpd.done )
            {
               t1 = statusReq.timestamp.getTime();
               t2 = statusLastUpd.timestamp.getTime();
               t3 = d.getTime();
                  
               if( ( (t1 == t2) || ( (t1-t2) > 5*24*3600*1000 && (t3-t1) > 5*24*3600*1000 ) ) && ( (t3-t1) > 23*3600*1000 )   )
               {   
               	   writeData = [];
               	   writeData.push( {'title':Page_LastCatUpd, 'text':'{{subst:#timel:YmdHis}}', 'summary':'Bot: aggiornamento'} );
               	   nextAppStatus = 'selectStatus'; 
                   currentAppStatus = 'scrittura';
               }
               else               
                  currentAppStatus = 'selectStatus'; 
            }
            break;
            
         case 'timeout':
            messages.push('['+d.toISOString()+'] *** TIMEOUT: esecuzione interrotta per il superamento del tempo limite ***');
            
         case 'finish':    
            finishDate = new Date();
            
            runningTime = Math.floor( (finishDate.getTime()-startDate.getTime())/1000 );
            messages.push('['+d.toISOString()+'] *** ESECUZIONE COMPLETATA in '+Math.floor(runningTime/60)+' minuti e '+runningTime%60+' secondi ***');
            clearTimeout(botTimeout);
            clearInterval(interval);
            //console.log(messages);
      }
      

   },100);
}
// </nowiki>