INDICE
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.
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
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:
SHOW WARNINGS;
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,'');
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,'');