ParseConfigSQL($values_list, $separator, $parse), $separator); if (!$values_list) { // no options, then return empty array return Array(); } $optionValuesTmp = explode($separator, $values_list); $optionValues = Array(); if (substr_count($values_list, '=') != count($optionValuesTmp)) { if ( $this->Application->isDebugMode() ) { $this->Application->Debugger->appendTrace(); } trigger_error('Invalid symbol in ValueList field [' . substr($values_list, 0, 100) . ' ...]' , E_USER_WARNING); return Array (); } 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); if (substr($key, 0, 3) == 'SQL') { $val = base64_decode( str_replace('_', '=', substr($val, 1)) ); } $optionValues[$key] = $val; } } return $optionValues; } /** * Replace SQLs in valueList with appropriate queried values * * @param string $valueString * @param string $separator * @param bool $parse_sqls * @return string * @access public * @todo Apply refactoring to embedded vars stuff */ public function ParseConfigSQL($valueString, $separator = VALUE_LIST_SEPARATOR, $parse_sqls = true) { if ($parse_sqls) { $string = trim( str_replace(Array('', '%3$s'), Array (TABLE_PREFIX, $this->Application->GetVar('m_lang')), $valueString) ); } else { $string = $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); } $string = str_replace(''.$regs[2][$i].'', $replacement, $string); $i++; } $string = preg_replace('/[' . preg_quote($separator, '/') . ']+/', $separator, $string); // trim trailing separators inside 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']; } return implode($separator, $values); } }