<?php

/**
 * Enter description here...
 *
 * @todo rewrite
 */
class InpCustomFieldsHelper extends kHelper {
	
	function GetValuesHash($values_list)
	{
		$optionValuesStr = $this->ParseConfigSQL($values_list);
		$optionValuesTmp = explode(',', $optionValuesStr);	
		$optionValues = Array();
		foreach($optionValuesTmp as $optionValue)
		{
			list($key, $val) = explode('=', $optionValue);
			$val = (substr($val,0,1) == '+') ? substr($val, 1) : $this->Application->Phrase($val);
			$optionValues[$key] = $val;
		}
		return $optionValues;
	}

	/**
	 * Replace SQL's in valueList with appropriate queried values
	 *
	 * @param string $valueString
	 * @return string
	 * @todo Fully rewrite !!!
	 */
	function ParseConfigSQL($valueString)
	{
		$string = trim( str_replace('<PREFIX>', TABLE_PREFIX, $valueString) );

		preg_match_all("|\{(.*)\}|U", $string, $embedded_vars, PREG_SET_ORDER);
		
		/*
		<SQL> 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++)
			{
				$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)
				{
					$pattern = str_replace($var_name, $var_value, $pattern);
					$string = str_replace($embedded_var_src, $pattern, $string);
				}
				else
				{
					$string = str_replace($embedded_var_src, '', $string);
				}
			}
		}		
		
		$start = strpos($string,'<SQL');
		
		$plus = (substr($string,$start+4,1) == '+') ? '+' : '';
				
		while($start)
		{
			$skip_length = 5 + strlen($plus);
			
			$end = strpos($string, '</SQL>');
			if(!$end)
			{
				$end = strlen($string);
			}
			$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, '<SQL');
			$plus = (substr($string,$start+4,1) == '+') ? '+' : '';
		}
		return $string;
	}

	function QueryConfigSQL($sql, $plus = '')
	{
		$valArray = $this->Conn->Query($sql);
		for($i=0; $i<sizeof($valArray); $i++)
		{
			$valArray[$i] = $valArray[$i]['OptionName'].'='.$plus.$valArray[$i]['OptionValue'];
			$valArray[$i] = str_replace(',', ';', $valArray[$i]);
		}
		return implode(',', $valArray);
	}
	
	
}

?>