diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index f4caa21b..e416ea7d 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -1744,6 +1744,15 @@ class calendar extends rcube_plugin $event['attachments'][$k]['classname'] = rcube_utils::file2class($attachment['mimetype'], $attachment['name']); } + // convert link URIs references into structs + if (array_key_exists('links', $event)) { + foreach ((array) $event['links'] as $i => $link) { + if (strpos($link, 'imap://') === 0 && ($msgref = $this->driver->get_message_reference($link))) { + $event['links'][$i] = $msgref; + } + } + } + // check for organizer in attendees list $organizer = null; foreach ((array)$event['attendees'] as $i => $attendee) { diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index b06cbef2..27fa6dbf 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -383,7 +383,7 @@ class kolab_calendar extends kolab_storage_folder_api // Apply event-to-mail relations $config = kolab_storage_config::get_instance(); - $config->apply_links($events, 'event'); + $config->apply_links($events); // avoid session race conditions that will loose temporary subscriptions $this->cal->rc->session->nowrite = true; diff --git a/plugins/kolab_notes/kolab_notes.php b/plugins/kolab_notes/kolab_notes.php index 048a5926..7faee11c 100644 --- a/plugins/kolab_notes/kolab_notes.php +++ b/plugins/kolab_notes/kolab_notes.php @@ -441,7 +441,7 @@ class kolab_notes extends rcube_plugin { $config = kolab_storage_config::get_instance(); $tags = $config->apply_tags($records); - $config->apply_links($records, 'note'); + $config->apply_links($records); foreach ($records as $i => $rec) { unset($records[$i]['description']); @@ -558,6 +558,8 @@ class kolab_notes extends rcube_plugin if ($result) { // get note tags $result['tags'] = $this->get_tags($result['uid']); + // get note links + $result['links'] = $this->get_links($result['uid']); } return $result; @@ -566,7 +568,7 @@ class kolab_notes extends rcube_plugin /** * Helper method to encode the given note record for use in the client */ - private function _client_encode(&$note, $resolve = false) + private function _client_encode(&$note) { foreach ($note as $key => $prop) { if ($key[0] == '_' || $key == 'x-custom') { @@ -586,11 +588,13 @@ class kolab_notes extends rcube_plugin $note['html'] = $this->_wash_html($note['description']); } - // resolve message links - if (!array_key_exists('links', $note)) { - $note['links'] = array_map(function($link) { - return kolab_storage_config::get_message_reference($link, 'note') ?: array('uri' => $link); - }, $this->get_links($note['uid'])); + // convert link URIs references into structs + if (array_key_exists('links', $note)) { + foreach ((array)$note['links'] as $i => $link) { + if (strpos($link, 'imap://') === 0 && ($msgref = kolab_storage_config::get_message_reference($link, 'note'))) { + $note['links'][$i] = $msgref; + } + } } return $note; diff --git a/plugins/libkolab/lib/kolab_storage_config.php b/plugins/libkolab/lib/kolab_storage_config.php index 7cd2c90d..276e8ff4 100644 --- a/plugins/libkolab/lib/kolab_storage_config.php +++ b/plugins/libkolab/lib/kolab_storage_config.php @@ -595,10 +595,9 @@ class kolab_storage_config /** * Assign links (relations) to kolab objects * - * @param array $records List of kolab objects - * @param string $type Object type + * @param array $records List of kolab objects */ - public function apply_links(&$records, $type = null) + public function apply_links(&$records) { $links = array(); $uids = array(); @@ -646,11 +645,10 @@ class kolab_storage_config // make relation members up-to-date kolab_storage_config::resolve_members($relation); - // replace link URIs with message reference URLs $members = array(); foreach ((array) $relation['members'] as $member) { if (strpos($member, 'imap://') === 0) { - $members[$member] = kolab_storage_config::get_message_reference($member, $type) ?: array('uri' => $member); + $members[$member] = $member; } } $members = array_values($members); diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php index 9015fae2..0c5a65c6 100644 --- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php +++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php @@ -598,7 +598,7 @@ class tasklist_kolab_driver extends tasklist_driver } $config->apply_tags($results); - $config->apply_links($results, 'task'); + $config->apply_links($results); foreach (array_keys($results) as $idx) { $results[$idx] = $this->_to_rcube_task($results[$idx], $results[$idx]['list_id']); diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php index 6b43e167..457f66d6 100644 --- a/plugins/tasklist/tasklist.php +++ b/plugins/tasklist/tasklist.php @@ -1256,8 +1256,8 @@ class tasklist extends rcube_plugin // convert link URIs references into structs if (array_key_exists('links', $rec)) { - foreach ((array)$rec['links'] as $i => $link) { - if (strpos($link, 'imap://') === 0 && ($msgref = $this->driver->get_message_reference($link))) { + foreach ((array) $rec['links'] as $i => $link) { + if (strpos($link, 'imap://') === 0 && ($msgref = $this->driver->get_message_reference($link, 'task'))) { $rec['links'][$i] = $msgref; } }