Index: branches/RC/core/kernel/db/db_tag_processor.php =================================================================== diff -u -r9643 -r9657 --- branches/RC/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 9643) +++ branches/RC/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 9657) @@ -773,53 +773,59 @@ function PredefinedOptions($params) { - $field = $params['field']; $object =& $this->getObject($params); - $value = $object->GetDBField($field); - $options = $object->GetFieldOptions($field); - if( $this->HasParam($params,'has_empty') ) - { - $empty_value = getArrayValue($params, 'empty_value'); - if($empty_value === false) $empty_value = ''; - $options['options'] = array_merge_recursive2( Array($empty_value => ''), $options['options'] ); + $field = $params['field']; + $value = array_key_exists('value', $params) ? $params['value'] : $object->GetDBField($field); + $field_options = $object->GetFieldOptions($field); + if (!array_key_exists('options', $field_options) || !is_array($field_options['options'])) { + trigger_error('Options not defined for '.$object->Prefix.' field '.$field.'', E_USER_WARNING); + return ''; } - $block_params = $this->prepareTagParams($params); + $options = $field_options['options']; + if ($this->HasParam($params, 'has_empty')) { + $empty_value = array_key_exists('empty_value', $params) ? $params['empty_value'] : ''; + $options = array_merge_recursive2(Array ($empty_value => ''), $options); // don't use other array merge function, because they will reset keys !!! + } + + $block_params = $this->prepareTagParams($params); $block_params['name'] = $this->SelectParam($params, 'render_as,block'); - $block_params['field'] = $params['field']; $block_params['pass_params'] = 'true'; - $block_params['field_name'] = $this->InputName($params); - $block_params['PrefixSpecial'] = $this->getPrefixSpecial(); + if (method_exists($object, 'EOL') && count($object->Records) == 0) { + // for drawing grid column filter + $block_params['field_name'] = ''; + } + else { + $block_params['field_name'] = $this->InputName($params); // depricated (produces warning when used as grid filter), but used in Front-End + } - $selected_param_name = getArrayValue($params,'selected_param'); - if(!$selected_param_name) $selected_param_name = $params['selected']; + $selected_param_name = getArrayValue($params, 'selected_param'); + if (!$selected_param_name) { + $selected_param_name = $params['selected']; + } $selected = $params['selected']; $o = ''; - if( $this->HasParam($params,'no_empty') && !getArrayValue($options['options'],'') ) array_shift($options['options']); + if ($this->HasParam($params, 'no_empty') && !getArrayValue($options, '')) { + // removes empty option, when present (needed?) + array_shift($options); + } - if( strpos($value, '|') !== false ) - { - // multiple selection checkboxes + if (strpos($value, '|') !== false) { + // multiple checkboxes OR multiselect $value = explode('|', substr($value, 1, -1) ); - foreach ($options['options'] as $key => $val) - { + foreach ($options as $key => $val) { $block_params['key'] = $key; $block_params['option'] = $val; $block_params[$selected_param_name] = ( in_array($key, $value) ? ' '.$selected : ''); $o .= $this->Application->ParseBlock($block_params, 1); } } - else - { - // single selection radio or checkboxes - if (!isset($options['options']) || !is_array($options['options'])) { - trigger_error("Options not defined for {$object->Prefix} field $field", E_USER_WARNING); - } - foreach ($options['options'] as $key => $val) - { + else { + // single selection radio OR checkboxes OR dropdown + foreach ($options as $key => $val) { $block_params['key'] = $key; $block_params['option'] = $val; $block_params[$selected_param_name] = (strlen($key) == strlen($value) && ($key == $value) ? ' '.$selected : ''); @@ -834,16 +840,11 @@ $object =& $this->getObject($params); /* @var $object kDBList */ - $field = $params['field']; - $saved_value = $object->Queried ? $object->GetDBField($field) : null; - - $object->SetDBField($field, $this->SearchField($params)); + $params['value'] = $this->SearchField($params); $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view'); $custom_filter = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_custom_filter.'.$view_name, ALLOW_DEFAULT_SETTINGS); - $ret = $this->PredefinedOptions($params); - $object->SetDBField($field, $saved_value); - return $ret; + return $this->PredefinedOptions($params); } function Format($params)