Use regex-like syntax for LIKE queries to kolab_storage_cache; also use it for calendar search
This commit is contained in:
parent
e9be3f05ff
commit
6bbb34b3ae
4 changed files with 19 additions and 7 deletions
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue