From 2c58d048c028852af4a29e9f728eb859ce52260b Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 21 Aug 2015 10:57:26 +0200 Subject: [PATCH] Extend kolab_storage_config::get_tags() with possibility to search members by Message-ID and to set limit for better performance --- plugins/libkolab/lib/kolab_storage_config.php | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/plugins/libkolab/lib/kolab_storage_config.php b/plugins/libkolab/lib/kolab_storage_config.php index 79b6f998..e843e976 100644 --- a/plugins/libkolab/lib/kolab_storage_config.php +++ b/plugins/libkolab/lib/kolab_storage_config.php @@ -649,11 +649,13 @@ class kolab_storage_config /** * Get tags (all or referring to specified object) * - * @param string $uid Optional object UID + * @param string $member Optional object UID or mail message-id + * @param int $limit Max. number of records (per-folder) + * Used when searching by member * * @return array List of Relation objects */ - public function get_tags($uid = '*') + public function get_tags($member = '*', $limit = 0) { if (!isset($this->tags)) { $default = true; @@ -663,9 +665,9 @@ class kolab_storage_config ); // use faster method - if ($uid && $uid != '*') { - $filter[] = array('member', '=', $uid); - $tags = $this->get_objects($filter, $default); + if ($member && $member != '*') { + $filter[] = array('member', '=', $member); + $tags = $this->get_objects($filter, $default, $limit); } else { $this->tags = $tags = $this->get_objects($filter, $default); @@ -675,17 +677,31 @@ class kolab_storage_config $tags = $this->tags; } - if ($uid === '*') { + if ($member === '*') { return $tags; } $result = array(); - $search = self::build_member_url($uid); + + if ($member[0] == '<') { + $search_msg = urlencode($member); + } + else { + $search_uid = self::build_member_url($member); + } foreach ($tags as $tag) { - if (in_array($search, (array) $tag['members'])) { + if ($search_uid && in_array($search_uid, (array) $tag['members'])) { $result[] = $tag; } + else if ($search_msg) { + foreach ($tag['members'] as $m) { + if (strpos($m, $search_msg) !== false) { + $result[] = $tag; + break; + } + } + } } return $result;