Index: branches/5.2.x/core/units/filters/item_filter_tp.php =================================================================== diff -u -N -r15057 -r15066 --- branches/5.2.x/core/units/filters/item_filter_tp.php (.../item_filter_tp.php) (revision 15057) +++ branches/5.2.x/core/units/filters/item_filter_tp.php (.../item_filter_tp.php) (revision 15066) @@ -97,33 +97,18 @@ $count_clause = ''; $if_clause_mask = 'IF(%s BETWEEN %s AND %s, %s, %%s)'; - if ( $formatter_class ) { - $formatter =& $this->Application->recallObject($formatter_class); - /* @var $formatter kFormatter */ + for ($range_number = 0; $range_number < $range_count; $range_number++) { + $range_end = $range_start + $range_size; + $option_key = sprintf('%01.2f', $range_start) . '-' . sprintf('%01.2f', $range_end); + $options[$option_key] = $this->applyFormatting($range_start, $params) . ' - ' . $this->applyFormatting($range_end, $params); - for ($range_number = 0; $range_number < $range_count; $range_number++) { - $range_end = $range_start + $range_size; - $option_key = sprintf('%01.2f', $range_start) . '-' . sprintf('%01.2f', $range_end); - $options[$option_key] = $formatter->Format($range_start, $filter_field, $item_list)/* . ' - ' . $formatter->Format($range_end, $filter_field, $item_list)*/; - - $sql_part = sprintf($if_clause_mask, $field_sql, $range_start, $range_end, $this->Conn->qstr($option_key)); - $count_clause = $count_clause ? sprintf($count_clause, $sql_part) : $sql_part; - $range_start = $range_end; - } + $sql_part = sprintf($if_clause_mask, $field_sql, $range_start, $range_end, $this->Conn->qstr($option_key)); + $count_clause = $count_clause ? sprintf($count_clause, $sql_part) : $sql_part; + $range_start = $range_end; } - else { - for ($range_number = 0; $range_number < $range_count; $range_number++) { - $range_end = $range_start + $range_size; - $option_key = sprintf('%01.2f', $range_start) . '-' . sprintf('%01.2f', $range_end); - $options[$option_key] = $range_start . ' - ' . $range_end; - $sql_part = sprintf($if_clause_mask, $field_sql, $range_start, $range_end, $this->Conn->qstr($option_key)); - $count_clause = $count_clause ? sprintf($count_clause, $sql_part) : $sql_part; - $range_start = $range_end; - } - } + $options[sprintf('%01.2f', $range_start) . '-' . sprintf('%01.2f', $range_start)] = $range_start . ' - ' . $range_start; - $cache[$cache_key]['max_value'] = $max_value; $cache[$cache_key]['options'] = $options; @@ -151,6 +136,11 @@ $block_params['name'] = $params['render_as']; $selected_value = $this->getFilterValue($filter_field); + if ( $filter_type == 'range' && $params['type'] == 'count' ) { + // don't display last count, that corresponds to fake option + array_pop($options); + } + $last_option_title = end($options); foreach ($options as $option_key => $option_title) { @@ -176,11 +166,11 @@ $this->Application->SetVar('min_range_value', 0); $this->Application->SetVar('max_range_value', $max_value); - /*$range_count = $object->GetDBField('RangeCount'); - $range_size = ceil( $max_value / $range_count ); - $this->Application->SetVar('range_step', $range_size);*/ + $range_count = $object->GetDBField('RangeCount'); + $range_size = $max_value / $range_count; + $this->Application->SetVar('range_step', $range_size); - $this->Application->SetVar('range_step', 1); +// $this->Application->SetVar('range_step', 1); if ( $selected_value ) { list ($from_selected_value, $to_selected_value) = explode('-', $selected_value); @@ -202,6 +192,26 @@ } /** + * Formats value to display in filter + * + * @param mixed $value + * @param Array $params + * @return string + */ + function applyFormatting($value, $params) + { + if ( isset($params['currency']) && $params['currency']) { + $iso = $this->GetISO($params['currency']); + $value = $this->ConvertCurrency($value, $iso); + + $decimal_tag = isset($params['decimal_tag']) ? $params['decimal_tag'] : ''; + $value = $this->AddCurrencySymbol($value, $iso, $decimal_tag); + } + + return $value; + } + + /** * Returns next closest value to given one * * @param float $value @@ -268,4 +278,19 @@ return array_key_exists($field, $filters) ? $filters[$field] : ''; } + + /** + * Returns calculated range slider height + * + * @param Array $params + * @return string + * @access protected + */ + protected function SliderHeight($params) + { + $object =& $this->getObject($params); + /* @var $object kDBItem */ + + return $object->GetDBField('RangeCount') * $params['factor']; + } }