/** * Set select attribute item * * @param \XLite\Model\Repo\ARepo $repo Repository * @param \XLite\Model\Product $product Product * @param array $data Data * @param integer $id Attribute value ID * @param mixed $value Attribute value * * @return array */ protected function setAttributeValueSelectItem(\XLite\Model\Repo\ARepo $repo, \XLite\Model\Product $product, array $data, $id, $value) { $result = array(null, null, null); $attributeValue = $attributeOption = null; if ($this->getProduct() && 0 < $id && !isset($data['ignoreIds'])) { $attributeValue = $repo->find($id); if ($attributeValue) { $attributeOption = $attributeValue->getAttributeOption(); $attributeOption->setName($value); } } if (!$attributeOption) { $attributeOption = \XLite\Core\Database::getRepo('XLite\\Model\\AttributeOption')->findOneByNameAndAttribute($value, $this); } if (!$attributeOption) { $attributeOption = $this->createAttributeOption($value); } else { $attributeValue = $repo->findOneBy(array('attribute_option' => $attributeOption, 'product' => $product)); } if (!$attributeValue && 0 < $id && !isset($data['ignoreIds'])) { $attributeValue = $repo->find($id); } if ($attributeValue) { $result[0] = $attributeValue->getId(); } elseif ($attributeOption) { $attributeValue = $this->createAttributeValue($product); } if ($attributeValue) { $attributeValue->setAttributeOption($attributeOption); $attributeValue->setDefaultValue(isset($data['default'][$id])); foreach ($attributeValue::getModifiers() as $modifier => $options) { if (isset($data[$modifier]) && isset($data[$modifier][$id])) { $attributeValue->setModifier($data[$modifier][$id], $modifier); } } \XLite\Core\Database::getEM()->flush(); $result = array($attributeValue->getId(), $attributeValue, $attributeOption); } return $result; }