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; }
/** * @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; }