Changes

Created page with 'Benvenuti nella pagina Wiki di Simone Giustetti. Lingue: [http://www.giustetti.net/wiki/index.php?title=vtigercrm_update_date_field_default_behavior English] - '''Italiano''' …'
Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: [http://www.giustetti.net/wiki/index.php?title=vtigercrm_update_date_field_default_behavior English] - '''Italiano'''

----

== Comportamento del controllo '''datefield''' ==
Le date sono gestite mediante un '''apposito controllo calendario''' (datefield) in VtigerCRM. In fase di inserimento o modifica dei dati, il controllo '''suggerisce automaticamente la data del giorno corrente'''. La compilazione automatica, generalmente utile, può risultare fastidiosa in alcuni contesti: ad esempio maschere con molte date. Una maschera in cui siano presenti molti campi data costringerebbe l'utente a scorrerli tutti correggendo o rimuovendo i valori indesiderati. Ne consegue la necessità di '''modificare il comportamento standard del controllo in modo che suggerisca in automatico una data nulla'''. Il suggerimento dovrebbe comparire solo quando l'utente selezioni esplicitamente il controllo e non a prescindere. Nel proseguo dell'articolo verrà esposto come modificare il comportamento standard per i controlli data in '''VtigerCRM versione 5.2.1'''.


== Funzionamento interno di VtigerCRM ==
In VtigerCRM il codice di elaborazione dei dati è separato da quello di presentazione degli stessi. Le informazioni vengono estratte dal database, i file di configurazione ed altre fonti, elaborate e infine passate a sezioni separate del codice, che si occupano della formattazione e scrittura delle pagine HTML. '''Tutte le pagine generate dal software sono basate su modelli predefiniti detti template'''. VtigerCRM utilizza '''Smarty''' come motore per i template. I template consistono in file di testo formattati secondo una sintassi specifica, simile ad '''HTML''' con l'aggiunta di variabili e cicli. I modelli sono reperibili in una apposita directory all'interno dell'albero di installazione di VtigerCRM: '''Smarty/templates'''. Di seguito è elencato il contenuto di tale directory:
bash-4.1# ls -la ./Smarty
total 64
drwxr-xr-x 8 apache apache 4096 Nov 15 2010 .
drwxr-xr-x 28 apache apache 4096 Sep 7 01:32 ..
-rw-r--r-- 1 apache apache 24389 Nov 15 2010 COPYING.lib
drwxrwxr-x 2 apache apache 4096 May 5 2011 cache
drwxr-xr-x 2 apache apache 4096 Nov 15 2010 configs
drwxr-xr-x 4 apache apache 4096 Nov 15 2010 libs
drwxr-xr-x 2 apache apache 4096 Nov 15 2010 misc
drwxr-xr-x 8 apache apache 4096 Nov 15 2010 templates
drwxrwxr-x 2 apache apache 12288 Sep 16 00:25 templates_c
La directory '''templates''' contiene il codice sorgente dei modelli di controlli, maschere e pagine.<BR>
La directory '''templates_c''' contiene una versione precompilata dei template pronta per l'uso da parte del motore del programma.

Il file '''Smarty/templates/EditViewUI.tpl''' contiene alcuni template utilizzati dalle maschere del programma in fase di inserimento / modifica dei dati.

Il file '''Smarty/templates/DetailView.tpl''' contiene i template per i controlli predefiniti suddivisi sulla base del modulo di appartenenza.

Il file '''include/utils/utils.php''' contiene la funzione '''get_textdateField''' che impone il formato / valore di default per i campi data.

Il file '''include/utils/CommonUtils.php''' contiene la funzione '''getNewDisplayDate()''' che assegna il valore della data corrente ad un campo data. La funzione ha lo scopo di inizializzare le variabili ed &egrave; pertanto lei ''a definire il comportamento di tutti i campi data in fase di inserimento o modifica dei dati''.

La funzione '''getNewDisplayDate()''' viene utilizzata in altri file del programma:
* '''include/utils/EditViewUtils.php'''
* '''include/utils/utils.php'''
* '''modules/Emails/Save.php'''
* '''modules/com_vtiger_workflow/VTSimpleTemplate.inc'''

Il codice sorgente della funzione deve essere modificato in modo da alterare il comportamento standard dei controlli calendario utilizzati nei moduli del programma. Il fine della modifica &egrave; far si che i campi data vengano inizializzati con valore nullo anzich&egrave; la data corrente. Di seguito e' riportato il codice sorgente originale ed il codice a seguito della modifica apportata.

=== Codice sorgente originale ===
/** This function returns the date in user specified format.
* Takes no param, receives the date format from current user object
*/

function getNewDisplayDate()
{
global $log;
$log->debug("Entering getNewDisplayDate() method ...");
$log->info("in getNewDisplayDate ");

global $current_user;
$dat_fmt = $current_user->date_format;
if($dat_fmt == '')
{
$dat_fmt = 'dd-mm-yyyy';
}
$display_date='';
if($dat_fmt == 'dd-mm-yyyy')
{
$display_date = date('d-m-Y');
}
elseif($dat_fmt == 'mm-dd-yyyy')
{
$display_date = date('m-d-Y');
}
elseif($dat_fmt == 'yyyy-mm-dd')
{
$display_date = date('Y-m-d');
}

$log->debug("Exiting getNewDisplayDate method ...");
return $display_date;
}

=== Codice sorgente modificato ===
/** This function returns the date in user specified format.
* Takes no param, receives the date format from current user object
*/

function getNewDisplayDate() {
global $log;
$log->debug("Entering getNewDisplayDate() method ...");
$log->info("in getNewDisplayDate ");

$display_date='';
$log->debug("Exiting getNewDisplayDate method ...");
return $display_date;
}

=== Modifica solo per moduli specifici ===
Il cambiamento introdotto influenzer&agrave; il comportamento di tutti i moduli di VtigerCRM. Naturalmente potrebbe essere desiderabile una modifica meno invasiva. Potrebbe valere ad esempio la pena di '''modificare il comportamento dei controlli calendario per alcuni moduli specifici''' lasciando invece inalterato il resto del programma. Supponendo di voler limitare la modifica al modulo predefinito "Progetti" ed al modulo personalizzato "Polizze", il codice sorgente dovra' essere modificato come segue:
/** This function returns the date in user specified format.
* Takes no param, receives the date format from current user object
*/

function getNewDisplayDate() {
global $log;
$log->debug("Entering getNewDisplayDate() method ...");
$log->info("in getNewDisplayDate ");

$display_date='';
$module_name = $_REQUEST['module'];
switch($module_name) {
case "Policy":
$display_date = '';
break;
case "Project":
$display_date = '';
break;
default:
global $current_user;
$dat_fmt = $current_user->date_format;
if($dat_fmt == '') {
$dat_fmt = 'dd-mm-yyyy';
}
if($dat_fmt == 'dd-mm-yyyy') {
$display_date = date('d-m-Y');
} elseif($dat_fmt == 'mm-dd-yyyy') {
$display_date = date('m-d-Y');
} elseif($dat_fmt == 'yyyy-mm-dd') {
$display_date = date('Y-m-d');
}
}
$log->debug("Exiting getNewDisplayDate method ...");
return $display_date;
}

La riga:
$module_name = $_REQUEST['module'];
salva in una variabile locale il nome del modulo interessato, che verr&agrave; utilizzato in un apposito filtro. Il costrutto "case" consente di filtrare i moduli applicando codice specifico per ognuno di essi. In particolare le righe
case "Policy":
$display_date = '';
break;
case "Project":
$display_date = '';
break;
impongono un valore nullo in fase di inserimento e modifica dei campi data per i moduli "Polizze" e "Progetti". Infine le righe
default:
global $current_user;
$dat_fmt = $current_user->date_format;
if($dat_fmt == '') {
$dat_fmt = 'dd-mm-yyyy';
}
if($dat_fmt == 'dd-mm-yyyy') {
$display_date = date('d-m-Y');
} elseif($dat_fmt == 'mm-dd-yyyy') {
$display_date = date('m-d-Y');
} elseif($dat_fmt == 'yyyy-mm-dd') {
$display_date = date('Y-m-d');
}
}
specificano che venga applicato il comportamento standard del controllo calendario in tutti gli altri moduli di VtigerCRM.

L'esempio presentato &egrave; semplice, ma il codice pu&ograve; essere modificato ed ampliato ulteriormente per eseguire controlli sui valori suggeriti, imporre un comportamento specifico per ogni modulo oppure eseguire ulteriori elaborazioni sui dati. Pu&ograve; essere considerato una base di partenza generica.


Per commenti, consigli, domande inviate una e-mail all'indirizzo studiosg [chiocciola] giustetti [punto] net.


----

Lingue: [http://www.giustetti.net/wiki/index.php?title=vtigercrm_update_date_field_default_behavior English] - '''Italiano'''