Пример #1
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * 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);
     }
 }
Пример #4
0
 /**
  * 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;
 }