<?php

/**
 * Enter description here...
 *
 * @todo rewrite
 */
class InpCustomFieldsHelper extends kHelper {

	function GetValuesHash($values_list)
	{
		$optionValuesStr = trim($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 Apply refactoring to embedded vars stuff
	 */
	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);
				}
			}
		}

		if (preg_match_all('/<SQL([+]{0,1})>(.*?)<\/SQL>/', $string, $regs)) {
			$i = 0;
			$sql_count = count($regs[0]);
			while ($i < $sql_count) {
				$string = str_replace('<SQL'.$regs[1][$i].'>'.$regs[2][$i].'</SQL>', $this->QueryConfigSQL($regs[2][$i], $regs[1][$i]), $string);
				$i++;
			}
			$string = preg_replace('/(,){2,}/', ',', $string); // trim trailing commas inside string
		}

		return $string;
	}

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


}

?>