Index: branches/RC/core/units/general/brackets.php =================================================================== diff -u -r8929 -r10731 --- branches/RC/core/units/general/brackets.php (.../brackets.php) (revision 8929) +++ branches/RC/core/units/general/brackets.php (.../brackets.php) (revision 10731) @@ -1,51 +1,160 @@ _language =& $this->Application->recallObject('lang.current'); + /* @var $lang kDBItem */ + + $this->_decimalSeparator = $this->_language->GetDBField('DecimalPoint'); + $this->_thousandsSeparator = $this->_language->GetDBField('ThousandSep'); + } + function InitHelper($min_field, $max_field, $default_values, $default_start_value = null) { $this->min_field = $min_field; $this->max_field = $max_field; $this->default_values = $default_values; - if(isset($default_start_value)) - { + + if (isset($default_start_value)) { $this->defaultStartValue = $default_start_value; } } - - + /** + * Converts number to operatable form + * + * @param string $value + * @return float + */ + function _parseNumber($value) + { + $value = str_replace($this->_thousandsSeparator, '', $value); + $value = str_replace($this->_decimalSeparator, '.', $value); + + return $value; + } + + /** + * Returns brackets from form with all numbers parsed + * + * @param kEvent $event + * @return Array + */ + function getBrackets(&$event) + { + $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); + + return $this->parseBrackets($items_info); + } + + function parseBrackets($brackets) + { + if (!$brackets) { + return $brackets; + } + + foreach ($brackets as $id => $field_values) { + if (strlen($brackets[$id]['Start'])) { + $brackets[$id]['Start'] = (float)$this->_parseNumber($brackets[$id]['Start']); + } + + if (strlen($brackets[$id]['End'])) { + $brackets[$id]['End'] = (float)$this->_parseNumber($brackets[$id]['End']); + } + } + + return $brackets; + } + + /** + * Formats given brackets and sets them back to request + * + * @param kEvent $event + * @param Array $brackets + */ + function setBrackets(&$event, $brackets) + { + $brackets = $this->formatBrackets($brackets); + + $this->Application->SetVar($event->getPrefixSpecial(true), $brackets); + } + + function formatBrackets($brackets) + { + if (!$brackets) { + return $brackets; + } + + foreach ($brackets as $id => $field_values) { + if (strlen($brackets[$id]['Start'])) { + $brackets[$id]['Start'] = $this->_language->formatNumber($brackets[$id]['Start']); + } + + if (strlen($brackets[$id]['End'])) { + $brackets[$id]['End'] = $this->_language->formatNumber($brackets[$id]['End']); + } + } + + return $brackets; + } + + /** * Adds 5 more empty brackets to brackets * * @param kEvent $event */ function OnMoreBrackets(&$event) { - $field_values = $this->Application->GetVar( $event->getPrefixSpecial(true) ); - + $field_values = $this->getBrackets($event); + $object =& $event->getObject(); foreach($field_values as $id => $record) @@ -78,9 +187,9 @@ $event->CallSubEvent('OnPreSaveBrackets'); - $this->Application->SetVar($event->getPrefixSpecial(true), $field_values); + $this->setBrackets($event, $field_values); } - + /** * Adds infinity bracket * @@ -90,17 +199,16 @@ { $object =& $event->getObject(); $infinite_exists = $this->Conn->GetOne('SELECT COUNT(*) FROM '.$object->TableName.' WHERE '.$this->max_field.' = -1'); - $field_values = $this->Application->GetVar( $event->getPrefixSpecial(true) ); - /*if(is_array($field_values)) + $field_values = $this->getBrackets($event); + /*if(is_array($field_values)) { foreach($field_values as $values) { $infinite_exists = $infinite_exists || ($values[$this->max_field] == -1); } }*/ - - if($infinite_exists == 0) - { + + if ($infinite_exists == 0) { reset($field_values); $last_bracket = end($field_values); $new_id = (int)$this->Conn->GetOne('SELECT MIN('.$object->IDField.') FROM '.$object->TableName); @@ -117,33 +225,31 @@ $infinite_bracket[$this->min_field] = ($brackets_exist > 0) ? $last_bracket[$this->max_field] : $this->defaultStartValue; $infinite_bracket[$this->max_field] = '-1'; $infinite_bracket = array_merge_recursive2($infinite_bracket, $this->default_values); - + $field_values[$new_id] = $infinite_bracket; reset($field_values); - - $this->Application->SetVar($event->getPrefixSpecial(true), $field_values); + + $this->setBrackets($event, $field_values); } } - + /** * Saves brackets to database * * @param kEvent $event */ function OnPreSaveBrackets(&$event) { - $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true)); - if($items_info) - { + $items_info = $this->getBrackets($event); + if ($items_info) { $object =& $event->getObject(); $linked_info = $object->getLinkedInfo(); $stored_ids = $this->Conn->GetCol('SELECT '.$object->IDField.' FROM '.$object->TableName.' WHERE '.$linked_info['ForeignKey'].' = '.$linked_info['ParentId']); - + uasort($items_info, Array(&$this, 'compareBrackets') ); - foreach ($items_info as $item_id => $values) - { + foreach ($items_info as $item_id => $values) { if (in_array($item_id, $stored_ids)) { //if it's already exist $object->SetDefaultValues(); @@ -187,21 +293,21 @@ } } - + function arrangeBrackets(&$event) { $object =& $event->getObject(); - - $temp = $this->Application->GetVar( $event->getPrefixSpecial(true) ); - + + $temp = $this->getBrackets($event); + foreach($temp as $id => $record) { if( $record[$this->max_field] == '∞' ) { $temp[$id][$this->max_field] = -1; } } - + $temp_orig = $temp; reset($temp); if( is_array($temp) ) @@ -212,15 +318,17 @@ // get minimal value of Min $first_elem = current($temp); $start = $first_elem[$this->min_field]; - if(!$start) $start = $this->defaultStartValue; - + if (!strlen($start)) { + $start = $this->defaultStartValue; + } + foreach($temp as $id => $record) { if( // MAX is less than start ($record[$this->max_field] <= $start && $record[$this->max_field] != -1) || // Max is empty - !$record[$this->max_field] || + !strlen($record[$this->max_field]) || // Max already defined in $end_values (array_search($record[$this->max_field], $end_values) !== false) ) { // then delete from brackets list @@ -244,28 +352,29 @@ { usort($ids, Array(&$this, 'sortBracketIDs') ); } - - $min_id = min( min($ids) - 1, -1 ); +// $min_id = min( min($ids) - 1, -1 ); + foreach($temp as $key => $record) { $temp[$key][$this->min_field] = $start; $start = $temp[$key][$this->max_field]; } } - - $this->Application->SetVar($event->getPrefixSpecial(true), $temp); + + $this->setBrackets($event, $temp); + return $temp; } - + function compareBrackets($bracket1, $bracket2) // ap_bracket_comp { $bracket1_min = $bracket1[$this->min_field]; $bracket1_max = $bracket1[$this->max_field]; - + $bracket2_min = $bracket2[$this->min_field]; $bracket2_max = $bracket2[$this->max_field]; - + // limits if( ($bracket1_min != '') && ($bracket1_max == '') && ($bracket2_min != '') && ($bracket2_max != '') ) return 1; if( ($bracket1_min != '') && ($bracket1_max == '') && ($bracket2_min == '') && ($bracket2_max == '') ) return -1; @@ -286,15 +395,15 @@ return 0; } } - + function sortBracketIDs($first_id, $second_id) // pr_bracket_id_sort { $first_abs = abs($first_id); $second_abs = abs($second_id); - + $first_sign = ($first_id == 0) ? 0 : $first_id / $first_abs; $second_sign = ($second_id == 0) ? 0 : $second_id / $second_abs; - + if($first_sign != $second_sign) { if($first_id > $second_id) @@ -312,7 +421,7 @@ return ($first_abs > $second_abs) ? 1 : ($first_abs < $second_abs ? -1 : 0); } - + /** * Searches through submitted grid data to find record with specific value in specific field * @@ -332,7 +441,7 @@ } return false; } - + /** * Replate infinity mark with -1 before saving to db * @@ -343,7 +452,7 @@ $object =& $event->getObject(); if($object->GetDBField($this->max_field) == '∞') $object->SetDBField($this->max_field, -1); } - + } ?> \ No newline at end of file