Example #1
0
 /**
  * @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);
 }
Example #2
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' => []]));
     }
 }
Example #3
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]);
 }
Example #4
0
 /**
  * @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);
 }