/** * Get alll attributes * * @return array */ public function getAllAttributes() { $result = array(); foreach (Attribute::getTypes() as $type => $name) { $class = Attribute::getAttributeValueClass($type); $result = array_merge($result, Database::getRepo($class)->findAllAttributes($this)); } return $result; }
/** * Get product modifier types * * @return array */ protected function getProductModifierTypes() { if (!isset($this->productModifierTypes)) { foreach (\XLite\Model\Attribute::getTypes() as $type => $name) { $class = \XLite\Model\Attribute::getAttributeValueClass($type); if (is_subclass_of($class, 'XLite\\Model\\AttributeValue\\Multiple')) { $modifierTypes = \XLite\Core\Database::getRepo($class)->getModifierTypesByProduct($this->getProduct()); foreach ($modifierTypes as $k => $v) { if (!isset($this->productModifierTypes[$k])) { $this->productModifierTypes[$k] = $v; } else { $this->productModifierTypes[$k] = $this->productModifierTypes[$k] || $v; } } } } } return $this->productModifierTypes; }
/** * Apply attribute values changes * * @param array $oldValues Old values * @param array $newValues New values * * @return void */ protected function applyAttributeValuesChanges(array $oldValues, array $newValues) { $diff = array(); foreach (\XLite\Model\Attribute::getTypes() as $type => $name) { $class = \XLite\Model\Attribute::getAttributeValueClass($type); $diff += $class::getDiff($oldValues[$type], $newValues[$type]); } if ($diff) { $i = 0; do { $processed = 0; foreach (\XLite\Core\Database::getRepo('XLite\\Model\\Product')->findFrame($i, static::CHUNK_LENGTH) as $product) { foreach ($diff as $attributeId => $changes) { $attribute = \XLite\Core\Database::getRepo('XLite\\Model\\Attribute')->find($attributeId); $attribute->applyChanges($product, $changes); } $processed++; } if (0 < $processed) { \XLite\Core\Database::getEM()->flush(); \XLite\Core\Database::getEM()->clear(); } $i += $processed; } while (0 < $processed); } }
/** * Get multiple attributes * * @return array */ public function getMultipleAttributes() { $result = array(); foreach (\XLite\Model\Attribute::getTypes() as $type => $name) { $class = \XLite\Model\Attribute::getAttributeValueClass($type); if (is_subclass_of($class, 'XLite\\Model\\AttributeValue\\Multiple')) { $result = array_merge($result, \XLite\Core\Database::getRepo($class)->findMultipleAttributes($this)); } } if ($result) { foreach ($result as $k => $v) { $result[$k] = $v[0]; } } return $result; }