Aleksander Machniak
2015-06-07 a9587489473baf3854999e711083be212ca0c1c4
program/lib/Roundcube/rcube_vcard.php
@@ -1,6 +1,6 @@
<?php
/*
/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2008-2012, The Roundcube Dev Team                       |
@@ -110,7 +110,7 @@
    public function load($vcard, $charset = RCUBE_CHARSET, $detect = false)
    {
        self::$values_decoded = false;
        $this->raw = self::vcard_decode($vcard);
        $this->raw = self::vcard_decode(self::cleanup($vcard));
        // resolve charset parameters
        if ($charset == null) {
@@ -393,6 +393,10 @@
                    $this->raw[$tag][$index]['type'] = explode(',', ($typemap[$type_uc] ? $typemap[$type_uc] : $type));
                }
            }
            else {
                unset($this->raw[$tag]);
            }
            break;
        }
    }
@@ -414,9 +418,10 @@
     * Find index with the '$type' attribute
     *
     * @param string Field name
     *
     * @return int Field index having $type set
     */
    private function get_type_index($field, $type = 'pref')
    private function get_type_index($field)
    {
        $result = 0;
        if ($this->raw[$field]) {
@@ -496,7 +501,7 @@
            if (preg_match('/^END:VCARD$/i', $line)) {
                // parse vcard
                $obj = new rcube_vcard(self::cleanup($vcard_block), $charset, true, self::$fieldmap);
                $obj = new rcube_vcard($vcard_block, $charset, true, self::$fieldmap);
                // FN and N is required by vCard format (RFC 2426)
                // on import we can be less restrictive, let's addressbook decide
                if (!empty($obj->displayname) || !empty($obj->surname) || !empty($obj->firstname) || !empty($obj->email)) {
@@ -532,9 +537,9 @@
        // Cleanup
        $vcard = preg_replace(array(
                // convert special types (like Skype) to normal type='skype' classes with this simple regex ;)
                '/item(\d+)\.(TEL|EMAIL|URL)([^:]*?):(.*?)item\1.X-ABLabel:(?:_\$!<)?([\w-() ]*)(?:>!\$_)?./s',
                '/^item\d*\.X-AB.*$/m',  // remove cruft like item1.X-AB*
                '/^item\d*\./m',         // remove item1.ADR instead of ADR
                '/item(\d+)\.(TEL|EMAIL|URL)([^:]*?):(.*?)item\1.X-ABLabel:(?:_\$!<)?([\w-() ]*)(?:>!\$_)?./si',
                '/^item\d*\.X-AB.*$/mi',  // remove cruft like item1.X-AB*
                '/^item\d*\./mi',         // remove item1.ADR instead of ADR
                '/\n+/',                 // remove empty lines
                '/^(N:[^;\R]*)$/m',      // if N doesn't have any semicolons, add some
            ),