Aleksander Machniak
2013-10-17 037af6890fe6fdb84a08d3c86083e847c90ec0ad
program/lib/Roundcube/rcube_csv2vcard.php
@@ -124,6 +124,12 @@
        //'work_address_2'        => '',
        'work_country'          => 'country:work',
        'work_zipcode'          => 'zipcode:work',
        'last'                  => 'surname',
        'first'                 => 'firstname',
        'work_city'             => 'locality:work',
        'work_state'            => 'region:work',
        'home_city_short'       => 'locality:home',
        'home_state_short'      => 'region:home',
    );
    /**
@@ -271,13 +277,7 @@
        // Parse file
        foreach (preg_split("/[\r\n]+/", $csv) as $i => $line) {
            $line = trim($line);
            if (empty($line)) {
                continue;
            }
            $elements = rcube_utils::explode_quoted_string(',', $line);
            $elements = $this->parse_line($line);
            if (empty($elements)) {
                continue;
            }
@@ -305,6 +305,35 @@
    }
    /**
     * Parse CSV file line
     */
    protected function parse_line($line)
    {
        $line = trim($line);
        if (empty($line)) {
            return null;
        }
        $fields = rcube_utils::explode_quoted_string(',', $line);
        // remove quotes if needed
        if (!empty($fields)) {
            foreach ($fields as $idx => $value) {
                if (($len = strlen($value)) > 1 && $value[0] == '"' && $value[$len-1] == '"') {
                    // remove surrounding quotes
                    $value = substr($value, 1, -1);
                    // replace doubled quotes inside the string with single quote
                    $value = str_replace('""', '"', $value);
                    $fields[$idx] = $value;
                }
            }
        }
        return $fields;
    }
    /**
     * Parse CSV header line, detect fields mapping
     */
    protected function parse_header($elements)
@@ -324,6 +353,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];
                }
@@ -367,6 +402,15 @@
            }
        }
        // Convert address(es) to rcube_vcard data
        foreach ($contact as $idx => $value) {
            $name = explode(':', $idx);
            if (in_array($name[0], array('street', 'locality', 'region', 'zipcode', 'country'))) {
                $contact['address:'.$name[1]][$name[0]] = $value;
                unset($contact[$idx]);
            }
        }
        // Create vcard object
        $vcard = new rcube_vcard();
        foreach ($contact as $name => $value) {