/** * Parse Services * * @param string $className * @param array $pluginSettings Plugin Settings * @param \Extcode\Cart\Domain\Model\Cart\Cart $cart * * @return array */ public function parseServices($className, array $pluginSettings, \Extcode\Cart\Domain\Model\Cart\Cart $cart) { $services = []; $type = strtolower($className) . 's'; if ($pluginSettings[$type]['options']) { foreach ($pluginSettings[$type]['options'] as $key => $value) { $class = '\\Extcode\\Cart\\Domain\\Model\\Cart\\' . $className; /** * Service * @var \Extcode\Cart\Domain\Model\Cart\Service $service */ $service = new $class($key, $value['title'], $cart->getTaxClass($value['taxClassId']), $value['status'], $value['note'], $cart->getIsNetCart()); if ($className == 'Payment') { if ($value['provider']) { $service->setProvider($value['provider']); } } if (is_array($value['extra'])) { $service->setExtraType($value['extra']['_typoScriptNodeValue']); unset($value['extra']['_typoScriptNodeValue']); foreach ($value['extra'] as $extraKey => $extraValue) { $extra = new \Extcode\Cart\Domain\Model\Cart\Extra($extraKey, $extraValue['value'], $extraValue['extra'], $cart->getTaxClass($value['taxClassId']), $cart->getIsNetCart()); $service->addExtra($extra); } } elseif (!floatval($value['extra'])) { $service->setExtraType($value['extra']); $extra = new \Extcode\Cart\Domain\Model\Cart\Extra(0, 0, 0, $cart->getTaxClass($value['taxClassId']), $cart->getIsNetCart()); $service->addExtra($extra); } else { $service->setExtraType('simple'); $extra = new \Extcode\Cart\Domain\Model\Cart\Extra(0, 0, $value['extra'], $cart->getTaxClass($value['taxClassId']), $cart->getIsNetCart()); $service->addExtra($extra); } if ($value['free']) { $service->setFreeFrom($value['free']['from']); $service->setFreeUntil($value['free']['until']); } if ($value['available']) { $service->setAvailableFrom($value['available']['from']); $service->setAvailableUntil($value['available']['until']); if ($value['available']['fallBackId']) { $service->setFallBackId($value['available']['fallBackId']); } } if ($pluginSettings[$type]['preset'] == $key) { $service->setIsPreset(true); } $additional = []; if ($value['additional.']) { foreach ($value['additional'] as $additionalKey => $additionalValue) { if ($additionalValue['value']) { $additional[$additionalKey] = $additionalValue['value']; } } } $service->setAdditionalArray($additional); $service->setCart($cart); $services[$key] = $service; } } return $services; }