Exemplo n.º 1
0
 public function saveProperties($data)
 {
     $form = $this->owner->formName();
     $formProperties = empty($this->propertiesFormName) ? 'Properties_' . $form . '_' . $this->owner->id : $this->propertiesFormName;
     $this->getPropertyGroups();
     if (isset($data[self::FIELD_ADD_PROPERTY_GROUP]) && isset($data[self::FIELD_ADD_PROPERTY_GROUP][$form])) {
         $groups_to_add = is_array($data[self::FIELD_ADD_PROPERTY_GROUP][$form]) ? $data[self::FIELD_ADD_PROPERTY_GROUP][$form] : [$data[self::FIELD_ADD_PROPERTY_GROUP][$form]];
         foreach ($groups_to_add as $group_id) {
             $this->addPropertyGroup($group_id, false);
         }
         $this->updatePropertyGroupsInformation(true);
     }
     if (isset($data[self::FIELD_REMOVE_PROPERTY_GROUP]) && isset($data[self::FIELD_REMOVE_PROPERTY_GROUP][$form])) {
         $this->removePropertyGroup($data[self::FIELD_REMOVE_PROPERTY_GROUP][$form]);
     }
     if (isset($data[$formProperties])) {
         $my_data = $data[$formProperties];
         if (isset($data[self::FIELD_ADD_PROPERTY])) {
             // admin clicked add property button for multiple properties
             if (!isset($my_data[$data[self::FIELD_ADD_PROPERTY]])) {
                 $my_data[$data[self::FIELD_ADD_PROPERTY]] = [];
             }
             $my_data[$data[self::FIELD_ADD_PROPERTY]][] = '';
         }
         $propertiesModels = $this->getAbstractModel()->getPropertiesModels();
         $new_values_for_abstract = [];
         foreach ($my_data as $property_key => $values) {
             if (isset($this->property_key_to_id[$property_key])) {
                 $vals = [];
                 $property_id = $this->property_key_to_id[$property_key];
                 $values = is_array($values) ? $values : [$values];
                 if (isset($propertiesModels[$property_key])) {
                     $_property = $propertiesModels[$property_key];
                     $propertyHandler = PropertyHandlers::getHandlerById($_property->property_handler_id);
                     if (null === $propertyHandler) {
                         $propertyHandler = PropertyHandlers::createHandler($_property->handler);
                     }
                     $values = $propertyHandler->processValues($_property, $formProperties, $values);
                 }
                 foreach ($values as $index => $val) {
                     $vals[] = ['value' => $val, 'property_id' => $property_id, 'sort_order' => $index];
                 }
                 $val = new PropertyValue($vals, $property_id, $this->getObject()->id, $this->owner->id, $this->getGroupIdBypropertyId($property_id));
                 $new_values_for_abstract[$property_key] = $val;
             }
         }
         $this->abstract_model->updateValues($new_values_for_abstract, $this->getObject()->id, $this->owner->id);
         $this->owner->trigger(ActiveRecord::EVENT_AFTER_UPDATE, new AfterSaveEvent(['changedAttributes' => []]));
     }
 }
 /**
  * @param Order $order
  * @param boolean $dummyObject Empty object, non saved to database
  * @return OrderDeliveryInformation|null
  * @throws \Exception
  */
 public static function createNewOrderDeliveryInformation(Order $order, $dummyObject = true)
 {
     /** @var OrderDeliveryInformation|HasProperties $model */
     $model = new static();
     $model->order_id = $order->id;
     $model->loadDefaultValues();
     $groups = PropertyGroup::getForObjectId($model->getObject()->id, true);
     $group = array_shift($groups);
     if (null !== $group) {
         $model->setPropertyGroup($group);
         $abstractModel = new AbstractModel();
         $abstractModel->setPropertiesModels(array_reduce($group->properties, function ($result, $item) {
             /** @var Property $item */
             $result[$item->key] = $item;
             return $result;
         }, []));
         $abstractModel->setAttributes(array_reduce($group->properties, function ($result, $item) use($model) {
             /** @var Property $item */
             $result[$item->key] = new PropertyValue([], $item->id, $model->getObject()->id, null);
             return $result;
         }, []));
         $abstractModel->setFormName('OrderDeliveryInformationNew');
         $model->setAbstractModel($abstractModel);
     }
     if (!$dummyObject) {
         $model->shipping_option_id = 0;
         if ($model->save()) {
             if (!empty($model->getPropertyGroup())) {
                 $model->getPropertyGroup()->appendToObjectModel($model);
             }
         } else {
             return null;
         }
     }
     return $model;
 }
Exemplo n.º 3
0
 /**
  * @param int $user_id
  * @param bool $dummyObject
  * @return Customer|null
  */
 public static function createEmptyCustomer($user_id = 0, $dummyObject = true)
 {
     $model = new static();
     $model->user_id = intval($user_id);
     $model->loadDefaultValues();
     if ($model->user_id === 0 && (int) Yii::$app->getModule('shop')->registrationGuestUserInCart === 1) {
         $model->setScenario('registerUser');
     }
     $groups = PropertyGroup::getForObjectId($model->getObject()->id, true);
     $group = array_shift($groups);
     if (null !== $group) {
         $model->setPropertyGroup($group);
         $abstractModel = new AbstractModel();
         $abstractModel->setPropertiesModels(array_reduce($group->properties, function ($result, $item) {
             /** @var Property $item */
             $result[$item->key] = $item;
             return $result;
         }, []));
         $abstractModel->setAttributes(array_reduce($group->properties, function ($result, $item) use($model) {
             /** @var Property $item */
             $result[$item->key] = new PropertyValue([], $item->id, $model->getObject()->id, null);
             return $result;
         }, []));
         $abstractModel->setFormName('CustomerNew');
         $model->setAbstractModel($abstractModel);
     }
     if (!$dummyObject) {
         $model->first_name = 'Имя';
         if ($model->save()) {
             if (!empty($model->getPropertyGroup())) {
                 $model->getPropertyGroup()->appendToObjectModel($model);
             }
         } else {
             return null;
         }
     }
     return $model;
 }