/** * @param null $property_id * @param null $handler_action * @param null $model_id * @return mixed */ public function run($property_id = null, $handler_action = null, $model_id = null) { if (null === $handler_action || null === $property_id || null === $model_id) { return ''; } $property = Property::findById($property_id); if (null === $property) { return ''; } $actionParams = ['model_name' => $this->modelName, 'model_id' => $model_id, 'object_id' => $this->objectId, 'property' => $property]; $propertyHandler = PropertyHandlers::createHandler($property->handler); return $propertyHandler->runAction($handler_action, $actionParams); }
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' => []])); } }
public function actionEditProperty($property_group_id, $id = null) { if ($id === null) { $model = new Property(); $model->handler_additional_params = '[]'; } else { $model = Property::findById($id); } $object = Object::getForClass(Property::className()); $model->property_group_id = $property_group_id; if ($model->load(\Yii::$app->request->post()) && $model->validate()) { $propertyHandler = PropertyHandlers::createHandler($model->handler); if (!$propertyHandler->changePropertyType($model)) { if ($model->is_column_type_stored) { if ($model->isNewRecord) { $object = Object::findById($model->group->object_id); Yii::$app->db->createCommand()->addColumn($object->column_properties_table_name, $model->key, "TINYTEXT")->execute(); if ($object->object_class == Form::className()) { $submissionObject = Object::getForClass(Submission::className()); $col_type = $this->getColumnType($model->value_type); Yii::$app->db->createCommand()->addColumn($submissionObject->column_properties_table_name, $model->key, $col_type)->execute(); } } else { if ($model->key != $model->getOldAttribute('key')) { $object = Object::findById($model->group->object_id); Yii::$app->db->createCommand()->renameColumn($object->column_properties_table_name, $model->getOldAttribute('key'), $model->key)->execute(); if ($object->object_class == Form::className()) { $submissionObject = Object::getForClass(Submission::className()); Yii::$app->db->createCommand()->renameColumn($submissionObject->column_properties_table_name, $model->getOldAttribute('key'), $model->key)->execute(); } } if ($model->value_type != $model->getOldAttribute('value_type')) { $object = Object::findById($model->group->object_id); $new_type = $this->getColumnType($model->value_type); Yii::$app->db->createCommand()->alterColumn($object->column_properties_table_name, $model->getOldAttribute('key'), $new_type)->execute(); if ($object->object_class == Form::className()) { $submissionObject = Object::getForClass(Submission::className()); Yii::$app->db->createCommand()->renameColumn($submissionObject->column_properties_table_name, $model->getOldAttribute('key'), $new_type)->execute(); } } } } } $save_result = $model->save(); if ($save_result) { $this->runAction('save-info'); Yii::$app->session->setFlash('success', Yii::t('app', 'Record has been saved')); $returnUrl = Yii::$app->request->get('returnUrl', ['/backend/properties/group', 'id' => $property_group_id]); switch (Yii::$app->request->post('action', 'save')) { case 'next': return $this->redirect(['/backend/properties/edit-property', 'property_group_id' => $property_group_id, 'returnUrl' => $returnUrl]); case 'back': return $this->redirect($returnUrl); default: return $this->redirect(Url::toRoute(['/backend/properties/edit-property', 'id' => $model->id, 'property_group_id' => $model->property_group_id, 'returnUrl' => $returnUrl])); } } else { Yii::$app->session->setFlash('error', Yii::t('app', 'Cannot save data')); } } $searchModel = new PropertyStaticValues(); $searchModel->property_id = $model->id; $dataProvider = $searchModel->search($_GET); return $this->render('edit-property', ['model' => $model, 'dataProvider' => $dataProvider, 'searchModel' => $searchModel, 'fieldinterpretParentId' => 0, 'object' => $object]); }
/** * @param $form * @param $model * @param $values * @param string $renderType * @return string */ public function handler($form, $model, $values, $renderType = 'frontend_render_view') { $handler = $this->handler; if (null === $handler) { return ''; } $handler = PropertyHandlers::createHandler($handler); if (null === $handler) { return ''; } return $handler->render($this, $model, $values, $form, $renderType); }