engine = $engine; $this->article = $article; $this->formelCalc = new Formel($engine, $article); } public function calc() { $price = 0; /** @var Base $option */ foreach($this->article->getOptions() as $option) { if($option instanceof Select) { /** @var Select\Opt $opt */ foreach($option->getOptions() as $opt) { if($opt->isValid() && $opt->isSelected()) { $price = $this->parseEdgeCollection($price, $option->getId(), $opt->getEdgesCollectionContainer()); } } } $this->parseEdgeCollection($price, $option->getId(), $option->getEdgesCollectionContainer()); } return $price; } /** * @param $price * @param id * @param EdgeCollectionContainer $container * @return int */ private function parseEdgeCollection($price, $id, EdgeCollectionContainer $container, $isSub = false) { $calcValue1 = 0; $calcValue2 = 0; $calcValueAccount1 = 0; $calcValueAccount2 = 0; eval($this->engine->getParameters()); eval($this->engine->getFormulas()); /** @var EdgeCollection $collection */ foreach($container as $collection) { if($collection->getName() == "opt") continue; if($collection->getFormel() != "") { $formel = $this->formelCalc->parse($collection->getFormel()); if(preg_match("/^[a-z](.*)/", $formel)) { eval('$var = "' . $formel . '";'); }else{ eval('$var = ' . $formel . ';'); } }else{ if(!isset($this->engine->getVariables()[$collection->getName()])) { $var = 'XXXXXXXX'; }else{ $var = $this->engine->getVariables()[$collection->getName()]; } } /** @var Edge $edge */ foreach($collection as $edge) { if($edge->isValid($var)) { if($edge->getCalcValue() != "") { $cv = $this->formelCalc->parse($edge->getCalcValue()); eval('$cv = ' . $cv . ';'); //echo $id . ' '. $this->formelCalc->parse($edge->getCalcValue()) . ' ' . $cv . ' '. PHP_EOL.PHP_EOL; $this->engine->addCalcVariable($id, $cv); $this->engine->addCalcVariable($id . '_' . $collection->getName(), $cv); } if($edge->getEdgesCollectionContainer()->count() > 0) { $this->parseEdgeCollection($price, $id . '_' . $collection->getName(), $edge->getEdgesCollectionContainer(), true); } } } } return $price; } }