示例#1
0
 /**
  * Do a boolean search
  *
  * @param   array   &$filters  filter array
  * @param   string  $search    term
  *
  * @return  void
  */
 private function doBooleanSearch(&$filters, $search)
 {
     $input = $this->app->input;
     $mode = $input->get('search-mode-advanced', 'and');
     if (trim($search) == '') {
         return;
     }
     $this->testBooleanSearchLength($search);
     $search = explode(' ', $search);
     switch ($mode) {
         case 'all':
             $operator = '+';
             break;
         case 'none':
             $operator = '-';
             break;
         default:
         case 'exact':
         case 'any':
             $operator = '';
             break;
     }
     foreach ($search as &$s) {
         $s = $operator . $s . '*';
     }
     $search = implode(' ', $search);
     if ($mode == 'exact') {
         $search = '"' . $search . '"';
     }
     if ($mode == 'none') {
         /**
          * Have to do it like this as the -operator removes records matched from
          * previous +operators (so if you just have -operator)
          * no records are returned
          */
         $search = '+(a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z*) ' . $search;
     }
     $input->set('override_join_val_column_concat', 1);
     $names = $this->listModel->getSearchAllFields();
     if (empty($names)) {
         return;
     }
     $input->set('override_join_val_column_concat', 0);
     $names = implode(", ", $names);
     $filters['value'][9999] = $search;
     $filters['condition'][9999] = 'AGAINST';
     $filters['join'][9999] = 'AND';
     $filters['no-filter-setup'][9999] = 0;
     $filters['hidden'][9999] = 0;
     $filters['key'][9999] = "MATCH(" . $names . ")";
     $filters['key2'][9999] = "MATCH(" . $names . ")";
     $filters['search_type'][9999] = 'searchall';
     $filters['match'][9999] = 1;
     $filters['full_words_only'][9999] = 0;
     $filters['eval'][9999] = 0;
     $filters['required'][9999] = 0;
     $filters['access'][9999] = 0;
     $filters['grouped_to_previous'][9999] = 1;
     $filters['label'][9999] = '';
     $filters['elementid'][9999] = -1;
     $filters['raw'][9999] = false;
 }