/** * Delete relations * @return bool */ public function cleanUpRelations() { if (!is_subclass_of($this->owner, '\\yii\\db\\ActiveRecord')) { return false; } if (isset($this->owner->is_deleted) && 0 === intval($this->owner->is_deleted)) { return false; } if (null === ($object = Object::getForClass($this->owner->className()))) { return false; } $whereDelete = ['object_id' => $object->id, 'object_model_id' => $this->owner->id]; ObjectPropertyGroup::deleteAll($whereDelete); ObjectStaticValues::deleteAll($whereDelete); Image::deleteAll($whereDelete); ViewObject::deleteAll($whereDelete); try { Yii::$app->db->createCommand()->delete($object->categories_table_name, ['object_model_id' => $this->owner->id])->execute(); Yii::$app->db->createCommand()->delete($object->column_properties_table_name, ['object_model_id' => $this->owner->id])->execute(); Yii::$app->db->createCommand()->delete($object->eav_table_name, ['object_model_id' => $this->owner->id])->execute(); } catch (Exception $e) { // do nothing } return true; }
public function actionClearDeleted() { $time = new \DateTime(); $days = Yii::$app->getModule('core')->daysToStoreSubmissions; $time->sub(new \DateInterval("P{$days}D")); /** @var Object $object */ $object = Object::getForClass(Submission::className()); if ($object !== null) { $submissionIds = Submission::find()->select(['id'])->where('UNIX_TIMESTAMP(`date_received`) < ' . $time->getTimestamp() . ' AND `is_deleted` = \'1\'')->column(); Review::deleteAll(['submission_id' => $submissionIds]); Yii::$app->db->createCommand()->delete($object->column_properties_table_name, ['object_model_id' => $submissionIds]); Yii::$app->db->createCommand()->delete($object->eav_table_name, ['object_model_id' => $submissionIds]); Yii::$app->db->createCommand()->delete($object->categories_table_name, ['object_model_id' => $submissionIds]); ObjectStaticValues::deleteAll(['object_id' => $object->id, 'object_model_id' => $submissionIds]); Submission::deleteAll(['id' => $submissionIds]); } }
public function updateValues($new_values, $object_id, $object_model_id) { $column_type_updates = ['object_model_id' => $object_model_id]; $osv_psv_ids = []; $new_eav_values = []; $eav_ids_to_delete = []; foreach ($new_values as $key => $values) { $property = Property::findById($values->property_id); if ($property->captcha == 1) { continue; } if (!isset($this->values_by_property_key[$key])) { // нужно добавить if ($property->is_column_type_stored) { $column_type_updates[$key] = (string) $values; } elseif ($property->has_static_values) { foreach ($values->values as $val) { $osv_psv_ids[] = $val['value']; } } elseif ($property->is_eav) { $new_eav_values[$key] = $values; } } else { if ($property->is_column_type_stored) { $column_type_updates[$key] = (string) $values; } elseif ($property->has_static_values) { foreach ($values->values as $val) { $osv_psv_ids[] = $val['value']; } } elseif ($property->is_eav) { // добавим новые foreach ($values->values as $val) { $exist_in_old = false; foreach ($this->values_by_property_key[$key]->values as $old_val) { if ($old_val['value'] == $val['value']) { $exist_in_old = true; break; } } if ($exist_in_old == false) { $new_eav_values[] = [$object_model_id, $values->property_group_id, $key, $val['value'], 0]; } } // теперь добавим на удаление foreach ($this->values_by_property_key[$key]->values as $old_val) { $exist_in_new = false; foreach ($values->values as $new_val) { if ($old_val['value'] == $new_val['value']) { $exist_in_new = true; break; } } if ($exist_in_new == false) { // @todo find why sometimes it isn't exist if (isset($old_val['eav_id'])) { $eav_ids_to_delete[] = $old_val['eav_id']; } } } } } } $osv_psv_ids_to_delete = []; foreach ($this->values_by_property_key as $key => $values) { $property = Property::findById($values->property_id); if (in_array($key, array_keys($new_values)) === false) { // if in incoming array there was no specification for this property - skip it continue; } if ($property->has_static_values) { foreach ($values->values as $val) { if (in_array($val['psv_id'], $osv_psv_ids) === false) { // в новых значениях нет $osv_psv_ids_to_delete[] = $val['psv_id']; } else { // удалим, чтобы заново не добавлять unset($osv_psv_ids[array_search($val['psv_id'], $osv_psv_ids)]); } } } } if (count($osv_psv_ids_to_delete) > 0) { ObjectStaticValues::deleteAll(['and', '`object_id` = :objectId', ['and', '`object_model_id` = :objectModelId', ['in', '`property_static_value_id`', $osv_psv_ids_to_delete]]], [':objectId' => $object_id, ':objectModelId' => $object_model_id]); } if (count($osv_psv_ids) > 0) { $rows = []; foreach ($osv_psv_ids as $psv_id) { // 0 - Not Selected Field. Такие значения в базу не сохраняем if ($psv_id == 0) { continue; } $rows[] = [$object_id, $object_model_id, $psv_id]; } if (!empty($rows)) { Yii::$app->db->createCommand()->batchInsert(ObjectStaticValues::tableName(), ['object_id', 'object_model_id', 'property_static_value_id'], $rows)->execute(); } } Yii::$app->cache->delete("PSV:" . $object_id . ":" . $object_model_id); if (count($column_type_updates) > 1) { $table_name = Object::findById($object_id)->column_properties_table_name; $exists = Yii::$app->db->createCommand('select object_model_id from ' . $table_name . ' where object_model_id=:object_model_id')->bindValue(':object_model_id', $object_model_id)->queryScalar(); if ($exists) { Yii::$app->db->createCommand()->update($table_name, $column_type_updates, 'object_model_id = :object_model_id', [':object_model_id' => $object_model_id])->execute(); } else { Yii::$app->db->createCommand()->insert($table_name, $column_type_updates)->execute(); } } if (count($new_eav_values) > 0) { $table_name = Object::findById($object_id)->eav_table_name; Yii::$app->db->createCommand()->batchInsert($table_name, ['object_model_id', 'property_group_id', 'key', 'value', 'sort_order'], $new_eav_values)->execute(); } if (count($eav_ids_to_delete) > 0) { $table_name = Object::findById($object_id)->eav_table_name; Yii::$app->db->createCommand()->delete($table_name, ['in', 'id', $eav_ids_to_delete])->execute(); } Yii::$app->cache->delete("TIR:" . $object_id . ':' . $object_model_id); $this->values_by_property_key = $new_values; }
public function afterDelete() { ObjectStaticValues::deleteAll(['property_static_value_id' => $this->id]); parent::afterDelete(); }
public function actionAddStaticValue($key, $value, $returnUrl, $objectId = null, $objectModelId = null) { $model = new PropertyStaticValues(); /** @var Property $property */ $property = Property::findOne(['key' => $key]); if (is_null($property)) { throw new NotFoundHttpException(); } $model->property_id = $property->id; if (Yii::$app->request->isPost) { if ($model->load(Yii::$app->request->post()) && $model->save()) { $tags = [ActiveRecordHelper::getCommonTag(Property::className()), ActiveRecordHelper::getObjectTag(Property::className(), $property->id), ActiveRecordHelper::getCommonTag(PropertyGroup::className()), ActiveRecordHelper::getObjectTag(PropertyGroup::className(), $property->property_group_id)]; if (!is_null($objectId) && !is_null($objectModelId)) { if ($property->multiple == 0) { $propertyStaticValueIds = PropertyStaticValues::find()->select('id')->where(['property_id' => $property->id])->column(); ObjectStaticValues::deleteAll(['object_id' => $objectId, 'object_model_id' => $objectModelId, 'property_static_value_id' => $propertyStaticValueIds]); } $objectStaticValues = new ObjectStaticValues(); $objectStaticValues->attributes = ['object_id' => $objectId, 'object_model_id' => $objectModelId, 'property_static_value_id' => $model->id]; $objectStaticValues->save(); $tags[] = ActiveRecordHelper::getCommonTag(Object::findById($objectId)->object_class); $tags[] = ActiveRecordHelper::getObjectTag(Object::findById($objectId)->object_class, $objectModelId); } TagDependency::invalidate(Yii::$app->cache, $tags); return $this->redirect($returnUrl); } } elseif ($value !== "") { $model->name = $value; $model->value = $value; $model->slug = Helper::createSlug($value); $model->sort_order = 0; } return $this->renderAjax('ajax-static-value', ['model' => $model]); }