CUSTOMIZZAZIONE CALENDARIO CRM VTIGER 5.0.4 Contesto La gestione del calendario del di default è privata, questo significa che ogni utente può avere accesso alle informazioni del proprio calendario. Esiste una condivisione dei dati predefinita ma questa comporta che ogni utente decide a chi dare visibilità e questa è concessa esclusivamente se marca un evento come pubblico. Una ulteriore limitazione di questa gestione è l’impossibilità di definire dei compiti pubblici, proprietà consentita solamente per gli eventi chiamata e riunione. A causa della scarsa granularità di gestione del calendario, si è deciso di apportare delle modifiche alla struttura del CRM così da avere la possibilità di definire delle politiche di permessi più specifiche. Modifiche all’interfaccia “Impostazioni>Accesso Condiviso” La prima modifica apportata riguarda l’interfaccia del pannello Accesso Condiviso posto nel menu delle Impostazioni. Il pannello Accesso condiviso è diviso in due parti: Regole di condivisione a livello di organizzazione Regole di condivisione personalizzate Regole di condivisione a livello di organizzazione La politica predefinita per i privilegi sul calendario è impostata a Privato e lo stato non è modificabile. Analizzando la tabella vtiger_tab si può trovare qual è il valore tabid che identifica il calendario. Di default questo è posto a 9. Le politiche di condivisione a livello di organizzazione sono definite nella tabella vtiger_def_org_share. ruleid 1 2 3 4 5 6 7 8 9 10 11 12 tabid 2 4 6 7 9 13 16 20 21 22 23 26 permission 3 0 0 3 3 3 3 3 3 3 3 3 editstatus 0 2 0 0 1 0 2 0 0 0 0 0 Per abilitare la modifica dei permessi del calendario sogna portare a 0 il valore di editstatus: update vtiger_def_org_share set editstatus=0 where tabid=(select tabid from vtiger_tab where name='Calendar') Verica dell’esito della modifica: select editstatus from vtiger_def_org_share where tabid=(select tabid from vtiger_tab where name='Calendar') Il valore del campo permission è impostato a 3, cioè privato, ma può essere modificato con uno dei valori della tabella vtiger_org_share_action_mapping. share_action_id 0 1 2 3 4 5 6 7 share_action_name Public: Read Only Public: Read, Create/Edit Public: Read, Create/Edit, Delete Private Hide Details Hide Details and Add Events Show Details Show Details and Add Events Se si vuole impostare un valore superiore a 3 bisogna aggiungere la entry nella tabella vtiger_org_share_action2tab perché di default sono impostati solamente i livelli da 0 a 3. Regole di condivisione personalizzate Le regole di gestione personalizzate sono fortemente legate alle query SQL e questo comporta una modifica alle pagine php dei moduli. Come prima cosa occorre avere un menù per la definizione delle politiche di accesso al calendario, serve quindi editare il file OrgSharingDetailView.php nella directory ${vtiger_base}/modules/Settings. Nelle righe 49-78 ci sono definite tutte le voci del menù modificabili di default: 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 $custom_access = array(); //Lead Sharing $custom_access['Leads'] = getSharingRuleList('Leads'); //Account Sharing $custom_access['Accounts'] = getSharingRuleList('Accounts'); //Potential Sharing $custom_access['Potentials'] = getSharingRuleList('Potentials'); //HelpDesk Sharing $custom_access['HelpDesk'] = getSharingRuleList('HelpDesk'); //Email Sharing //$custom_access['Emails'] = getSharingRuleList('Emails'); //Campaign Sharing $custom_access['Campaigns'] = getSharingRuleList('Campaigns'); //Quotes Sharing $custom_access['Quotes'] = getSharingRuleList('Quotes'); //Purchase Order Sharing $custom_access['PurchaseOrder'] = getSharingRuleList('PurchaseOrder'); //Sales Order Sharing $custom_access['SalesOrder'] = getSharingRuleList('SalesOrder'); //Invoice Sharing $custom_access['Invoice'] = getSharingRuleList('Invoice'); Per abilitare la voce di gestione del calendario è sufficiente aggiungere un’entry a questo elenco: //Calendar $custom_access['Calendar'] = getSharingRuleList('Calendar'); La posizione dove si inserisce il codice in elenco si rispecchia nella posizione di comparsa della voce nel menù. Il CRM mantiene le regole di condivisione associate ad ogni utente non sia sul DB ma che su dei file, uno per ogni utente, posizionati nella directory ${vtiger_base}/user_privileges. I file in questione sono i vari sharing_privileges_${user_id}.php. Queste informazioni sono poi riportate nelle tabelle vtiger_tmp_read_group_sharing_per, vtiger_tmp_read_user_sharing_per, vtiger_tmp_write_group_sharing_per e vtiger_tmp_write_user_sharing_per. Al fine di impostare tali privilegi nei profili utente è necessario editare la funzione createUserSharingPrivilegesfile del file CreateUserPrivilegeFile.php nella directory ${vtiger_base}/modules/Users aggiungendo il seguente codice a partire dalla riga 367: //Constructing Calendar Sharing Rules $cal_share_per_array=getUserModuleSharingObjects("Calendar",$userid,$def_org_sha re,$current_user_roles,$parent_roles,$current_user_groups); $cal_share_read_per=$cal_share_per_array['read']; $cal_share_write_per=$cal_share_per_array['write']; $newbuf .= "\$Calendar_share_read_permission=array('ROLE'=>".constructTwoDimensionalCharInt SingleValueArray($cal_share_read_per['ROLE']).",'GROUP'=>".constructTwoDimension alArray($cal_share_read_per['GROUP']).");\n\n"; $newbuf .= "\$Calendar_share_write_permission=array('ROLE'=>".constructTwoDimensionalCharIn tSingleValueArray($cal_share_write_per['ROLE']).",'GROUP'=>".constructTwoDimensi onalArray($cal_share_write_per['GROUP']).");\n\n"; Ora si deve fare in modo che le tabelle temporanee contenenti le regole di condivisione vengano popolate, quindi si deve aggiungere la voce ‘Calendar’ all’array della riga 1536 nella funzione populateSharingtmptables: $sharingArray=Array('Leads','Accounts','Contacts','Potentials','HelpDesk','Email s','Campaigns','Quotes','PurchaseOrder','SalesOrder','Invoice','Calendar'); Modifiche per l’utilizzo dei permessi Le modifiche apportate finora servono per definire la creazione di permessi di accesso/modica alle schedulazioni del calendario ma non sono sufficienti per l’effettiva gestione del modulo in quanto le funzioni del CRM non supportano la nuova gestione dei privilegi. La definizione di queste funzioni si trova nella directory ${vtiger_base}/include/utils all’interno del file UserInfoUtil.php che contiene tutte le funzioni di supporto alla gestione degli utenti tra cui il calcolo dei permessi di accesso/modifica a tabelle e moduli del CRM. Ogni volta che si accede al modulo del calendario, viene generata la lista di eventi visibili dall’utente che accede al modulo. Per far si che vengano visualizzati solamente gli eventi che un utente è abilitato a vedere rispettando i permessi definiti per il proprio ruolo e per il proprio gruppo di appartenenza, qualora esista, si devono sovrascrivere le righe 4181-4193 della funzione getListViewSecurityParamameter con le seguenti: $sec_query .= " and (vtiger_crmentity.smownerid in($current_user->id) or vtiger_crmentity.smownerid in(select vtiger_user2role.userid from vtiger_user2role inner join vtiger_users on vtiger_users.id=vtiger_user2role.userid inner join vtiger_role on vtiger_role.roleid=vtiger_user2role.roleid where vtiger_role.parentrole like '".$current_user_parent_role_seq."::%') or vtiger_crmentity.smownerid in(select shareduserid from vtiger_tmp_read_user_sharing_per where userid=".$current_user>id." and tabid=".$tabid.")"; //Adding criteria for group sharing $sec_query .= " or (vtiger_crmentity.smownerid in (0) and ("; if(sizeof($current_user_groups) > 0) { $sec_query .= " vtiger_groups.groupid in (". implode(",", $current_user_groups) .") or "; } $sec_query .= " vtiger_groups.groupid in(select vtiger_tmp_read_group_sharing_per.sharedgroupid from vtiger_tmp_read_group_sharing_per where userid=".$current_user->id." and tabid=".$tabid.")))) "; Ora si devono cancellare gli entry point della funzione isCalendarPermittedBySharing la quale, situata alle righe 4542-4554, legge i permessi definiti nella tabella vtiger_sharedcalendar dove sono definite le condivisioni del calendario della gestione di default. Per fare questo basta sovrascrivere alcune righe della funzione isPermitted. In particolare le righe 1345-1360 e 1424-1431 con $permission = isReadWritePermittedBySharing($module,$tabid,$actionid,$record_id); e le righe 1404-1418 con $permission = isReadPermittedBySharing($module,$tabid,$actionid,$record_id); L’ultima modifica da apportare riguarda la funzione getSharingModuleList a quale, situata alle righe 45224539, definisce quali sono i moduli condivisi. Mancando il modulo del calendario all’elenco, il CRM nega gli accessi/modifiche ai dettagli degli eventi. Serve quindi aggiungere la voce ‘Calendar’ all’array definito nella funzione $sharingModuleArray=Array('Accounts', 'Leads', 'Contacts', 'Potentials', 'HelpDesk', 'Emails', 'Campaigns', 'Quotes', 'PurchaseOrder', 'SalesOrder', 'Invoice', 'Calendar'); RAFFINAMENTI Quando si accede al modulo del calendario, di default, si accede alla visualizzazione degli eventi. Dato che maggiormente vengono definiti i compiti, si sovrascrive la riga 26 del file new_calendar.php presente nella directory ${vtiger_base}/modules/Calendar con la seguente $subtab = 'todo'; Dato che la condivisione del calendario è stata modificata è inoltre inutile mantenere il pulsante per la gestione delle impostazioni del calendario. Per togliere il bottone dalla visualizzazione si deve editare il file calendarLayout.php nella directory ${vtiger_base}/modules/Calendar alle righe 209 e 247 eliminandole o commentandole. SOTTIGLIEZZE Si può segnalare al CRM che la versione in uso è stata customizzata editando il file index.php nella directory ${vtiger_base} alla riga 686 aggiungendo ‘Custom’ alla stringa visualizzata vtiger CRM 5.0.4 Custom e modificando i campi della tabella vtiger_version con la seguente update update vtiger_version set old_version='5.0.4', current_version='5.0.4 Custom'
© Copyright 2024 ExpyDoc