protected function generate_sql_keyword($keywords, $table_alias = 'l.', $statement_operator = 'AND')
{
// Use no preg_quote for $keywords because this would lead to sole
// backslashes being added. We also use an OR connection here for
// spaces and the | string. Currently, regex is not supported for
// searching (but may come later).
$keywords = preg_split('#[\\s|]+#u', utf8_strtolower($keywords), 0, PREG_SPLIT_NO_EMPTY);
$sql_keywords = '';
if (!empty($keywords)) {
$keywords_pattern = array();
// Build pattern and keywords...
for ($i = 0, $num_keywords = sizeof($keywords); $i < $num_keywords; $i++) {
$keywords_pattern[] = preg_quote($keywords[$i], '#');
$keywords[$i] = $this->db->sql_like_expression($this->db->get_any_char() . $keywords[$i] . $this->db->get_any_char());
}
$keywords_pattern = '#' . implode('|', $keywords_pattern) . '#ui';
$operations = array();
foreach ($this->user->lang as $key => $value) {
if (substr($key, 0, 4) == 'LOG_') {
if (is_array($value)) {
foreach ($value as $plural_value) {
if (preg_match($keywords_pattern, $plural_value)) {
$operations[] = $key;
break;
}
}
} else {
if (preg_match($keywords_pattern, $value)) {
$operations[] = $key;
}
}
}
}
$sql_keywords = ' ' . $statement_operator . ' (';
if (!empty($operations)) {
$sql_keywords .= $this->db->sql_in_set($table_alias . 'log_operation', $operations) . ' OR ';
}
$sql_lower = $this->db->sql_lower_text($table_alias . 'log_data');
$sql_keywords .= " {$sql_lower} " . implode(" OR {$sql_lower} ", $keywords) . ')';
}
return $sql_keywords;
}