Thomas Bruederli
2014-08-18 3ebac0167bf20104fb7a2a55934765117760264c
program/lib/Roundcube/rcube_csv2vcard.php
@@ -47,7 +47,7 @@
        //'business_street_2'     => '',
        //'business_street_3'     => '',
        'car_phone'             => 'phone:car',
        'categories'            => 'categories',
        'categories'            => 'groups',
        //'children'              => '',
        'company'               => 'organization',
        //'company_main_phone'    => '',
@@ -56,7 +56,7 @@
        //'email_2_type'          => '',
        //'email_3_address'       => '', //@TODO
        //'email_3_type'          => '',
        'email_address'         => 'email:main',
        'email_address'         => 'email:pref',
        //'email_type'            => '',
        'first_name'            => 'firstname',
        'gender'                => 'gender',
@@ -145,6 +145,10 @@
        'work_mobile'           => 'phone:work,cell',
        'work_title'            => 'jobtitle',
        'work_zip'              => 'zipcode:work',
        'group'                 => 'groups',
        // GMail
        'groups'                => 'groups',
    );
    /**
@@ -268,6 +272,7 @@
        'work_mobile'       => "Work Mobile",
        'work_title'        => "Work Title",
        'work_zip'          => "Work Zip",
        'groups'            => "Group",
    );
    protected $local_label_map = array();
@@ -304,7 +309,6 @@
    {
        // convert to UTF-8
        $head     = substr($csv, 0, 4096);
        $fallback = rcube::get_instance()->config->get('default_charset', 'ISO-8859-1'); // fallback to Latin-1?
        $charset  = rcube_charset::detect($head, RCUBE_CHARSET);
        $csv      = rcube_charset::convert($csv, $charset);
        $head     = '';
@@ -312,7 +316,7 @@
        $this->map = array();
        // Parse file
        foreach (preg_split("/[\r\n]+/", $csv) as $i => $line) {
        foreach (preg_split("/[\r\n]+/", $csv) as $line) {
            $elements = $this->parse_line($line);
            if (empty($elements)) {
                continue;
@@ -389,6 +393,12 @@
        if (!empty($this->local_label_map)) {
            for ($i = 0; $i < $size; $i++) {
                $label = $this->local_label_map[$elements[$i]];
                // special localization label
                if ($label && $label[0] == '_') {
                    $label = substr($label, 1);
                }
                if ($label && !empty($this->csv2vcard_map[$label])) {
                    $map2[$i] = $this->csv2vcard_map[$label];
                }
@@ -420,6 +430,11 @@
            $contact['birthday'] = $contact['birthday-y'] .'-' .$contact['birthday-m'] . '-' . $contact['birthday-d'];
        }
        // categories/groups separator in vCard is ',' not ';'
        if (!empty($contact['groups'])) {
            $contact['groups'] = str_replace(';', ',', $contact['groups']);
        }
        // Empty dates, e.g. "0/0/00", "0000-00-00 00:00:00"
        foreach (array('birthday', 'anniversary') as $key) {
            if (!empty($contact[$key])) {