Use regex-like syntax for LIKE queries to kolab_storage_cache; also use it for calendar search

This commit is contained in:
Thomas Bruederli 2012-05-30 09:13:24 +02:00
parent e9be3f05ff
commit 6bbb34b3ae
4 changed files with 19 additions and 7 deletions

View file

@ -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

View file

@ -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)))

View file

@ -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);
}
}

View file

@ -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]);
}