diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index d0366580..f8525bea 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -207,14 +207,18 @@ class kolab_calendar $query[] = array('dtstart', '<=', $end); $query[] = array('dtend', '>=', $start); + if (!empty($search)) { + $search = mb_strtolower($search); + foreach (rcube_utils::normalize_string($search, true) as $word) { + $query[] = array('words', 'LIKE', $word); + } + } + foreach ((array)$this->storage->select($query) as $record) { $event = $this->_to_rcube_event($record); $this->events[$event['id']] = $event; } - if (!empty($search)) - $search = mb_strtolower($search); - $events = array(); foreach ($this->events as $id => $event) { // remember seen categories diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 1a0eb9c4..d1ccb59c 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -765,7 +765,7 @@ class kolab_driver extends calendar_driver $time = $slot + $interval; $events = array(); - $query = array(array('tags', 'LIKE', '% x-has-alarms %')); + $query = array(array('tags', '=', 'x-has-alarms')); foreach ($this->calendars as $cid => $calendar) { // skip calendars with alarms disabled if (!$calendar->alarms || ($calendars && !in_array($cid, $calendars))) diff --git a/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php b/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php index 5702a0c9..f8805517 100644 --- a/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php +++ b/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php @@ -358,14 +358,14 @@ class rcube_kolab_contacts extends rcube_addressbook $squery = array(); if (count(array_intersect(kolab_format_contact::$fulltext_cols, $fields)) == $scount) { switch ($mode) { - case 1: $prefix = ' '; $suffix = ' '; break; // strict - case 2: $prefix = ' '; $suffix = ''; break; // prefix + case 1: $prefix = '^'; $suffix = '$'; break; // strict + case 2: $prefix = '^'; $suffix = ''; break; // prefix default: $prefix = ''; $suffix = ''; break; // substring } $search_string = is_array($value) ? join(' ', $value) : $value; foreach (rcube_utils::normalize_string($search_string, true) as $word) { - $squery[] = array('words', 'LIKE', '%' . $prefix . $word . $suffix . '%'); + $squery[] = array('words', 'LIKE', $prefix . $word . $suffix); } } diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php index 8ee04be3..f138d34e 100644 --- a/plugins/libkolab/lib/kolab_storage_cache.php +++ b/plugins/libkolab/lib/kolab_storage_cache.php @@ -383,6 +383,14 @@ class kolab_storage_cache $qvalue = '(' . join(',', array_map(array($this->db, 'quote'), $param[2])) . ')'; $param[1] = 'IN'; } + else if ($param[1] == '~' || $param[1] == 'LIKE') { + $param[1] = 'LIKE'; + $qvalue = $this->db->quote('%'.preg_replace('/(^\^|\$$)/', ' ', $param[2]).'%'); + } + else if ($param[0] == 'tags') { + $param[1] = 'LIKE'; + $qvalue = $this->db->quote('% '.$param[2].' %'); + } else { $qvalue = $this->db->quote($param[2]); }