phpbb\log\log::generate_sql_keyword PHP Method

generate_sql_keyword() protected method

Generates a sql condition for the specified keywords
protected generate_sql_keyword ( string $keywords, string $table_alias = 'l.', string $statement_operator = 'AND' ) : string
$keywords string The keywords the user specified to search for
$table_alias string The alias of the logs' table ('l.' by default)
$statement_operator string The operator used to prefix the statement ('AND' by default)
return string Returns the SQL condition searching for the keywords
    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;
    }