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)