/** * {@inheritDoc} */ public function setConfiguratorOptions($configuratorOptions) { $this->__initializer__ && $this->__initializer__->__invoke($this, 'setConfiguratorOptions', array($configuratorOptions)); return parent::setConfiguratorOptions($configuratorOptions); }
/** * Resolves the passed configuratorOptions parameter for a single variant. * Each passed configurator option, has to be configured in the article configurator set. * * @param array $data * @param ArticleModel $article * @param Detail $variant * @return \Doctrine\Common\Collections\Collection * @throws \Shopware\Components\Api\Exception\CustomValidationException */ protected function prepareConfigurator(array $data, ArticleModel $article, Detail $variant) { if (!$article->getConfiguratorSet()) { throw new ApiException\CustomValidationException('A configurator set has to be defined'); } $availableGroups = $article->getConfiguratorSet()->getGroups(); $options = new ArrayCollection(); foreach ($data['configuratorOptions'] as $optionData) { $availableGroup = $this->getAvailableGroup($availableGroups, array('id' => $optionData['groupId'], 'name' => $optionData['group'])); //group is in the article configurator set configured? if (!$availableGroup) { continue; } //check if the option is available in the configured article configurator set. $option = $this->getAvailableOption($availableGroup->getOptions(), array('id' => $optionData['optionId'], 'name' => $optionData['option'])); if (!$option) { if (!$optionData['option']) { throw new ApiException\CustomValidationException('A new configurator option requires a name'); } $option = new Option(); $option->setPosition(0); $option->setName($optionData['option']); $option->setGroup($availableGroup); $this->getManager()->persist($option); } $options->add($option); } $data['configuratorOptions'] = $options; $variant->setConfiguratorOptions($options); return $data; }