public function buildFilterQuery($filter, &$joins, array &$where, Register $parameter_output) { $filter = $this->processFilter($filter); $filter_join = DataSource::FILTER_OR; $db = Symphony::Database(); // Boolean searches: if ($filter->type == 'boolean-search') { $handle = $this->buildFilterJoin($joins); $value = DataSource::replaceParametersInString(trim($filter->value), $parameter_output); $mode = preg_match('/^not(\\W)/i', $value) ? '-' : '+'; // Replace ' and ' with ' +': $value = preg_replace('/(\\W)and(\\W)/i', '\\1+\\2', $value); $value = preg_replace('/(^)and(\\W)|(\\W)and($)/i', '\\2\\3', $value); $value = preg_replace('/(\\W)not(\\W)/i', '\\1-\\2', $value); $value = preg_replace('/(^)not(\\W)|(\\W)not($)/i', '\\2\\3', $value); $value = preg_replace('/([\\+\\-])\\s*/', '\\1', $mode . $value); $statement = $db->prepareQuery("MATCH ({$handle}.value) AGAINST ('%s' IN BOOLEAN MODE)", array($value)); $where[] = "(\n\t{$statement}\n)"; return true; } return parent::buildFilterQuery($filter, $joins, $where, $parameter_output); }