From 3253b296c21c54df228de39ff3e4775974df81d5 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 20 May 2011 05:17:27 -0400
Subject: [PATCH] - Clear properly mailboxes cache on folder subscription change

---
 program/include/rcube_vcard.php |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/program/include/rcube_vcard.php b/program/include/rcube_vcard.php
index 4457bf3..7d5f309 100644
--- a/program/include/rcube_vcard.php
+++ b/program/include/rcube_vcard.php
@@ -49,7 +49,7 @@
     'spouse'      => 'X-SPOUSE',
   );
   private $typemap = array('iPhone' => 'mobile', 'CELL' => 'mobile');
-  private $phonetypemap = array('HOME1' => 'HOME', 'BUSINESS1' => 'WORK', 'BUSINESS2' => 'WORK2', 'WORKFAX' => 'BUSINESSFAX');
+  private $phonetypemap = array('HOME1' => 'HOME', 'BUSINESS1' => 'WORK', 'BUSINESS2' => 'WORK2', 'BUSINESSFAX' => 'WORKFAX');
   private $addresstypemap = array('BUSINESS' => 'WORK');
   private $immap = array('X-JABBER' => 'jabber', 'X-ICQ' => 'icq', 'X-MSN' => 'msn', 'X-AIM' => 'aim', 'X-YAHOO' => 'yahoo', 'X-SKYPE' => 'skype', 'X-SKYPE-USERNAME' => 'skype');
 
@@ -95,6 +95,10 @@
       ($detected_charset = self::detect_encoding(self::vcard_encode($this->raw))) && $detected_charset != RCMAIL_CHARSET) {
         $this->raw = self::charset_convert($this->raw, $detected_charset);
     }
+    
+    // consider FN empty if the same as the primary e-mail address
+    if ($this->raw['FN'][0][0] == $this->raw['EMAIL'][0][0])
+      $this->raw['FN'][0][0] = '';
 
     // find well-known address fields
     $this->displayname = $this->raw['FN'][0][0];
@@ -327,6 +331,19 @@
     }
   }
 
+  /**
+   * Setter for individual vcard properties
+   *
+   * @param string VCard tag name
+   * @param array Value-set of this vcard property
+   * @param boolean Set to true if the value-set should be appended instead of replacing any existing value-set
+   */
+  public function set_raw($tag, $value, $append = false)
+  {
+    $index = $append ? count($this->raw[$tag]) : 0;
+    $this->raw[$tag][$index] = (array)$value;
+  }
+
 
   /**
    * Find index with the '$type' attribute
@@ -402,7 +419,7 @@
       if (preg_match('/^END:VCARD$/i', $line)) {
         // parse vcard
         $obj = new rcube_vcard(self::cleanup($vcard_block), $charset, true);
-        if (!empty($obj->displayname))
+        if (!empty($obj->displayname) || !empty($obj->email))
           $out[] = $obj;
 
         $in_vcard_block = false;
@@ -647,7 +664,7 @@
       return $result;
     }
     else {
-      return strtr($s, array("\r" => '', '\\\\' => '\\', '\n' => "\n", '\N' => "\n", '\,' => ',', '\;' => ';'));
+      return strtr($s, array("\r" => '', '\\\\' => '\\', '\n' => "\n", '\N' => "\n", '\,' => ',', '\;' => ';', '\:' => ':'));
     }
   }
 

--
Gitblit v1.9.1