Keep kolab uids related to a message in memory for repeated queries

This commit is contained in:
Thomas Bruederli 2014-10-13 18:12:59 +02:00
parent 80f23d7d90
commit f505abb350

View file

@ -760,6 +760,8 @@ class kolab_storage_config
*/ */
public function get_message_relations($message, $folder, $type) public function get_message_relations($message, $folder, $type)
{ {
static $_cache = array();
$result = array(); $result = array();
$uids = array(); $uids = array();
$default = true; $default = true;
@ -777,24 +779,32 @@ class kolab_storage_config
} }
$filter[] = array('member', '=', $member_id); $filter[] = array('member', '=', $member_id);
// get UIDs of assigned notes if (!isset($_cache[$uri])) {
foreach ($this->get_objects($filter, $default) as $relation) { // get UIDs of related groupware objects
// we don't need to update members if the URI is found foreach ($this->get_objects($filter, $default) as $relation) {
if (!in_array($uri, $relation['members'])) { // we don't need to update members if the URI is found
// update members... if (!in_array($uri, $relation['members'])) {
$messages = kolab_storage_config::resolve_members($relation); // update members...
// ...and check again $messages = kolab_storage_config::resolve_members($relation);
if (empty($messages[$folder]) || !in_array($message->uid, $messages[$folder])) { // ...and check again
continue; if (empty($messages[$folder]) || !in_array($message->uid, $messages[$folder])) {
continue;
}
}
// find groupware object UID(s)
foreach ($relation['members'] as $member) {
if (strpos($member, 'urn:uuid:') === 0) {
$uids[] = substr($member, 9);
}
} }
} }
// find groupware object UID(s) // remember this lookup
foreach ($relation['members'] as $member) { $_cache[$uri] = $uids;
if (strpos($member, 'urn:uuid:') === 0) { }
$uids[] = substr($member, 9); else {
} $uids = $_cache[$uri];
}
} }
// get kolab objects of specified type // get kolab objects of specified type