SuiteCRM Maintenance Mode: Come creare una pagina “CRM in manutenzione”
Lavorando per i miei clienti mi sono imbattuto spesso in un problema: SuiteCRM non ha un opzione per mettere il CRM in modalità ‘Maintenance’, ovvero in Manutenzione.
Quando ci viene commissionata una personalizzazione che presuppone una modifica al codice sorgente, o anche solo qualche modifica tramite interfaccia ai flussi di lavoro, scheduler ecc. è buona norma evitare nuovi inserimenti o modifiche dei dati da parte degli utenti fino a che non abbiamo accertato che il lavoro è andato a buon fine.
Pensiamo, ad esempio, se venisse inserito un nuovo lead, o contatto, o azienda e l’avviso via mail non arrivasse al responsabile addetto ad eseguire un’azione.
Nel mio caso specifico dovevo trovare il modo di avvisare centinaia di utenti di non effettuare modifiche o nuovi inserimenti fino al completamento del mio lavoro e alla verifica di funzionamento.
Inoltre dovevo solo avvisare gli utenti, lasciando però la possibilità di consultare il CRM.
La soluzione più semplice e veloce sarebbe stato l’acquisto di un modulo specifico, ma il mio cliente in questo caso non era disposto a sborsare altre centinaia di euro e io dovevo tutelare il mio lavoro, quindi ho optato per un’altra soluzione:
1° Soluzione: modifica di index.php
Ho creato il file (vuoto) maintenance.pixiel nella root del sistema e ho inserito in index.php:
if (!defined('sugarEntry')) { define('sugarEntry', true); } if(file_exists('maintenance.pixiel')){ print( "<html><body>" ); print "<h2>CRM IN MANUTENZIONE!</h2>"; print "Stiamo aggiornando il CRM<br>"; print "Scusate l'inconveniente, saremo online entro 1 ora"; print( "</body></html>" ); exit; }
In questo modo era sufficiente cancellare il file per uscire dalla mod. manutenzione o ricrearlo per entrarci.
Beh, questa può essere una soluzione valida quando si ha fretta ma certamente è molto poco elegante, inoltre al primo aggiornamento di SuiteCRM dovremmo reinserire il codice.
2° Soluzione: utilizzare i Logic Hooks
Alla ricerca di una soluzione più elegante ho scelto di utilizzare i Logic Hooks di SuiteCRM. Questi permettono di ‘agganciare’ gli eventi in SuiteCRM per attivare del codice personalizzato.
after_login faceva al caso mio perchè entra in azione dopo il login dell’utente e va definito a livello superiore:
custom/Extension/application/Ext/LogicHooks/Maintenance_Hooks.php
<?php ... $hook_array['after_login'][] = array(11, 'Maintenance', 'custom/MaintenanceLH.php','MaintenanceClass', 'maintenanceFun');
Il file config_override.php consente di apportare modifiche alla configurazione salvata nel file config.php e aggiungere elementi personalizzati. Ho quindi aggiunto una riga:
config_override.php
$sugar_config['maintenance'] = true;
Infine ho creato il file php con la classe richiamata dal file Maintenance_Hooks.php. La funzione esegue un controllo, se ‘maintenance’ nel file di configurazione è TRUE e l’utente che esegue l’accesso non è amministratore reindirizza l’utente alla pagina di manutenzione di default.
custom/MaintenanceLH.php
<?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); class MaintenanceClass { function maintenanceFun($event, $arguments) { global $current_user; global $sugar_config; if(!empty($sugar_config['maintenance']) && ( !$current_user->isAdmin() )) { header('Location: maintenance.php'); exit (); } } } ?>
3° Soluzione: pagina Maintenance personalizzata
La soluzione precedente è migliore della prima e segue, almeno in parte, le indicazioni della Developer Guide di SuiteCRM.
Tuttavia anche l’occhio vuole la sua parte e la pagina maintenance di default è molto scarna, ho deciso quindi di creare una pagina di Maintenance personalizzata.
Per evitare modifiche alla pagina di default ho creato una nuova pagina in HTML personalizzata con allegato il mio logo. Da notare che nell’header della pagina indico a Google di non indicizzare l’URL.
Per vostra comodità allego la cartella zippata da caricare nella root del CRM. Naturalmente va personalizzata secondo i propri gusti.
Rispetto alla 2° versione lasciamo i file identici, modifichiamo solo:
custom/MaintenanceLH.php
<?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); class MaintenanceClass { function maintenanceFun($event, $arguments) { global $current_user; global $sugar_config; if(!empty($sugar_config['maintenance']) && ( !$current_user->isAdmin() )) { header('Location: maintenance/'); exit (); } } } ?>
Bene, per oggi questo è tutto. Per comodità potreste ora creare un modulo o fare una modifica nell’interfaccia del CRM inserendo un checkbox o un dropdown, accessibile solo ad un amministratore, che permetta di lanciare la modalita maintenance con un click. E offrire l’opzione di bloccare completamente l’accesso.
Se però siete pigri o in difficoltà e desiderate affidare il lavoro di modifica a qualcun’altro… chiedetemi una consulenza!
Buon SuiteCRM a tutti!