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