Example #1
0
 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);
 }