INDICE


Introduzione

Al momento non esiste una opzione da interfaccia per importare i dati da un CSV ma stiamo pensando di realizzarla in una futura versione.

Nel frattempo è possibile caricare il file manualmente attraverso gli strumenti messi a disposizione da MySQL.



Controllo del contenuto del CSV


IMPORTANTE: se si importa un file generato con una macchina Windows, è probabile che il file contenga dei caratteri particolari, che servono al controllo dei "ritorno a capo" e degli "avanzamenti di riga" (spesso questi caratteri speciali sono normalmente codificati come "^M").


La presenza di questi caratteri potrebbe far fallire l'importazione o introdurre problemi di visualizzazione della rubrica del CTI nel browser o nell'app.

 

Prima di procedere all'importazione è perciò fondamentale verificare se il file contenga questi caratteri, per farlo è sufficiente utilizzare il comando `file` da terminale:

~]# file test.csv 
test.csv: ASCII text, with CRLF line terminators


Se l'output dovesse essere come quello qui sopra, il file andrà "bonificato".

Con questo comando si possono eliminare i caratteri "sporchi", generando un nuovo file:

tr -d '\015' < test.csv > outfile.csv


A questo punto si potrà procedere con l'importazione usando il nuovo file, outfile.csv



Verifiche preliminari


Innanzitutto il file csv di partenza deve avere una specifica configurazione, deve utilizzare la virgola (",") come separatore ed i campi devono coincidere come nome e come ordine con quelli della tabella della rubrica del CTI: 

mysql> describe cti_phonebook;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment | 
| owner_id       | varchar(255) | NO   | MUL |         |                | 
| type           | varchar(255) | NO   |     |         |                | 
| homeemail      | varchar(255) | YES  | MUL | NULL    |                | 
| workemail      | varchar(255) | YES  | MUL | NULL    |                | 
| homephone      | varchar(25)  | YES  | MUL | NULL    |                | 
| workphone      | varchar(25)  | YES  | MUL | NULL    |                | 
| cellphone      | varchar(25)  | YES  | MUL | NULL    |                | 
| fax            | varchar(25)  | YES  | MUL | NULL    |                | 
| title          | varchar(255) | YES  |     | NULL    |                | 
| company        | varchar(255) | YES  |     | NULL    |                | 
| notes          | text         | YES  |     | NULL    |                | 
| name           | varchar(255) | YES  | MUL | NULL    |                | 
| homestreet     | varchar(255) | YES  |     | NULL    |                | 
| homepob        | varchar(10)  | YES  |     | NULL    |                | 
| homecity       | varchar(255) | YES  |     | NULL    |                | 
| homeprovince   | varchar(255) | YES  |     | NULL    |                | 
| homepostalcode | varchar(255) | YES  |     | NULL    |                | 
| homecountry    | varchar(255) | YES  |     | NULL    |                | 
| workstreet     | varchar(255) | YES  |     | NULL    |                | 
| workpob        | varchar(10)  | YES  |     | NULL    |                | 
| workcity       | varchar(255) | YES  |     | NULL    |                | 
| workprovince   | varchar(255) | YES  |     | NULL    |                | 
| workpostalcode | varchar(255) | YES  |     | NULL    |                | 
| workcountry    | varchar(255) | YES  |     | NULL    |                | 
| url            | varchar(255) | YES  |     | NULL    |                | 
| extension      | varchar(255) | YES  | MUL | NULL    |                | 
| speeddial_num  | varchar(255) | YES  |     | NULL    |                | 
+----------------+--------------+------+-----+---------+----------------+

 

Inoltre:



mentre gli altri campi sono facilmente intellegibili.


Alcuni suggerimenti prima di procedere con l'importazione

Per evitare qualsiasi problema è bene convertire alcuni caratteri prima di procedere all'importazione.
  • Modificare le lettere accentate con le corrispondenti "lettera + apostrofo"
  • Verificare la presenza di eventuali caratteri non ASCII e sostituirli o rimuoverli
  • Evitare l'utilizzo di caratteri particolari come carrier return, virgole e doppi apici, nel caso sostituirli con altri 
  • Se si desidera essere avvisati di eventuali warning durante il processo è possibile abilitarli nella CLI di mysql dando il comando: 
    SHOW WARNINGS; 



Importazione dei contatti


NB: sostituire il valore CTI_DB in base alla versione del cti installata: "nethcti2" o "nethcti3" rispettivamente per la versione 2 o 3.


Creato il csv, va caricato sul server (in /root ad esempio).


Se ci sono già dei record nella rubrica del CTI è necessario farne il backup:

mysqldump CTI_DB > CTI_DB.sql


si deve poi accedere al db della rubrica con il comando:

mysql CTI_DB


quindi eseguire l'importazione: 

LOAD data local infile "/tmp/NOME_FILE.csv" INTO TABLE cti_phonebook fields terminated by ",";

NOTA: sul database deve essere presente almeno 1 contatto pena il fallimento dell'importazione

  

Se la rubrica è vuota è possibile fare le tutte prove che si vogliono fino ad ottenere il risultato voluto, basta eseguire il comando (sempre da mysql): 

delete from cti_phonebook;

 per cancellarne il contenuto e ricominciare.



ATTENZIONE: Una volta ottenuto il risultato desiderato SARA' NECESSARIO ripulire l'importazione dai valori rimasti NULL, altrimenti non sarà possibile editare i contatti successivamente!


Per eliminare le ricorrenze dei NULL è sufficiente eseguire il comando:

 

UPDATE cti_phonebook SET owner_id=IfNull(owner_id,''),type=IfNull(type,''),homeemail=IfNull(homeemail,''),workemail=IfNull(workemail,''),homephone=IfNull(homephone,''),workphone=IfNull(workphone,''),cellphone=IfNull(cellphone,''),fax=IfNull(fax,''),title=IfNull(title,''),company=IfNull(company,''),notes=IfNull(notes,''),name=IfNull(name,''),homestreet=IfNull(homestreet,''),homepob=IfNull(homepob,''),homecity=IfNull(homecity,''),homeprovince=IfNull(homeprovince,''),homepostalcode=IfNull(homepostalcode,''),homecountry=IfNull(homecountry,''),workstreet=IfNull(workstreet,''),workpob=IfNull(workpob,''),workcity=IfNull(workcity,''),workprovince=IfNull(workprovince,''),workpostalcode=IfNull(workpostalcode,''),workcountry=IfNull(workcountry,''),url=IfNull(url,''),extension=IfNull(extension,''),speeddial_num=IfNull(speeddial_num,''); 


 



Esempio di importazione con file parzialmente valorizzato


Si potrebbe avere a che fare con un file rubrica.csv redatto in questo modo:

 

angelo,public,076151111,339999942518,AGUZZI Simone
angelo,public,3384311192,,AIRALDO Alessandro
angelo,public,34824444475,,ALBERGO DAMIANO


 

In questo caso avremmo a disposizione unicamente i valori per le colonne:


col1, col2, col3, col4 col5


della rubrica sul CTI, che in realtà ne richiede molti di più.

Le colonne disponibili nella rubrica CTI sono queste:


| id | owner_id         | type    | homeemail | workemail | homephone | workphone  | cellphone | fax  | title | company  | notes | name     | homestreet | homepob | homecity | homeprovince | homepostalcode | homecountry | workstreet | workpob | workcity | workprovince | workpostalcode | workcountry | url  | extension | speeddial_num |

 

Sarà comunque possibile importare il file, facendo il mapping corretto delle colonne disponibili nel csv originario con i campi della rubrica CTI:

    

LOAD data local infile "/tmp/nome_csv.csv" INTO TABLE cti_phonebook fields terminated by "," (@col1,@col2,@col3,@col4,@col5) set owner_id=nullif(@col1,''),type=nullif(@col2,''),workphone=nullif(@col3,''),cellphone=nullif(@col4,''),name=nullif(@col5,'');

   

Terminata l'importazione si dovranno eliminare le ricorrenze dei valori NULL:

 

UPDATE cti_phonebook SET owner_id=IfNull(owner_id,''),type=IfNull(type,''),homeemail=IfNull(homeemail,''),workemail=IfNull(workemail,''),homephone=IfNull(homephone,''),workphone=IfNull(workphone,''),cellphone=IfNull(cellphone,''),fax=IfNull(fax,''),title=IfNull(title,''),company=IfNull(company,''),notes=IfNull(notes,''),name=IfNull(name,''),homestreet=IfNull(homestreet,''),homepob=IfNull(homepob,''),homecity=IfNull(homecity,''),homeprovince=IfNull(homeprovince,''),homepostalcode=IfNull(homepostalcode,''),homecountry=IfNull(homecountry,''),workstreet=IfNull(workstreet,''),workpob=IfNull(workpob,''),workcity=IfNull(workcity,''),workprovince=IfNull(workprovince,''),workpostalcode=IfNull(workpostalcode,''),workcountry=IfNull(workcountry,''),url=IfNull(url,''),extension=IfNull(extension,''),speeddial_num=IfNull(speeddial_num,'');