Index: trunk/core/kernel/db/db_tag_processor.php =================================================================== diff -u -r2615 -r2617 --- trunk/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 2615) +++ trunk/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 2617) @@ -1265,7 +1265,7 @@ * @param Array $params * @return string */ - function RangeName($params) + function SearchInputName($params) { $field = $this->SelectParam($params, 'field,name'); return 'custom_filters['.$this->getPrefixSpecial().']['.$field.'_'.$params['type'].']'; @@ -1277,19 +1277,19 @@ * @param Array $params * @return string */ - function RangeValue($params) + function SearchField($params) // RangeValue { $field = $this->SelectParam($params, 'field,name'); - $var_name = $this->getPrefixSpecial(true).'_'.$field.'_'.$params['type']; - $ses_var_name = $this->getPrefixSpecial().'_'.$field.'_'.$params['type']; + $custom_filters = $this->Application->RecallVar($this->getPrefixSpecial().'_custom_filters'); + $custom_filters = $custom_filters ? unserialize($custom_filters) : Array(); - $value = $this->Application->GetVar($var_name); + $append = getArrayValue($params, 'type'); - return $this->Application->GetLinkedVar($var_name, $ses_var_name, $value); + return getArrayValue($custom_filters, $field.( $append ? '_'.$append : '') ); } - function RangeFormat($params) + function SearchFormat($params) { $field = $params['field']; $object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix.'_List', $params); @@ -1323,7 +1323,7 @@ * @param unknown_type $params * @return unknown */ - function RangeError($params) + function SearchError($params) { $field = $this->SelectParam($params, 'field,name'); Index: trunk/core/kernel/db/db_event_handler.php =================================================================== diff -u -r2615 -r2617 --- trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 2615) +++ trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 2617) @@ -1243,11 +1243,13 @@ $formatter =& $this->Application->recallObject($formatter_class); - $this->Application->StoreVar( $event->getPrefixSpecial().'_'.$field, $value); $value_ts = $formatter->Parse($full_value, $search_field, $object); $pseudo = getArrayValue($object->FieldErrors, $search_field, 'pseudo'); - if($pseudo) $this->Application->StoreVar($event->getPrefixSpecial().'_'.$field.'_error', $pseudo); - + if($pseudo) + { + $this->Application->StoreVar($event->getPrefixSpecial().'_'.$field.'_error', $pseudo); + return -1; + } return $value_ts; } @@ -1288,25 +1290,33 @@ $keyword = $this->Application->GetVar( $event->getPrefixSpecial(true).'_search_keyword'); $this->Application->StoreVar( $event->getPrefixSpecial().'_search_keyword', $keyword); - $custom_filters = $this->Application->GetVar('custom_filters'); - if($custom_filters) + $custom_filters = $this->Application->RecallVar( $event->getPrefixSpecial().'_custom_filters'); + $custom_filters = $custom_filters ? unserialize($custom_filters) : Array(); + + $submit_custom_filters = $this->Application->GetVar('custom_filters'); + + if($submit_custom_filters) { - $custom_filters = getArrayValue($custom_filters, $event->getPrefixSpecial() ); - $has_custom_filters = false; - if($custom_filters) + $submit_custom_filters = getArrayValue($submit_custom_filters, $event->getPrefixSpecial() ); + + if($submit_custom_filters) { - foreach($custom_filters as $cf_name => $cf_value) + foreach($submit_custom_filters as $cf_name => $cf_value) { if($cf_value) { - $has_custom_filters = true; - break; + $custom_filters[$cf_name] = $cf_value; } + else + { + unset($custom_filters[$cf_name]); + } } } } - - if(!$keyword && !$has_custom_filters) + $this->Application->StoreVar($event->getPrefixSpecial().'_custom_filters', serialize($custom_filters) ); + + if( !$keyword && !count($custom_filters) ) { $this->OnSearchReset($event); return true; @@ -1316,7 +1326,7 @@ $grids = $this->Application->getUnitOption($event->Prefix,'Grids'); $search_fields = array_keys($grids[$grid_name]['Fields']); - $search_filter = Array(); + $search_filter = Array(); foreach($search_fields as $search_field) { @@ -1361,16 +1371,16 @@ $filter_value = Array(); $field_value = getArrayValue($custom_filters, $search_field.'_datefrom'); - $value = $this->processRangeField($event, $search_field, 'datefrom', $field_value, $formatter); if($field_value) { + $value = $this->processRangeField($event, $search_field, 'datefrom', $field_value, $formatter); $filter_value[] = $table_name.'`'.$search_field.'` >= '.$value; } $field_value = getArrayValue($custom_filters, $search_field.'_dateto'); - $value = $this->processRangeField($event, $search_field, 'dateto', $field_value, $formatter); if($field_value) { + $value = $this->processRangeField($event, $search_field, 'dateto', $field_value, $formatter); $filter_value[] = $table_name.'`'.$search_field.'` <= '.$value; } @@ -1440,23 +1450,7 @@ $this->Application->RemoveVar($event->getPrefixSpecial().'_search_filter'); $this->Application->RemoveVar($event->getPrefixSpecial().'_search_keyword'); - // remove all custom filters - $grid_name = $this->Application->GetVar('grid_name'); - $grids = $this->Application->getUnitOption($event->Prefix,'Grids'); - $search_fields = array_keys($grids[$grid_name]['Fields']); - - $object =& $event->getObject( Array('skip_autoload' => true) ); - - foreach($search_fields as $search_field) - { - $options = $object->GetFieldOptions($search_field); - $custom_filter = getArrayValue($options, 'custom_filter'); - if($custom_filter == 'date_range') - { - $this->Application->RemoveVar( $event->getPrefixSpecial().'_'.$search_field.'_datefrom'); - $this->Application->RemoveVar( $event->getPrefixSpecial().'_'.$search_field.'_dateto'); - } - } + $this->Application->RemoveVar($event->getPrefixSpecial().'_custom_filters'); } /**