From 25fb9732a008d4fb35e4afdefea552f36835fa43 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 26 Nov 2014 18:49:31 +0100 Subject: Fix so all unknown email addresses from Google csv format are imported (#1490159) --- INSTALL | 2 +- program/lib/Roundcube/rcube_csv2vcard.php | 25 ++++++++++++++++++++++--- tests/src/Csv2vcard/gmail.csv | Bin 3778 -> 3992 bytes tests/src/Csv2vcard/gmail.vcf | 2 ++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/INSTALL b/INSTALL index ef1c59b85..817d98c1e 100644 --- a/INSTALL +++ b/INSTALL @@ -12,7 +12,7 @@ REQUIREMENTS * The Apache, Lighttpd, Cherokee or Hiawatha web server * .htaccess support allowing overrides for DirectoryIndex * PHP Version 5.3.7 or greater including - - PCRE, DOM, JSON, XML, Session, Sockets (required) + - PCRE, DOM, JSON, Session, Sockets (required) - PHP Data Objects (PDO) with driver for either MySQL, PostgreSQL or SQLite (required) - Libiconv, Zip (recommended) - OpenSSL, Fileinfo, Mcrypt, mbstring (optional) diff --git a/program/lib/Roundcube/rcube_csv2vcard.php b/program/lib/Roundcube/rcube_csv2vcard.php index 802ca730d..8eff4d56c 100644 --- a/program/lib/Roundcube/rcube_csv2vcard.php +++ b/program/lib/Roundcube/rcube_csv2vcard.php @@ -302,6 +302,7 @@ class rcube_csv2vcard 'Value' => array( 'home' => 'email:home', 'work' => 'email:work', + '*' => 'email:other', ), ), 'Phone' => array( @@ -567,8 +568,19 @@ class rcube_csv2vcard foreach ($item as $item_key => $item_idx) { $value = $data[$item_idx]; - if ($value !== null && $value !== '' && ($data_idx = $this->gmail_label_map[$key][$item_key][$type])) { - $contact[$data_idx] = $value; + if ($value !== null && $value !== '') { + foreach (array($type, '*') as $_type) { + if ($data_idx = $this->gmail_label_map[$key][$item_key][$_type]) { + if (!empty($contact[$data_idx])) { + $contact[$data_idx] = (array) $contact[$data_idx]; + $contact[$data_idx][] = $value; + } + else { + $contact[$data_idx] = $value; + } + break; + } + } } } } @@ -624,7 +636,14 @@ class rcube_csv2vcard $vcard = new rcube_vcard(); foreach ($contact as $name => $value) { $name = explode(':', $name); - $vcard->set($name[0], $value, $name[1]); + if (is_array($value) && $name[0] != 'address') { + foreach ((array) $value as $val) { + $vcard->set($name[0], $val, $name[1]); + } + } + else { + $vcard->set($name[0], $value, $name[1]); + } } // add to the list diff --git a/tests/src/Csv2vcard/gmail.csv b/tests/src/Csv2vcard/gmail.csv index 1de3033e7..b95cb0144 100644 Binary files a/tests/src/Csv2vcard/gmail.csv and b/tests/src/Csv2vcard/gmail.csv differ diff --git a/tests/src/Csv2vcard/gmail.vcf b/tests/src/Csv2vcard/gmail.vcf index 2a56311d3..e9486b29b 100644 --- a/tests/src/Csv2vcard/gmail.vcf +++ b/tests/src/Csv2vcard/gmail.vcf @@ -8,6 +8,8 @@ NOTE:note"note CATEGORIES:My Contacts,Test EMAIL;TYPE=INTERNET;TYPE=HOME:home@aaa.pl EMAIL;TYPE=INTERNET;TYPE=WORK:work@email.pl +EMAIL;TYPE=INTERNET;TYPE=OTHER:unknown@email.com +EMAIL;TYPE=INTERNET;TYPE=OTHER:other@email.com TEL;TYPE=pager:pager TEL;TYPE=pref:mainphone TEL;TYPE=home:homephone -- cgit v1.2.3