Inheritance: extends yii\db\ActiveRecord
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = EavAttributeValue::find();
     // add conditions that should always apply here
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     // grid filtering conditions
     $query->andFilterWhere(['id' => $this->id, 'entityId' => $this->entityId, 'attributeId' => $this->attributeId, 'optionId' => $this->optionId]);
     $query->andFilterWhere(['like', 'value', $this->value]);
     return $dataProvider;
 }
Example #2
0
 private function renderField($model, $attribute, $options)
 {
     $this->adjustLabelFor($options);
     $eavModel = EavModel::create(['entityModel' => $model, 'attribute' => $attribute, 'valueClass' => \mirocow\eav\models\EavAttributeValue::className()]);
     $handler = $eavModel->handlers[$attribute];
     $handler->owner->activeForm = $options['form'];
     unset($options['form']);
     $handler->options = $options;
     /** @var EavAttribute $attributeModel */
     $attributeModel = $handler->attributeModel;
     /** @var ActiveField $model */
     $model = $handler->run();
     $model->label($attributeModel->label);
     $model->hint($attributeModel->description);
     $this->parts = $model->parts;
     /** Add required attribute */
     if ($attributeModel->required) {
         $this->options['class'] .= ' ' . $this->form->requiredCssClass;
     }
     return $this;
 }
Example #3
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getEavAttributeValues()
 {
     return $this->hasMany(EavAttributeValue::className(), ['attributeId' => 'id']);
 }
Example #4
0
 /**
  * Finds the EavAttributeValue model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return EavAttributeValue the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = EavAttributeValue::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }
Example #5
0
 public function actionSave()
 {
     if (Yii::$app->request->isPost) {
         $post = Yii::$app->request->post();
         if ($post['payload'] && $post['entityModel']) {
             $payload = Json::decode($post['payload']);
             if (!isset($payload['fields'])) {
                 return;
             }
             $transaction = \Yii::$app->db->beginTransaction();
             try {
                 $categoryId = isset($post['categoryId']) ? $post['categoryId'] : 0;
                 $entityId = EavEntity::find()->select(['id'])->where(['entityModel' => $post['entityModel'], 'categoryId' => $categoryId])->scalar();
                 if (!$entityId) {
                     $entity = new EavEntity();
                     $entity->entityName = isset($post['entityName']) ? $post['entityName'] : 'Untitled';
                     $entity->entityModel = $post['entityModel'];
                     $entity->categoryId = $categoryId;
                     $entity->save(false);
                     $entityId = $entity->id;
                 }
                 $attributes = [];
                 foreach ($payload['fields'] as $order => $field) {
                     if (!isset($field['cid'])) {
                         continue;
                     }
                     // Attribute
                     if (isset($field['cid'])) {
                         $attribute = EavAttribute::findOne(['name' => $field['cid'], 'entityId' => $entityId]);
                     }
                     if (empty($attribute)) {
                         $attribute = new EavAttribute();
                         $lastId = EavAttribute::find()->select(['id'])->orderBy(['id' => SORT_DESC])->limit(1)->scalar() + 1;
                         $attribute->name = 'c' . $lastId;
                     }
                     $attribute->type = $field['group_name'];
                     $attribute->entityId = $entityId;
                     $attribute->typeId = EavAttributeType::find()->select(['id'])->where(['name' => $field['field_type']])->scalar();
                     $attribute->label = $field['label'];
                     $attribute->order = $order;
                     if (isset($field['field_options']['description'])) {
                         $attribute->description = $field['field_options']['description'];
                         unset($field['field_options']['description']);
                     } else {
                         $attribute->description = '';
                     }
                     $attribute->save(false);
                     $attributes[] = $attribute->id;
                     if (isset($field['field_options']['options'])) {
                         $options = [];
                         foreach ($field['field_options']['options'] as $k => $o) {
                             $option = EavAttributeOption::find()->where(['attributeId' => $attribute->id, 'value' => $o['label']])->one();
                             if (!$option) {
                                 $option = new EavAttributeOption();
                             }
                             $option->attributeId = $attribute->id;
                             $option->value = $o['label'];
                             $option->defaultOptionId = (int) $o['checked'];
                             $option->order = $k;
                             $option->save();
                             $options[] = $option->value;
                         }
                         EavAttributeOption::deleteAll(['and', ['attributeId' => $attribute->id], ['NOT', ['IN', 'value', $options]]]);
                         unset($field['field_options']['options']);
                     }
                     // Rule
                     $rule = EavAttributeRule::find()->where(['attributeId' => $attribute->id])->one();
                     if (!$rule) {
                         $rule = new EavAttributeRule();
                     }
                     $rule->attributeId = $attribute->id;
                     if (!empty($field['field_options'])) {
                         foreach ($field['field_options'] as $key => $param) {
                             $rule->{$key} = $param;
                         }
                     }
                     $rule->required = isset($field['field_options']['required']) ? (int) $field['field_options']['required'] : 0;
                     $rule->visible = isset($field['field_options']['visible']) ? (int) $field['field_options']['visible'] : 0;
                     $rule->locked = isset($field['field_options']['locked']) ? (int) $field['field_options']['locked'] : 0;
                     $rule->save();
                 }
                 $attrArray = EavAttribute::find()->select('id')->where(['AND', ['NOT IN', 'id', $attributes], ['IN', 'entityId', $entityId]])->asArray()->all();
                 if (!is_null($attrArray)) {
                     EavAttribute::deleteAll(['IN', 'id', $attrArray]);
                     EavAttributeValue::deleteAll(['IN', 'attributeId', $attrArray]);
                     EavAttributeOption::deleteAll(['IN', 'attributeId', $attrArray]);
                     EavAttributeRule::deleteAll(['IN', 'attributeId', $attrArray]);
                 }
                 $transaction->commit();
             } catch (\Exception $e) {
                 $transaction->rollBack();
                 throw $e;
             }
         }
     }
 }