/** * @param ArticleWriterResult $articleWriterResult * @param array $configuratorData * @throws AdapterException */ public function writeOrUpdateConfiguratorSet(ArticleWriterResult $articleWriterResult, $configuratorData) { $configuratorSetId = null; foreach ($configuratorData as $configurator) { if (!$this->isValid($configurator)) { continue; } $configurator = $this->configuratorValidator->filterEmptyString($configurator); $this->configuratorValidator->validate($configurator, ConfiguratorValidator::$mapper); /** * Updates the type of a configurator set */ $configuratorSetId = $this->updateConfiguratorSetTypeIfConfigSetIdIsNotEmptyAndSetDoesExistAndMatchSetName($articleWriterResult->getArticleId(), $configuratorSetId, $configurator); if (!$configuratorSetId) { $configuratorSetId = $this->getConfiguratorSetIdByArticleId($articleWriterResult->getArticleId()); } if (!$configuratorSetId) { if (empty($configurator['configSetName'])) { $orderNumber = $this->getOrderNumber($articleWriterResult->getArticleId()); $dataSet['name'] = 'Set-' . $orderNumber; } else { $dataSet['name'] = $configurator['configSetName']; } $dataSet['public'] = false; $dataSet['id'] = $configurator['configSetId']; if ($configurator['configSetType']) { $dataSet['type'] = $configurator['configSetType']; } if (array_key_exists($dataSet['name'], $this->sets)) { $configuratorSetId = $this->sets[$dataSet['name']]; } else { $configuratorSetId = $this->createSet($dataSet); $this->sets[$dataSet['name']] = $configuratorSetId; } } if ($articleWriterResult->getMainDetailId() != $articleWriterResult->getDetailId()) { $this->updateArticleSetsRelation($articleWriterResult->getArticleId(), $configuratorSetId); } /** * configurator option */ if (isset($configurator['configOptionId']) && !empty($configurator['configOptionId'])) { $optionResult = $this->getOptionRow($configurator['configOptionId']); $optionId = $optionResult['id']; $groupId = $optionResult['group_id']; if (!$optionId) { $message = SnippetsHelper::getNamespace()->get('adapters/articles/config_option_not_found', 'ConfiguratorOption with id %s not found'); throw new AdapterException(sprintf($message, $configurator['configOptionId'])); } } else { //gets or creates configurator group $groupId = $this->getConfiguratorGroup($configurator); } $this->updateGroupsRelation($configuratorSetId, $groupId); if (isset($configurator['configOptionName']) && !$optionId) { $optionId = $this->getOptionIdByOptionNameAndGroupId($configurator['configOptionName'], $groupId); } //creates option if (!$optionId) { if (isset($configurator['configOptionPosition']) && !empty($configurator['configOptionPosition'])) { $position = $configurator['configOptionPosition']; } else { $position = $this->getNextOptionPosition($groupId); } $dataOption = array('groupId' => $groupId, 'name' => $configurator['configOptionName'], 'position' => $position); $optionId = $this->createOption($dataOption); } $this->updateOptionRelation($articleWriterResult->getDetailId(), $optionId); $this->updateSetOptionRelation($configuratorSetId, $optionId); unset($groupId); unset($optionId); } }
/** * @param array $records * @param int $index * @param ArticleWriterResult $articleWriterResult * @return array */ private function filterPropertyValues($records, $index, ArticleWriterResult $articleWriterResult) { return array_filter($records['propertyValue'], function ($property) use($index, $articleWriterResult) { return $property['parentIndexElement'] == $index && $articleWriterResult->getMainDetailId() == $articleWriterResult->getDetailId(); }); }