summaryrefslogtreecommitdiff
path: root/program/lib/Roundcube/rcube_csv2vcard.php
diff options
context:
space:
mode:
Diffstat (limited to 'program/lib/Roundcube/rcube_csv2vcard.php')
-rw-r--r--program/lib/Roundcube/rcube_csv2vcard.php47
1 files changed, 38 insertions, 9 deletions
diff --git a/program/lib/Roundcube/rcube_csv2vcard.php b/program/lib/Roundcube/rcube_csv2vcard.php
index b7d159178..4b6e4fd3c 100644
--- a/program/lib/Roundcube/rcube_csv2vcard.php
+++ b/program/lib/Roundcube/rcube_csv2vcard.php
@@ -52,9 +52,9 @@ class rcube_csv2vcard
'company' => 'organization',
//'company_main_phone' => '',
'department' => 'department',
- //'email_2_address' => '', //@TODO
+ 'email_2_address' => 'email:other',
//'email_2_type' => '',
- //'email_3_address' => '', //@TODO
+ 'email_3_address' => 'email:other',
//'email_3_type' => '',
'email_address' => 'email:pref',
//'email_type' => '',
@@ -186,9 +186,9 @@ class rcube_csv2vcard
//'company_main_phone' => "Company Main Phone",
'department' => "Department",
//'directory_server' => "Directory Server",
- //'email_2_address' => "E-mail 2 Address",
+ 'email_2_address' => "E-mail 2 Address",
//'email_2_type' => "E-mail 2 Type",
- //'email_3_address' => "E-mail 3 Address",
+ 'email_3_address' => "E-mail 3 Address",
//'email_3_type' => "E-mail 3 Type",
'email_address' => "E-mail Address",
//'email_type' => "E-mail Type",
@@ -302,6 +302,7 @@ class rcube_csv2vcard
'Value' => array(
'home' => 'email:home',
'work' => 'email:work',
+ '*' => 'email:other',
),
),
'Phone' => array(
@@ -553,7 +554,13 @@ class rcube_csv2vcard
foreach ($this->map as $idx => $name) {
$value = $data[$idx];
if ($value !== null && $value !== '') {
- $contact[$name] = $value;
+ if (!empty($contact[$name])) {
+ $contact[$name] = (array) $contact[$name];
+ $contact[$name][] = $value;
+ }
+ else {
+ $contact[$name] = $value;
+ }
}
}
@@ -567,8 +574,20 @@ 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]) {
+ $value = explode(' ::: ', $value);
+
+ if (!empty($contact[$data_idx])) {
+ $contact[$data_idx] = array_merge((array) $contact[$data_idx], $value);
+ }
+ else {
+ $contact[$data_idx] = $value;
+ }
+ break;
+ }
+ }
}
}
}
@@ -584,11 +603,14 @@ class rcube_csv2vcard
if (!empty($contact['groups'])) {
// categories/groups separator in vCard is ',' not ';'
+ $contact['groups'] = str_replace(',', '', $contact['groups']);
$contact['groups'] = str_replace(';', ',', $contact['groups']);
- // remove "* " added by GMail
if (!empty($this->gmail_map)) {
+ // remove "* " added by GMail
$contact['groups'] = str_replace('* ', '', $contact['groups']);
+ // replace strange delimiter
+ $contact['groups'] = str_replace(' ::: ', ',', $contact['groups']);
}
}
@@ -621,7 +643,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