Index: trunk/core/units/general/custom_fields.php =================================================================== diff -u -r5110 -r5289 --- trunk/core/units/general/custom_fields.php (.../custom_fields.php) (revision 5110) +++ trunk/core/units/general/custom_fields.php (.../custom_fields.php) (revision 5289) @@ -6,14 +6,13 @@ * @todo rewrite */ class InpCustomFieldsHelper extends kHelper { - + function GetValuesHash($values_list) { - $optionValuesStr = $this->ParseConfigSQL($values_list); - $optionValuesTmp = explode(',', trim($optionValuesStr, ',')); + $optionValuesStr = trim($this->ParseConfigSQL($values_list), ','); + $optionValuesTmp = explode(',', $optionValuesStr); $optionValues = Array(); - foreach($optionValuesTmp as $optionValue) - { + foreach ($optionValuesTmp as $optionValue) { list($key, $val) = explode('=', $optionValue); $val = (substr($val,0,1) == '+') ? substr($val, 1) : $this->Application->Phrase($val); $optionValues[$key] = $val; @@ -26,75 +25,49 @@ * * @param string $valueString * @return string - * @todo Fully rewrite !!! + * @todo Apply refactoring to embedded vars stuff */ function ParseConfigSQL($valueString) { $string = trim( str_replace('', TABLE_PREFIX, $valueString) ); preg_match_all("|\{(.*)\}|U", $string, $embedded_vars, PREG_SET_ORDER); - + /* in ValueList now can use globally available variables. Usage: {$_POST['variable']|what to output if $_POST['variable'] is set} e.g. $_POST['variable']='Hello' Will output: what to output if Hello is set */ - - if($embedded_vars) - { - for($i = 0; $i < count($embedded_vars); $i++) - { + + if ($embedded_vars) { + for ($i = 0; $i < count($embedded_vars); $i++) { $embedded_var = $embedded_vars[$i][1]; $embedded_var_src = $embedded_vars[$i][0]; - + list($var_name, $pattern) = explode('|', $embedded_var); eval('$var_value = (isset('.$var_name.')?'.$var_name.':false);'); - - if ($var_value !== false) - { + + if ($var_value !== false) { $pattern = str_replace($var_name, $var_value, $pattern); $string = str_replace($embedded_var_src, $pattern, $string); } - else - { + else { $string = str_replace($embedded_var_src, '', $string); } } - } - - $start = strpos($string,''); - if(!$end) - { - $end = strlen($string); + } + + if (preg_match_all('/(.*?)<\/SQL>/', $string, $regs)) { + $i = 0; + $sql_count = count($regs[0]); + while ($i < $sql_count) { + $string = str_replace(''.$regs[2][$i].'', $this->QueryConfigSQL($regs[2][$i], $regs[1][$i]), $string); + $i++; } - $len = $end - $start; - $sql = substr($string,$start+$skip_length,$len-$skip_length); - - $sql_val = $this->QueryConfigSQL($sql, $plus); - - /*if ($start>0 && $sql_val!='') - $sql_val=",".$sql_val;*/ - if ($end < strlen($string)-$skip_length-1 && $sql_val!='') - $sql_val.=","; - - $chunk1=substr($string,0,$start); - $chunk2=substr($string,$end+$skip_length+1); - $s = $chunk1.$sql_val.$chunk2; - - $string = $s; - - $start = strpos($string, 'Conn->Query($sql); for($i=0; $i \ No newline at end of file