public function getData() { $objectClass = Object::findById($this->objectId)->object_class; $object = new $objectClass(); $this->data = $object->attributeLabels(); return parent::getData(); }
public function actionExport($importModel) { /** @var ImportModel $model */ $model = new ImportModel(); $model->unserialize($importModel); if ($model->validate()) { /** @var Export $exportStatus */ $exportStatus = Export::find()->where(['user_id' => $model->getUser(), 'object_id' => $model->object])->one(); $exportStatus->status = Export::STATUS_PROCESS; $exportStatus->save(); try { $object = Object::findById($model->object); if ($object === null) { throw new Exception('Object not found'); } $filename = $model->getFilename('Export'); $import = \app\modules\data\components\Import::createInstance(['object' => $object, 'filename' => $filename, 'type' => $model->type]); $import->processExport($model->fields, $model->conditions); $exportStatus->filename = $filename; $exportStatus->status = Export::STATUS_COMPLETE; $exportStatus->save(); } catch (\Exception $e) { $exportStatus->status = Export::STATUS_FAILED; $exportStatus->save(); echo $e->getMessage(); throw $e; } } else { echo 'Model is not valid'; throw new Exception('Model is not valid'); } }
protected function getLinks() { if (!is_null($this->frontendLink) || !is_null($this->backendLink)) { return true; } /** @var Image $image */ $image = Image::findById($this->img_id); if (is_null($image) || is_null($object = Object::findById($image->object_id))) { return false; } /** @var \app\models\Object $object */ switch ($object->object_class) { case Page::className(): $this->getPageLinks($image->object_model_id); break; case Category::className(): $this->getCategoryLinks($image->object_model_id); break; case Product::className(): $this->getProductLinks($image->object_model_id); break; default: return false; } return true; }
/** * Unified action for import and export * @param $id * @param $importMode * @return string|\yii\web\Response * @throws ErrorException */ private function unifiedAction($id, $importMode) { $object = Object::findById($id); /* @var $className \app\modules\data\models\Import */ $className = $importMode ? 'app\\modules\\data\\models\\Import' : 'app\\modules\\data\\models\\Export'; if ($object !== null) { $model = new ImportModel(['object' => $id]); $fields = \app\modules\data\components\Import::getFields($model->object); if (\Yii::$app->request->isPost) { if ($model->load(\Yii::$app->request->post()) && $model->validate()) { $import = $className::find()->where(['user_id' => Yii::$app->user->id, 'object_id' => $id])->one(); if ($import === null) { $import = new $className(['user_id' => Yii::$app->user->id, 'object_id' => $id]); } $import->filename = null; if ($importMode === true) { $file = UploadedFile::getInstance($model, 'file'); $model->type = $file->extension; $filename = $model->getFilename('Import'); $import->filename = $filename; $fullFilename = Yii::$app->getModule('data')->importDir . '/' . $filename; if ($file->saveAs($fullFilename) === false) { throw new ErrorException("Unable to save file"); } } $import->status = $className::STATUS_PROCESS; $task_options = Yii::$app->request->post('Task', []); if ($import->save()) { BackgroundTasks::addTask(['name' => $importMode ? 'import' : 'export', 'description' => ($importMode ? 'import' : 'export') . " {$model->object}", 'action' => 'data/file/' . ($importMode ? 'import' : 'export'), 'params' => $model->serialize(), 'init_event' => $importMode ? 'import' : 'export'], ['create_notification' => isset($task_options['create_notification']) && 1 == $task_options['create_notification'] ? true : false]); \Yii::$app->session->setFlash('info', \Yii::t('app', 'Task is queued. Come back later.')); } else { \Yii::$app->session->setFlash('error', \Yii::t('app', 'Import Error')); } return $this->redirect(['/data/file']); } } $availablePropertyGroups = []; /** @var \app\modules\shop\models\Product $exampleModel - product for example */ $exampleModel = new $object->object_class(); if ($exampleModel->hasMethod('getPropertyGroups')) { $availablePropertyGroups = $exampleModel->getPropertyGroups(false, true); } \Yii::$app->session->setFlash('info', \Yii::t('app', 'Specify fields to import and select the file')); $fields['additionalFields'] = []; if ($exampleModel instanceof ExportableInterface) { $fields['additionalFields'] = $exampleModel::exportableAdditionalFields(); } if ($model->type === null) { $model->type = Yii::$app->modules['data']->defaultType; } return $this->render('import-export', ['model' => $model, 'object' => $object, 'fields' => $fields, 'availablePropertyGroups' => $availablePropertyGroups, 'importMode' => $importMode]); } else { \Yii::$app->session->setFlash('error', \Yii::t('app', 'Object not found')); return $this->redirect(['/data/file']); } }
/** * Get images by objectId and objectModelId * @param integer $objectId * @param integer $objectModelId * @return Image[] */ public static function getForModel($objectId, $objectModelId) { if (!isset(self::$identityMap[$objectId][$objectModelId])) { $cacheName = 'Images:' . $objectId . ':' . $objectModelId; self::$identityMap[$objectId][$objectModelId] = Yii::$app->cache->get($cacheName); if (!is_array(self::$identityMap[$objectId][$objectModelId])) { if (!isset(self::$identityMap[$objectId])) { self::$identityMap[$objectId] = []; } self::$identityMap[$objectId][$objectModelId] = static::find()->where(['object_id' => $objectId, 'object_model_id' => $objectModelId])->orderBy(['sort_order' => SORT_ASC, 'id' => SORT_ASC])->all(); $object = Object::findById($objectId); if (is_null($object)) { return self::$identityMap[$objectId][$objectModelId]; } Yii::$app->cache->set($cacheName, self::$identityMap[$objectId][$objectModelId], 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($object->object_class, $objectModelId)]])); } } return self::$identityMap[$objectId][$objectModelId]; }
/** * @param string $class_name * @return null|\app\models\Object */ public static function getForClass($class_name) { if (isset(static::$ids_for_class_name[$class_name])) { $id = static::$ids_for_class_name[$class_name]; return Object::findById($id); } else { $object = Yii::$app->cache->get('ObjectByClassName: ' . $class_name); if ($object === false) { $object = Object::find()->where(['object_class' => $class_name])->one(); if ($object !== null) { Yii::$app->cache->set('ObjectByClassName: ' . $class_name, $object, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($object, $object->id)]])); } } if (is_object($object)) { static::$identity_map[$object->id] = $object; static::$ids_for_class_name[$class_name] = $object->id; return static::$identity_map[$object->id]; } } return null; }
public function afterDelete() { $object = Object::findById($this->group->object_id); $staticValues = PropertyStaticValues::find()->where(['property_id' => $this->id])->all(); foreach ($staticValues as $psv) { $psv->delete(); } if (null !== $object) { if ($this->is_eav) { Yii::$app->db->createCommand()->delete($object->eav_table_name, ['key' => $this->key, 'property_group_id' => $this->group->id])->execute(); } if ($this->is_column_type_stored) { Yii::$app->db->createCommand()->dropColumn($object->column_properties_table_name, $this->key)->execute(); // if ($object->object_class == Form::className()) { // $submissionObject = Object::getForClass(Submission::className()); // Yii::$app->db->createCommand() // ->dropColumn($submissionObject->column_properties_table_name, $this->key) // ->execute(); // } } } FilterSets::deleteAll(['property_id' => $this->id]); parent::afterDelete(); }
public function parseRequest($manager, $request) { Yii::beginProfile("ObjectRule::parseRequest"); $url = $request->getPathInfo(); if (empty($url)) { Yii::endProfile("ObjectRule::parseRequest"); return false; } $cacheKey = 'ObjectRule:' . $url . ':' . Json::encode($request->getQueryParams()); $result = Yii::$app->cache->get($cacheKey); if ($result !== false) { Yii::endProfile("ObjectRule::parseRequest"); $this->defineBlocksTitleAndView($result); return $result['result']; } $prefilteredPage = PrefilteredPages::getActiveByUrl($url); if ($prefilteredPage !== null) { $params = ['properties' => Json::decode($prefilteredPage['params'])]; $category = Category::findById($prefilteredPage['last_category_id']); if ($category === null) { throw new NotFoundHttpException(); } $params['category_group_id'] = $category->category_group_id; $params['last_category_id'] = $category->id; $data = ['blocks' => []]; if (!empty($prefilteredPage['title'])) { $data['title'] = $prefilteredPage['title']; } if (!empty($prefilteredPage['meta_description'])) { $data['meta_description'] = $prefilteredPage['meta_description']; } $blocks = ['content', 'announce', 'breadcrumbs_label', 'h1']; foreach ($blocks as $block_name) { if (!empty($prefilteredPage[$block_name])) { $data['blocks'][$block_name] = $prefilteredPage[$block_name]; } } $data['is_prefiltered_page'] = true; if ($prefilteredPage['view_id'] > 0) { $data['viewId'] = $prefilteredPage['view_id']; } $data['result'] = ['shop/product/list', $params]; $this->defineBlocksTitleAndView($data); Yii::$app->cache->set($cacheKey, $data, 86400, new TagDependency(['tags' => [ActiveRecordHelper::getObjectTag(PrefilteredPages::className(), $prefilteredPage['id']), ActiveRecordHelper::getObjectTag(Category::className(), $category->id)]])); return $data['result']; } $routes = ObjectRule::getRoutes(); $cacheTags = []; foreach ($routes as $model) { /** @var UrlPart[] $handlers */ $handlers = []; $object = Object::findById($model->object_id); foreach ($model->template as $t) { $handler = Yii::createObject($t); $handler->object = $object; $handlers[] = $handler; } $url_parts = []; $parameters = []; $next_part = $url; foreach ($handlers as $handler) { if (empty($next_part)) { //break; } $result = $handler->getNextPart($url, $next_part, $url_parts); if ($result !== false && is_object($result) === true) { $parameters = ArrayHelper::merge($parameters, $result->parameters); $cacheTags = ArrayHelper::merge($cacheTags, $result->cacheTags); // удалим leading slash $next_part = ltrim($result->rest_part, '/'); $url_parts[] = $result; } elseif ($result === false && $handler->optional === false) { continue; } } if (count($url_parts) == 0) { continue; } // в конце удачного парсинга next_part должен остаться пустым if (empty($next_part)) { $resultForCache = ['result' => [$model->route, $parameters]]; if (isset($_POST['properties'], $parameters['properties'])) { foreach ($_POST['properties'] as $key => $value) { if (isset($parameters['properties'][$key])) { $parameters['properties'][$key] = array_unique(ArrayHelper::merge($parameters['properties'][$key], $value)); } else { $parameters['properties'][$key] = array_unique($value); } } } elseif (isset($_POST['properties'])) { $parameters['properties'] = $_POST['properties']; } Yii::endProfile("ObjectRule::parseRequest"); if (isset($parameters['properties'])) { foreach ($parameters['properties'] as $key => $values) { foreach ($parameters['properties'][$key] as $index => $value) { if ($value === '') { unset($parameters['properties'][$key][$index]); } } if (count($parameters['properties'][$key]) === 0) { unset($parameters['properties'][$key]); } } } $result = [$model->route, $parameters]; Yii::$app->cache->set($cacheKey, $resultForCache, 86400, new TagDependency(['tags' => $cacheTags])); return $result; } } Yii::endProfile("ObjectRule::parseRequest"); return false; // this rule does not apply }
/** * @param int $object_id * @param int $object_model_id * @return null|\yii\db\ActiveRecord[] */ public static function getForModel($object_id, $object_model_id) { $cacheKey = "PropertyGroupBy:{$object_id}:{$object_model_id}"; if (false === ($groups = Yii::$app->cache->get($cacheKey))) { $group_ids = ObjectPropertyGroup::find()->select('property_group_id')->where(['object_id' => $object_id, 'object_model_id' => $object_model_id])->column(); if (null === $group_ids) { return null; } if (null === ($groups = static::find()->where(['in', 'id', $group_ids])->all())) { return null; } if (null !== ($object = Object::findById($object_id))) { Yii::$app->cache->set($cacheKey, $groups, 0, new TagDependency(['tags' => [ActiveRecordHelper::getObjectTag($object, $object_id), ActiveRecordHelper::getObjectTag($object->object_class, $object_model_id)]])); } } return $groups; }
/** * @return Object|null */ public function getTargetObject() { return Object::findById($this->object_id); }
/** * @return Object|null */ public function getTargetObject() { if ($this->targetObject === null) { $this->targetObject = Object::findById($this->object_id); } return $this->targetObject; }
/** * @param array $config */ public function __construct($config = []) { if (!isset($config['object'])) { throw new InvalidParamException('Parameters \'object\' is not set'); } $this->object = $config['object']; if (is_numeric($this->object)) { $this->object = Object::findById($this->object); } elseif (!$this->object instanceof Object) { throw new InvalidParamException('Parameter "object" not Object or numeric'); } unset($config['object']); parent::__construct($config); }
echo \app\backend\widgets\RemoveAllButton::widget(['url' => Url::toRoute(['remove-all', 'returnUrl' => Yii::$app->request->url]), 'gridSelector' => '.grid-view', 'htmlOptions' => ['class' => 'btn btn-danger']]); ?> </div> <div class="clearfix"></div> <?php $this->endBlock(); ?> <div class="reviews-index"> <?php echo DynaGrid::widget(['options' => ['id' => 'reviews-grid'], 'theme' => 'panel-default', 'gridOptions' => ['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'hover' => true, 'panel' => ['heading' => Html::tag('h3', $this->title, ['class' => 'panel-title']), 'after' => $this->blocks['add-button']]], 'columns' => [['class' => \kartik\grid\CheckboxColumn::className(), 'options' => ['width' => '10px']], 'id', 'author_email', ['attribute' => 'submission.form.name', 'label' => Yii::t('app', 'Form name')], ['attribute' => 'object_id', 'filter' => \app\components\Helper::getModelMap(\app\models\Object::className(), 'id', 'name'), 'label' => Yii::t('app', 'Object'), 'value' => function ($data) { $obj = \app\models\Object::findById($data->object_id); return is_null($obj) ? Yii::t('yii', '(not set)') : $obj->name; }], ['class' => yii\grid\DataColumn::className(), 'attribute' => 'object_model_id', 'value' => function ($data) { /** @var $object \app\models\Object*/ if (null !== ($object = \app\models\Object::findById($data->object_id))) { $class = $object->object_class; $resource = $class::findById($data->object_model_id); if (null !== $resource) { return $resource->name; } return null; } }], ['class' => yii\grid\DataColumn::className(), 'attribute' => 'processed_by_user_id', 'value' => function ($data) { if (isset($data->submission)) { if (null !== $data->submission->processed_by_user_id) { /** @var $user \app\modules\user\models\User */ $user = \app\modules\user\models\User::findIdentity($data->submission->processed_by_user_id); return $user->getDisplayName(); } else { return Yii::t('app', 'Guest');
public function actionAddAddonBinding($remove = '0') { if (Yii::$app->request->isAjax === false) { throw new BadRequestHttpException(); } Yii::$app->response->format = Response::FORMAT_JSON; $addon_id = Yii::$app->request->post('addon_id', null); $object_id = Yii::$app->request->get('object_id', null); $object_model_id = Yii::$app->request->get('object_model_id', null); if ($addon_id === null || $object_id === null || $object_model_id === null) { throw new BadRequestHttpException(); } $addon = Addon::findById($addon_id); $object = Object::findById($object_id); if ($addon === null || $object === null) { throw new NotFoundHttpException(); } $modelClassName = $object->object_class; $model = $this->loadModel($modelClassName, $object_model_id); // ok, now all's ok, addon and model exist! try { if ($remove === '1') { $model->unlink('bindedAddons', $addon, true); } else { $model->link('bindedAddons', $addon, ['sort_order' => count($model->bindedAddons), 'appliance_object_id' => $object->id]); } } catch (\Exception $e) { if (intval($e->getCode()) == 23000) { return ['data' => Html::tag('div', Yii::t('app', 'Addon is already added'), ['class' => 'alert alert-info']) . AddonsListWidget::widget(['object_id' => $object->id, 'object_model_id' => $model->id, 'bindedAddons' => $model->bindedAddons]), 'error' => false]; } else { return ['data' => Html::tag('div', $e->getMessage(), ['class' => 'alert alert-danger']), 'error' => $e->getMessage()]; } } TagDependency::invalidate(Yii::$app->cache, [Addon::className()]); return ['data' => AddonsListWidget::widget(['object_id' => $object->id, 'object_model_id' => $model->id, 'bindedAddons' => $model->bindedAddons]), 'error' => false]; }
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 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]); }
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]); }
<div class="jarviswidget"> <header> <h2><i class="fa fa-cubes"></i> <?php echo Yii::t('app', 'Review data'); ?> </h2> </header> <div class="widget-body"> <div class="form-group field-page-name"> <p class="control-label col-md-2" ><?php echo Yii::t('app', 'Resource'); ?> </p> <div class="col-md-10"> <?php if (null !== ($object = \app\models\Object::findById($review->object_id))) { ?> <?php $class = $object->object_class; ?> <?php $resource = $class::findById($review->object_model_id); ?> <?php if (null !== $resource) { ?> <?php echo $resource->name; ?> <?php }
public function getPossibleSelections() { $data = ['propertyIds' => [], 'propertyStaticValueIds' => []]; if ($this->onlyAvailableFilters) { Yii::beginProfile("onlyAvailableFilters"); $object = Object::findById($this->objectId); if (!is_null($object) && isset($this->currentSelections['last_category_id'])) { $cacheKey = 'FilterWidget: ' . $object->id . ':' . $this->currentSelections['last_category_id'] . ':' . Json::encode($this->currentSelections['properties']); $data = Yii::$app->cache->get($cacheKey); if ($data === false) { $data = []; Yii::beginProfile("ObjectIds for this category"); $query = new Query(); $query = $query->select($object->categories_table_name . '.object_model_id')->distinct()->from($object->categories_table_name)->join("JOIN", Product::tableName(), sprintf("%s.`id` = %s.`object_model_id`", Product::tableName(), $object->categories_table_name))->andWhere([Product::tableName() . ".`active`" => 1])->andWhere(['category_id' => $this->currentSelections['last_category_id']]); if (count($this->currentSelections['properties']) > 0) { Yii::beginProfile("Apply currency selections(properties)"); foreach ($this->currentSelections['properties'] as $property_id => $values) { $joinTableName = 'OSVJoinTable' . $property_id; $query->join('JOIN', ObjectStaticValues::tableName() . ' ' . $joinTableName, $joinTableName . '.object_id = :objectId AND ' . $joinTableName . '.object_model_id = ' . $object->categories_table_name . '.object_model_id ', [':objectId' => $object->id]); $query->andWhere(['in', '`' . $joinTableName . '`.`property_static_value_id`', $values]); } Yii::endProfile("Apply currency selections(properties)"); } Yii::endProfile("ObjectIds for this category"); $ids = array_map('intval', $query->column()); $query = null; Yii::beginProfile("all PSV ids"); $data['propertyStaticValueIds'] = []; if (count($ids) !== 0) { $q4psv = (new Query())->select('property_static_value_id')->from(ObjectStaticValues::tableName())->distinct()->where(['object_id' => $object->id])->andWhere('object_model_id in (' . implode(',', $ids) . ')'); $data['propertyStaticValueIds'] = array_map('intval', $q4psv->column()); } Yii::endProfile("all PSV ids"); $ids = null; Yii::beginProfile("Property ids from PSV ids"); $data['propertyIds'] = []; if (count($data['propertyStaticValueIds']) !== 0) { $data['propertyIds'] = PropertyStaticValues::find()->select('property_id')->distinct()->where(['dont_filter' => 0])->andWhere('id IN (' . implode(',', $data['propertyStaticValueIds']) . ')')->asArray()->column(); } Yii::endProfile("Property ids from PSV ids"); Yii::$app->cache->set($cacheKey, $data, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getCommonTag($object->object_class)]])); $object = null; } } Yii::endProfile("onlyAvailableFilters"); } $this->possibleSelections = []; $groups = PropertyGroup::getForObjectId($this->objectId); foreach ($groups as $group) { if ($this->onlyGroupsIds !== null) { if (in_array($group->id, $this->onlyGroupsIds) === false) { // skip this group continue; } } if ($group->is_internal) { continue; } $this->possibleSelections[$group->id] = ['group' => $group, 'selections' => [], 'static_selections' => [], 'dynamic_selections' => []]; $props = Property::getForGroupId($group->id); foreach ($props as $p) { if ($this->onlyAvailableFilters && !in_array($p->id, $data['propertyIds'])) { if ($this->disableInsteadOfHide === false) { continue; } } if ($p->dont_filter) { continue; } if ($p->has_static_values) { $propertyStaticValues = PropertyStaticValues::getValuesForPropertyId($p->id); foreach ($propertyStaticValues as $key => $propertyStaticValue) { if ($propertyStaticValue['dont_filter']) { unset($propertyStaticValues[$key]); } } if ($this->onlyAvailableFilters) { foreach ($propertyStaticValues as $key => $propertyStaticValue) { if (!in_array($propertyStaticValue['id'], $data['propertyStaticValueIds'])) { if ($this->disableInsteadOfHide === true) { $this->disabled_ids[] = $propertyStaticValue['id']; } else { unset($propertyStaticValues[$key]); } } } } $this->possibleSelections[$group->id]['static_selections'][$p->id] = $propertyStaticValues; } elseif ($p->is_column_type_stored && $p->value_type == 'NUMBER') { $this->possibleSelections[$group->id]['dynamic_selections'][] = $p->id; } } if (count($this->possibleSelections[$group->id]) === 0) { unset($this->possibleSelections[$group->id]); } } }
/** * @return array */ public function actionAjaxSearch() { Yii::$app->response->format = Response::FORMAT_JSON; $search = \Yii::$app->request->get('search', []); $object = !empty($search['object']) ? intval($search['object']) : 0; $term = !empty($search['term']) ? $search['term'] : ''; $result = ['more' => false, 'results' => []]; if (null === ($object = Object::findById($object))) { return $result; } /** @var ActiveRecord $class */ $class = $object->object_class; $list = [Product::className(), Category::className(), Page::className()]; if (!in_array($class, $list)) { return $result; } $query = $class::find()->select('id, name, "#" `url`')->andWhere(['like', 'name', $term])->asArray(true); $result['results'] = array_values($query->all()); array_walk($result['results'], function (&$val) use($class) { if (null !== ($model = $class::findOne(['id' => $val['id']]))) { if (Product::className() === $model->className()) { $val['url'] = Url::toRoute(['@product', 'model' => $model, 'category_group_id' => $model->category->category_group_id]); } elseif (Category::className() === $model->className()) { $val['url'] = Url::toRoute(['@category', 'last_category_id' => $model->id, 'category_group_id' => $model->category_group_id]); } else { if (Page::className() === $model->className()) { $val['url'] = Url::toRoute(['@article', 'id' => $model->id]); } } } }); return $result; }
<?php use yii\helpers\Html; /* @var $form \kartik\widgets\ActiveForm */ /* @var $fields array */ /* @var \app\modules\data\models\ImportModel $model */ $objectClass = \app\models\Object::findById($model->object)->object_class; $object = new $objectClass(); foreach ($fields['object'] as $name => $value) { $fields['object'][$name] = $object->getAttributeLabel($value); } ?> <?php echo $form->field($model, 'fields[object][]')->checkboxList($fields['object'], ['item' => function ($index, $label, $name, $checked, $value) { $line = Html::beginTag('div', ['class' => 'checkbox']); $line .= Html::checkbox($name, $checked, ['value' => $value, 'label' => Html::encode($label) . ' (<small>' . $value . '</small>)']); $line .= '</div>'; return $line; }]);