Index: branches/RC/core/admin_templates/config/config_search.tpl =================================================================== diff -u -N -r11662 -r11855 --- branches/RC/core/admin_templates/config/config_search.tpl (.../config_search.tpl) (revision 11662) +++ branches/RC/core/admin_templates/config/config_search.tpl (.../config_search.tpl) (revision 11855) @@ -72,7 +72,7 @@ - + Index: branches/RC/core/units/general/cat_event_handler.php =================================================================== diff -u -N -r11821 -r11855 --- branches/RC/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 11821) +++ branches/RC/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 11855) @@ -1064,20 +1064,23 @@ $this->saveToSearchLog($keywords, 0); // 0 - simple search, 1 - advanced search } - $keywords = strtr($keywords, Array('%' => '\\%', '_' => '\\_')); $event->setPseudoClass('_List'); + $object =& $event->getObject(); + /* @var $object kDBList */ + $this->Application->SetVar($event->getPrefixSpecial().'_Page', 1); $lang = $this->Application->GetVar('m_lang'); $items_table = $this->Application->getUnitOption($event->Prefix, 'TableName'); $module_name = $this->Application->findModule('Var', $event->Prefix, 'Name'); - $sql = ' SELECT * FROM '.$this->Application->getUnitOption('confs', 'TableName').' - WHERE ModuleName="'.$module_name.'" - AND SimpleSearch=1'; + $sql = 'SELECT * + FROM ' . $this->Application->getUnitOption('confs', 'TableName') . ' + WHERE ModuleName = ' . $this->Conn->qstr($module_name) . ' AND SimpleSearch = 1'; $search_config = $this->Conn->Query($sql, 'FieldName'); + $field_list = array_keys($search_config); $join_clauses = Array(); @@ -1106,36 +1109,27 @@ $field_list[$key.'_primary'] = 'l'.$this->Application->GetDefaultLanguageId().'_'.$field; $field_list[$key] = 'l'.$lang.'_'.$field; - if(!isset($search_config[$field]['ForeignField'])) - { + if (!isset($search_config[$field]['ForeignField'])) { $field_list[$key.'_primary'] = $local_table.'.'.$field_list[$key.'_primary']; $search_config_map[ $field_list[$key.'_primary'] ] = $field; } } // processing fields from other tables - if($foreign_field = $search_config[$field]['ForeignField']) - { + if ($foreign_field = $search_config[$field]['ForeignField']) { $exploded = explode(':', $foreign_field, 2); - if($exploded[0] == 'CALC') - { + if ($exploded[0] == 'CALC') { + // ignoring having type clauses in simple search unset($field_list[$key]); - continue; // ignoring having type clauses in simple search - /*$user_groups = $this->Application->RecallVar('UserGroups'); - $having_list[$key] = str_replace('{PREFIX}', TABLE_PREFIX, $exploded[1]); - $join_clause = str_replace('{PREFIX}', TABLE_PREFIX, $search_config[$field]['JoinClause']); - $join_clause = str_replace('{USER_GROUPS}', $user_groups, $join_clause); - $join_clause = ' LEFT JOIN '.$join_clause; - $join_clauses[] = $join_clause;*/ + continue; } - else - { + else { $multi_lingual = false; - if ($exploded[0] == 'MULTI') - { + if ($exploded[0] == 'MULTI') { $multi_lingual = true; $foreign_field = $exploded[1]; } + $exploded = explode('.', $foreign_field); // format: table.field_name $foreign_table = TABLE_PREFIX.$exploded[0]; @@ -1170,18 +1164,42 @@ $field_list[$key] = 'l'.$lang.'_cust_'.$custom_field_id; // search by custom field value on primary language - $field_list[$key.'_primary'] = 'l'.$this->Application->GetDefaultLanguageId().'_cust_'.$custom_field_id; + $field_list[$key.'_primary'] = $local_table.'.l'.$this->Application->GetDefaultLanguageId().'_cust_'.$custom_field_id; $search_config_map[ $field_list[$key.'_primary'] ] = $field; } + $field_list[$key] = $local_table.'.'.$field_list[$key]; $search_config_map[ $field_list[$key] ] = $field; } } // keyword string processing $search_helper =& $this->Application->recallObject('SearchHelper'); - $where_clause = $search_helper->buildWhereClause($keywords, $field_list); + /* @var $search_helper kSearchHelper */ + $where_clause = Array (); + foreach ($field_list as $field) { + if (preg_match('/^' . preg_quote($items_table, '/') . '\.(.*)/', $field, $regs)) { + // local real field + $filter_data = $search_helper->getSearchClause($object, $regs[1], $keywords, false); + if ($filter_data) { + $where_clause[] = $filter_data['value']; + } + } + elseif (preg_match('/^custom_data\.(.*)/', $field, $regs)) { + $custom_field_name = 'cust_' . $search_config_map[$field]; + $filter_data = $search_helper->getSearchClause($object, $custom_field_name, $keywords, false); + if ($filter_data) { + $where_clause[] = str_replace('`' . $custom_field_name . '`', $field, $filter_data['value']); + } + } + else { + $where_clause[] = $search_helper->buildWhereClause($keywords, Array ($field)); + } + } + + $where_clause = '(' . implode(') OR (', $where_clause) . ')'; + $search_scope = $this->Application->GetVar('search_scope'); if ($search_scope == 'category') { $category_id = $this->Application->GetVar('m_cat_id');