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' => []]));
     }
 }