示例#1
0
 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]);
 }