/', '', $potformula); //replace tags like
to _div_
$potformula = htmlspecialchars($potformula);
$potformula = preg_replace("/,/", ".", $potformula); //replace , with . in case user writes a comma instead of a dot
$pattern = '/\s*\{{1}\s*([\?@!#&)]?)\s*(.*?)\s*\}{1}\s*/';
$complete = preg_replace_callback($pattern, function ($stew) {
$potid = $this->cargo['pot'];
$all = $stew[0];
$spice = $stew[1];
$searchpotid = $stew[2];
$completeformula = '';
switch ($spice) {
case '@': // get the result of exactly one potid
$thepotid = $this->cargo[$searchpotid]['output']['result'];
if (isset($thepotid)) {
$completeformula .= "( ".$this->cargo[$searchpotid]['output']['formula']." )";
} else {
$completeformula .= " 'not set: {@$searchpotid}' ";
$this->cargo[$potid]['output']['error'] = " error:";
}
break;
case '#': //sum values with matching string in input "{# string}"
$pattern = "/.*($searchpotid).*/x";
$forkey = '';
foreach ($this->cargo as $key => $value) {
preg_match($pattern, $key, $match); //.*(gut).*
if ($key == $match[0]) {
if (isset($value['output']['result'])) {
$forkey .= " + ".$value['output']['result'];
}
}
}
$completeformula .= "( " . ltrim($forkey, '+ ') . " )";
break;
case '&': // sum results matching the pot id of the asking potid
preg_match('/^(.\*?)(\d\*?)$/', $this->cargo['pot'], $potidarr); //fetch potid of this potid
$searchval = $potidarr[1]; // only first part, no mumber
$sumarr = array();
foreach ($this->cargo as $key => $value) {
preg_match("/.*($searchval).*/", $key, $match);
if ($key == $match[0]) {
if (isset($value['output']['result'])) {
$forkey .= " + ".$value['output']['result'];
}
}
}
$completeformula .= "( " . ltrim($forkey, '+ '). " )";
break;
default:
$completeformula .= $all;
break;
}
return $completeformula;
}, $potformula);
$mdec = $this->cargo[$potid]['settings']['decimals'];
$calculated = $pothelper->_calculate($complete, $mdec);
$this->cargo[$potid]['output']['result'] = $calculated['result']; // set the var to use it global
$this->cargo[$potid]['output']['formula'] = $calculated['formula'];
$this->cargo[$potid]['output']['type'] = $calculated['type'];
if ($error != '') {
$this->cargo[$potid]['output']['error'] = $calculated['error'];
}