2 commits - plugins/calendar plugins/libcalendaring plugins/libkolab
Thomas Brüderli
bruederli at kolabsys.com
Wed Jul 30 09:26:36 CEST 2014
plugins/calendar/drivers/kolab/kolab_driver.php | 28 +++------
plugins/calendar/drivers/kolab/kolab_invitation_calendar.php | 11 +++
plugins/libcalendaring/libcalendaring.php | 2
plugins/libkolab/lib/kolab_bonnie_api.php | 12 ++--
plugins/libkolab/lib/kolab_storage_folder_api.php | 32 +++++++++++
5 files changed, 61 insertions(+), 24 deletions(-)
New commits:
commit 43cf285391be3834608776eafcd63b26df52923b
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Jul 30 09:26:29 2014 +0200
Send fully qualified mailbox identifiers in Bonnie API calls
diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index f921b53..90ea084 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -1359,9 +1359,9 @@ class kolab_driver extends calendar_driver
return false;
}
- list($uid, $folder) = $this->_resolve_event_identity($event);
+ list($uid, $mailbox) = $this->_resolve_event_identity($event);
- $result = $this->bonnie_api->changelog('event', $uid, $folder);
+ $result = $this->bonnie_api->changelog('event', $uid, $mailbox);
if (is_array($result) && $result['uid'] == $uid) {
return $result['changes'];
}
@@ -1384,10 +1384,10 @@ class kolab_driver extends calendar_driver
return false;
}
- list($uid, $folder) = $this->_resolve_event_identity($event);
+ list($uid, $mailbox) = $this->_resolve_event_identity($event);
// call Bonnie API
- $result = $this->bonnie_api->diff('event', $uid, $rev, $folder);
+ $result = $this->bonnie_api->diff('event', $uid, $rev, $mailbox);
if (is_array($result) && $result['uid'] == $uid) {
$result['rev'] = $rev;
@@ -1502,23 +1502,17 @@ class kolab_driver extends calendar_driver
}
$calid = $event['calendar'];
- list($uid, $folder) = $this->_resolve_event_identity($event);
+ list($uid, $mailbox) = $this->_resolve_event_identity($event);
// call Bonnie API
- $result = $this->bonnie_api->get('event', $uid, $rev, $folder);
+ $result = $this->bonnie_api->get('event', $uid, $rev, $mailbox);
if (is_array($result) && $result['uid'] == $uid && !empty($result['xml'])) {
$format = kolab_format::factory('event');
$format->load($result['xml']);
$event = $format->to_array();
if ($format->is_valid()) {
- if ($result['folder'] && ($cal = $this->get_calendar(kolab_storage::id_encode($result['folder'])))) {
- $event['calendar'] = $cal->id;
- }
- else {
- $event['calendar'] = $calid;
- }
-
+ $event['calendar'] = $calid;
$event['rev'] = $result['rev'];
return self::to_rcube_event($event);
}
@@ -1534,11 +1528,11 @@ class kolab_driver extends calendar_driver
*/
private function _resolve_event_identity($event)
{
- $folder = null;
+ $mailbox = null;
if (is_array($event)) {
$uid = $event['id'] ?: $event['uid'];
- if ($cal = $this->get_calendar($event['calendar']) && !($cal instanceof kolab_invitation_calendar)) {
- $folder = $cal->name;
+ if (($cal = $this->get_calendar($event['calendar'])) && !($cal instanceof kolab_invitation_calendar)) {
+ $mailbox = $cal->get_mailbox_id();
}
}
else {
@@ -1550,7 +1544,7 @@ class kolab_driver extends calendar_driver
if (!in_array($uid, $demo_uids))
$uid = reset($demo_uids);
- return array($uid, $folder);
+ return array($uid, $mailbox);
}
/**
diff --git a/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php b/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php
index ac3740a..24fad59 100644
--- a/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php
+++ b/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php
@@ -115,6 +115,17 @@ class kolab_invitation_calendar
}
/**
+ * Getter for the Cyrus mailbox identifier corresponding to this folder
+ *
+ * @return string Mailbox ID
+ */
+ public function get_mailbox_id()
+ {
+ // this is a virtual collection and has no concrete mailbox ID
+ return null;
+ }
+
+ /**
* Return color to display this calendar
*/
public function get_color()
diff --git a/plugins/libkolab/lib/kolab_bonnie_api.php b/plugins/libkolab/lib/kolab_bonnie_api.php
index 732d29b..23dafd8 100644
--- a/plugins/libkolab/lib/kolab_bonnie_api.php
+++ b/plugins/libkolab/lib/kolab_bonnie_api.php
@@ -50,25 +50,25 @@ class kolab_bonnie_api
/**
* Wrapper function for <object>.changelog() API call
*/
- public function changelog($type, $uid, $folder=null)
+ public function changelog($type, $uid, $mailbox=null)
{
- return $this->client->execute($type.'.changelog', array('uid' => $uid, 'folder' => $folder));
+ return $this->client->execute($type.'.changelog', array('uid' => $uid, 'mailbox' => $mailbox));
}
/**
* Wrapper function for <object>.diff() API call
*/
- public function diff($type, $uid, $rev, $folder=null)
+ public function diff($type, $uid, $rev, $mailbox=null)
{
- return $this->client->execute($type.'.diff', array('uid' => $uid, 'rev' => $rev, 'folder' => $folder));
+ return $this->client->execute($type.'.diff', array('uid' => $uid, 'rev' => $rev, 'mailbox' => $mailbox));
}
/**
* Wrapper function for <object>.get() API call
*/
- public function get($type, $uid, $rev, $folder=null)
+ public function get($type, $uid, $rev, $mailbox=null)
{
- return $this->client->execute($type.'.get', array('uid' => $uid, 'rev' => intval($rev), 'folder' => $folder));
+ return $this->client->execute($type.'.get', array('uid' => $uid, 'rev' => intval($rev), 'mailbox' => $mailbox));
}
/**
diff --git a/plugins/libkolab/lib/kolab_storage_folder_api.php b/plugins/libkolab/lib/kolab_storage_folder_api.php
index 4a90467..ef3309e 100644
--- a/plugins/libkolab/lib/kolab_storage_folder_api.php
+++ b/plugins/libkolab/lib/kolab_storage_folder_api.php
@@ -167,6 +167,38 @@ abstract class kolab_storage_folder_api
return join('/', $path);
}
+ /**
+ * Getter for the Cyrus mailbox identifier corresponding to this folder
+ * (e.g. user/john.doe/Calendar/Personal at example.org)
+ *
+ * @return string Mailbox ID
+ */
+ public function get_mailbox_id()
+ {
+ $info = $this->get_folder_info();
+ $owner = $this->get_owner();
+ list($user, $domain) = explode('@', $owner);
+
+ switch ($info['namespace']) {
+ case 'personal':
+ return sprintf('user/%s/%s@%s', $user, $this->name, $domain);
+
+ case 'shared':
+ $ns = $this->imap->get_namespace('shared');
+ $prefix = is_array($ns) ? $ns[0][0] : '';
+ list(, $domain) = explode('@', rcube::get_instance()->get_user_name());
+ return substr($this->name, strlen($prefix)) . '@' . $domain;
+
+ default:
+ $ns = $this->imap->get_namespace('other');
+ $prefix = is_array($ns) ? $ns[0][0] : '';
+ list($user, $folder) = explode($this->imap->get_hierarchy_delimiter(), substr($info['name'], strlen($prefix)), 2);
+ if (strpos($user, '@')) {
+ list($user, $domain) = explode('@', $user);
+ }
+ return sprintf('user/%s/%s@%s', $user, $folder, $domain);
+ }
+ }
/**
* Get the color value stored in metadata
commit 93fc135e9c480d5278a93e280a0c0e91507e9387
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Jul 30 09:25:54 2014 +0200
Fix invalid function call
diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php
index d267da5..0eef727 100644
--- a/plugins/libcalendaring/libcalendaring.php
+++ b/plugins/libcalendaring/libcalendaring.php
@@ -753,7 +753,7 @@ class libcalendaring extends rcube_plugin
function($dt) use ($format) { return format_date($dt, $format); },
array_slice($rrule['EXDATE'], 0, 10)
);
- $except = '; ' . $this->gettext('except') . ' ' . join(', ');
+ $except = '; ' . $this->gettext('except') . ' ' . join(', ', $exdates);
}
return rtrim($freq . $details . ', ' . $until . $except);
More information about the commits
mailing list