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