Index: branches/5.0.x/core/units/general/custom_fields.php =================================================================== diff -u -r12277 -r12299 --- branches/5.0.x/core/units/general/custom_fields.php (.../custom_fields.php) (revision 12277) +++ branches/5.0.x/core/units/general/custom_fields.php (.../custom_fields.php) (revision 12299) @@ -1,6 +1,6 @@ ParseConfigSQL($values_list, $separator, $parse), $separator); + class InpCustomFieldsHelper extends kHelper { - if (!$values_list) { - // no options, then return empty array - return Array(); - } + /** + * Parses given option string and returns associative array + * + * @param string $values_list + * @param string $separator + * @param bool $parse + * @return Array + */ + function GetValuesHash($values_list, $separator = VALUE_LIST_SEPARATOR, $parse = true) + { + $values_list = trim($this->ParseConfigSQL($values_list, $separator, $parse), $separator); - $optionValuesTmp = explode($separator, $values_list); - $optionValues = Array(); - - if (substr_count($values_list, '=') != count($optionValuesTmp)) { - if ($this->Application->isDebugMode()) { - $this->Application->Debugger->appendTrace(); + if (!$values_list) { + // no options, then return empty array + return Array(); } - trigger_error('Invalid symbol in ValueList field [' . substr($values_list, 0, 100) . ' ...]' , E_USER_NOTICE); - return Array (); - } + $optionValuesTmp = explode($separator, $values_list); + $optionValues = Array(); - if ($parse) { - // normal way - foreach ($optionValuesTmp as $optionValue) { - list ($key, $val) = explode('=', $optionValue); + if (substr_count($values_list, '=') != count($optionValuesTmp)) { + if ($this->Application->isDebugMode()) { + $this->Application->Debugger->appendTrace(); + } - $val = substr($val, 0, 1) == '+' ? substr($val, 1) : $this->Application->Phrase($val); - - $optionValues[$key] = $val; + trigger_error('Invalid symbol in ValueList field [' . substr($values_list, 0, 100) . ' ...]' , E_USER_NOTICE); + return Array (); } - } - else { - // during custom field editing - foreach ($optionValuesTmp as $optionValue) { - list ($key, $val) = explode('=', $optionValue); - if (substr($key, 0, 3) == 'SQL') { - $val = base64_decode( str_replace('_', '=', substr($val, 1)) ); + if ($parse) { + // normal way + foreach ($optionValuesTmp as $optionValue) { + list ($key, $val) = explode('=', $optionValue); + + $val = substr($val, 0, 1) == '+' ? substr($val, 1) : $this->Application->Phrase($val); + + $optionValues[$key] = $val; } + } + else { + // during custom field editing + foreach ($optionValuesTmp as $optionValue) { + list ($key, $val) = explode('=', $optionValue); - $optionValues[$key] = $val; + if (substr($key, 0, 3) == 'SQL') { + $val = base64_decode( str_replace('_', '=', substr($val, 1)) ); + } + + $optionValues[$key] = $val; + } } + + return $optionValues; } - return $optionValues; - } + /** + * Replace SQL's in valueList with appropriate queried values + * + * @param string $valueString + * @param string $separator + * @return string + * @todo Apply refactoring to embedded vars stuff + */ + function ParseConfigSQL($valueString, $separator = VALUE_LIST_SEPARATOR, $parse_sqls = true) + { + $string = trim( str_replace(Array('', '%3$s'), Array (TABLE_PREFIX, $this->Application->GetVar('m_lang')), $valueString) ); - /** - * Replace SQL's in valueList with appropriate queried values - * - * @param string $valueString - * @param string $separator - * @return string - * @todo Apply refactoring to embedded vars stuff - */ - function ParseConfigSQL($valueString, $separator = VALUE_LIST_SEPARATOR, $parse_sqls = true) - { - $string = trim( str_replace(Array('', '%3$s'), Array (TABLE_PREFIX, $this->Application->GetVar('m_lang')), $valueString) ); + if (preg_match_all('/(.*?)<\/SQL>/', $string, $regs)) { + $i = 0; + $sql_count = count($regs[0]); + while ($i < $sql_count) { + if ($parse_sqls) { + $replacement = $this->_queryConfigSQL($regs[2][$i], $regs[1][$i], $separator); + } + else { + $sql = base64_encode(''.$regs[2][$i].''); + $replacement = 'SQL' . $i . '=+' . str_replace('=', '_', $sql); + } - if (preg_match_all('/(.*?)<\/SQL>/', $string, $regs)) { - $i = 0; - $sql_count = count($regs[0]); - while ($i < $sql_count) { - if ($parse_sqls) { - $replacement = $this->_queryConfigSQL($regs[2][$i], $regs[1][$i], $separator); + $string = str_replace(''.$regs[2][$i].'', $replacement, $string); + $i++; } - else { - $sql = base64_encode(''.$regs[2][$i].''); - $replacement = 'SQL' . $i . '=+' . str_replace('=', '_', $sql); - } - $string = str_replace(''.$regs[2][$i].'', $replacement, $string); - $i++; + $string = preg_replace('/[' . preg_quote($separator, '/') . ']+/', $separator, $string); // trim trailing separators inside string } - $string = preg_replace('/[' . preg_quote($separator, '/') . ']+/', $separator, $string); // trim trailing separators inside string + return $string; } - return $string; - } + /** + * Transforms given sql into value list string + * + * @param string $sql + * @param string $plus + * @param string $separator + * @return string + */ + function _queryConfigSQL($sql, $plus = '', $separator = VALUE_LIST_SEPARATOR) + { + $values = $this->Conn->Query($sql); + foreach ($values as $index => $value) { + $values[$index] = $value['OptionValue'] . '=' . $plus . $value['OptionName']; + } - /** - * Transforms given sql into value list string - * - * @param string $sql - * @param string $plus - * @param string $separator - * @return string - */ - function _queryConfigSQL($sql, $plus = '', $separator = VALUE_LIST_SEPARATOR) - { - $values = $this->Conn->Query($sql); - foreach ($values as $index => $value) { - $values[$index] = $value['OptionValue'] . '=' . $plus . $value['OptionName']; + return implode($separator, $values); } - - return implode($separator, $values); - } -} - -?> \ No newline at end of file + } \ No newline at end of file