3 commits - plugins/libkolab

Thomas Brüderli bruederli at kolabsys.com
Wed Apr 3 22:02:38 CEST 2013


 plugins/libkolab/lib/kolab_format_xcal.php    |   18 ++++---
 plugins/libkolab/lib/kolab_storage.php        |   60 +++++++++++++++-----------
 plugins/libkolab/lib/kolab_storage_folder.php |   18 ++++++-
 3 files changed, 62 insertions(+), 34 deletions(-)

New commits:
commit fa1cc97ed5baea64eab082bf70007869aa3bd524
Merge: 79eddd3 00df84f
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Apr 3 22:02:29 2013 +0200

    Merge branch 'master' of ssh://git.kolab.org/git/roundcubemail-plugins-kolab



commit 79eddd3c5cde5d0877e7d62960639b8cada60826
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Wed Apr 3 22:02:19 2013 +0200

    Allow to save display name in IMAP annotation

diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php
index a569af7..7d5e1c6 100644
--- a/plugins/libkolab/lib/kolab_storage.php
+++ b/plugins/libkolab/lib/kolab_storage.php
@@ -27,8 +27,10 @@ class kolab_storage
 {
     const CTYPE_KEY = '/shared/vendor/kolab/folder-type';
     const CTYPE_KEY_PRIVATE = '/private/vendor/kolab/folder-type';
-    const COLOR_KEY_SHARED = '/shared/vendor/kolab/color';
+    const COLOR_KEY_SHARED  = '/shared/vendor/kolab/color';
     const COLOR_KEY_PRIVATE = '/private/vendor/kolab/color';
+    const NAME_KEY_SHARED   = '/shared/vendor/kolab/name';
+    const NAME_KEY_PRIVATE  = '/private/vendor/kolab/name';
 
     public static $version = '3.0';
     public static $last_error;
@@ -331,18 +333,25 @@ class kolab_storage
             $result = self::folder_create($folder, $prop['type'], $prop['subscribed'], $prop['active']);
         }
 
-        // save color in METADATA
+        // save displayname and color in METADATA
         // TODO: also save 'showalarams' and other properties here
-
-        if ($result && $prop['color']) {
-            $meta_saved = false;
-            $ns = self::$imap->folder_namespace($folder);
-            if ($ns == 'personal')  // save in shared namespace for personal folders
-                $meta_saved = self::$imap->set_metadata($folder, array(self::COLOR_KEY_SHARED => $prop['color']));
-            if (!$meta_saved)    // try in private namespace
-                $meta_saved = self::$imap->set_metadata($folder, array(self::COLOR_KEY_PRIVATE => $prop['color']));
-            if ($meta_saved)
-                unset($prop['color']);  // unsetting will prevent fallback to local user prefs
+        if ($result) {
+            $ns = null;
+            foreach (array('color'       => array(self::COLOR_KEY_SHARED,self::COLOR_KEY_PRIVATE),
+                           'displayname' => array(self::NAME_KEY_SHARED,self::NAME_KEY_PRIVATE)) as $key => $metakeys) {
+                if (!empty($prop[$key])) {
+                    if (!isset($ns))
+                        $ns = self::$imap->folder_namespace($folder);
+
+                    $meta_saved = false;
+                    if ($ns == 'personal')  // save in shared namespace for personal folders
+                        $meta_saved = self::$imap->set_metadata($folder, array($metakeys[0] => $prop[$key]));
+                    if (!$meta_saved)    // try in private namespace
+                        $meta_saved = self::$imap->set_metadata($folder, array($metakeys[1] => $prop[$key]));
+                    if ($meta_saved)
+                        unset($prop[$key]);  // unsetting will prevent fallback to local user prefs
+                }
+            }
         }
 
         return $result ? $folder : false;
@@ -362,6 +371,12 @@ class kolab_storage
     {
         self::setup();
 
+        // find custom display name in folder METADATA
+        $metadata = self::$imap->get_metadata($folder, array(self::NAME_KEY_PRIVATE, self::NAME_KEY_SHARED));
+        if (($name = $metadata[$folder][self::NAME_KEY_PRIVATE]) || ($name = $metadata[$folder][self::NAME_KEY_SHARED])) {
+            return $name;
+        }
+
         $found     = false;
         $namespace = self::$imap->get_namespace();
 
@@ -493,33 +508,30 @@ class kolab_storage
                 }
             }
 
-            $names[$name] = rcube_charset::convert($name, 'UTF7-IMAP');
+            $names[$name] = self::object_name($name);
         }
 
         // Make sure parent folder is listed (might be skipped e.g. if it's namespace root)
         if ($p_len && !isset($names[$parent])) {
-            $names[$parent] = rcube_charset::convert($parent, 'UTF7-IMAP');
+            $names[$parent] = self::object_name($parent);
         }
 
         // Sort folders list
         asort($names, SORT_LOCALE_STRING);
 
-        $folders = array_keys($names);
-        $names   = array();
-
         // Build SELECT field of parent folder
         $attrs['is_escaped'] = true;
         $select = new html_select($attrs);
         $select->add('---', '');
 
-        foreach ($folders as $name) {
-            $imap_name = $name;
-            $name      = $origname = self::object_name($name);
+        $listnames = array();
+        foreach (array_keys($names) as $imap_name) {
+            $name = $origname = $names[$imap_name];
 
             // find folder prefix to truncate
-            for ($i = count($names)-1; $i >= 0; $i--) {
-                if (strpos($name, $names[$i].' » ') === 0) {
-                    $length = strlen($names[$i].' » ');
+            for ($i = count($listnames)-1; $i >= 0; $i--) {
+                if (strpos($name, $listnames[$i].' » ') === 0) {
+                    $length = strlen($listnames[$i].' » ');
                     $prefix = substr($name, 0, $length);
                     $count  = count(explode(' » ', $prefix));
                     $name   = str_repeat('  ', $count-1) . '» ' . substr($name, $length);
@@ -527,7 +539,7 @@ class kolab_storage
                 }
             }
 
-            $names[] = $origname;
+            $listnames[] = $origname;
             $select->add($name, $imap_name);
         }
 
diff --git a/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php
index dd0e8d2..fe17d63 100644
--- a/plugins/libkolab/lib/kolab_storage_folder.php
+++ b/plugins/libkolab/lib/kolab_storage_folder.php
@@ -49,6 +49,7 @@ class kolab_storage_folder
     public $cache;
 
     private $type_annotation;
+    private $namespace;
     private $imap;
     private $info;
     private $idata;
@@ -182,7 +183,9 @@ class kolab_storage_folder
      */
     public function get_namespace()
     {
-        return $this->imap->folder_namespace($this->name);
+        if (!isset($this->namespace))
+            $this->namespace = $this->imap->folder_namespace($this->name);
+        return $this->namespace;
     }
 
 
@@ -203,7 +206,18 @@ class kolab_storage_folder
 
 
     /**
-     * Get the color value stores in metadata
+     * Get the display name value of this folder
+     *
+     * @return string Folder name
+     */
+    public function get_name()
+    {
+        return kolab_storage::object_name($this->name, $this->namespace);
+    }
+
+
+    /**
+     * Get the color value stored in metadata
      *
      * @param string Default color value to return if not set
      * @return mixed Color value from IMAP metadata or $default is not set


commit 44007783200dbbfce391660d7cf85e679251fcf4
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Mar 28 18:06:45 2013 +0100

    Avoid duplicate entries for attendees that are already listed as organizer

diff --git a/plugins/libkolab/lib/kolab_format_xcal.php b/plugins/libkolab/lib/kolab_format_xcal.php
index 4e72888..95f0718 100644
--- a/plugins/libkolab/lib/kolab_format_xcal.php
+++ b/plugins/libkolab/lib/kolab_format_xcal.php
@@ -126,13 +126,15 @@ abstract class kolab_format_xcal extends kolab_format
         for ($i=0; $i < $attvec->size(); $i++) {
             $attendee = $attvec->get($i);
             $cr = $attendee->contact();
-            $object['attendees'][] = array(
-                'role' => $role_map[$attendee->role()],
-                'status' => $part_status_map[$attendee->partStat()],
-                'rsvp' => $attendee->rsvp(),
-                'email' => $cr->email(),
-                'name' => $cr->name(),
-            );
+            if ($cr->email() != $object['organizer']['email']) {
+                $object['attendees'][] = array(
+                    'role' => $role_map[$attendee->role()],
+                    'status' => $part_status_map[$attendee->partStat()],
+                    'rsvp' => $attendee->rsvp(),
+                    'email' => $cr->email(),
+                    'name' => $cr->name(),
+                );
+            }
         }
 
         // read recurrence rule
@@ -240,7 +242,7 @@ abstract class kolab_format_xcal extends kolab_format
             if ($attendee['role'] == 'ORGANIZER') {
                 $object['organizer'] = $attendee;
             }
-            else {
+            else if ($attendee['email'] != $object['organizer']['email']) {
                 $cr = new ContactReference(ContactReference::EmailReference, $attendee['email']);
                 $cr->setName($attendee['name']);
 





More information about the commits mailing list