Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Thu, Feb 6, 4:47 AM

in-portal

Index: branches/RC/core/units/general/custom_fields.php
===================================================================
--- branches/RC/core/units/general/custom_fields.php (revision 10608)
+++ branches/RC/core/units/general/custom_fields.php (revision 10609)
@@ -1,93 +1,99 @@
<?php
/**
* Enter description here...
*
* @todo rewrite
*/
class InpCustomFieldsHelper extends kHelper {
function GetValuesHash($values_list)
{
- $optionValuesStr = trim($this->ParseConfigSQL($values_list), ',');
+ $optionValuesStr = trim($this->ParseConfigSQL($values_list), ',');
if (!$optionValuesStr) {
// no options, then return empty array
return Array();
}
-
+
$optionValuesTmp = explode(',', $optionValuesStr);
$optionValues = Array();
+
+ if (substr_count($optionValuesStr, '=') != count($optionValuesTmp)) {
+ trigger_error('Invalid symbol in ValueList field [' . substr($optionValuesStr, 0, 100) . ' ...]' , E_USER_NOTICE);
+ return 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(Array('<PREFIX>', '%3$s'), Array (TABLE_PREFIX, $this->Application->GetVar('m_lang')), $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);
}
}
?>
\ No newline at end of file
Property changes on: branches/RC/core/units/general/custom_fields.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.9
\ No newline at end of property
+1.9.2.1
\ No newline at end of property

Event Timeline