Aleksander Machniak
2013-01-07 745d8697ba6ff7b35bda24d9c2319a9ed848152c
program/lib/Roundcube/rcube_csv2vcard.php
@@ -2,8 +2,6 @@
/*
 +-----------------------------------------------------------------------+
 | program/include/rcube_csv2vcard.php                                   |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2008-2012, The Roundcube Dev Team                       |
 |                                                                       |
@@ -244,8 +242,8 @@
    {
        // Localize fields map
        if ($lang && $lang != 'en_US') {
            if (file_exists(INSTALL_PATH . "program/localization/$lang/csv2vcard.inc")) {
                include INSTALL_PATH . "program/localization/$lang/csv2vcard.inc";
            if (file_exists(RCUBE_LOCALIZATION_DIR . "$lang/csv2vcard.inc")) {
                include RCUBE_LOCALIZATION_DIR . "$lang/csv2vcard.inc";
            }
            if (!empty($map)) {
@@ -265,7 +263,7 @@
        // 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, RCMAIL_CHARSET);
        $charset  = rcube_charset::detect($head, RCUBE_CHARSET);
        $csv      = rcube_charset::convert($csv, $charset);
        $head     = '';
@@ -273,13 +271,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;
            }
@@ -307,6 +299,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)