/** * @return Response * @throws HttpException */ public function actionSavePropertyUnit() { if (false === \Yii::$app->request->isAjax) { throw new HttpException(403); } /** @var $property Property | null */ $property = null; Yii::$app->response->format = Response::FORMAT_JSON; $post = Yii::$app->request->post(); if (false === isset($post['id']) || null === ($property = Property::findOne(['id' => $post['id']]))) { return 0; } if (false === isset($post['name']) || false === isset($post['val'])) { return 0; } $data = Json::decode($property->handler_additional_params); $data[$post['name']] = $post['val']; $property->handler_additional_params = Json::encode($data); if (true === $property->save(true, ['handler_additional_params'])) { return 1; } return 0; }
public function actionAutocomplete($search = null, $id = null, $object_id = null) { /** * @todo Добавить отображение вложенности */ $out = ['more' => false]; if (!is_null($search)) { $query = new Query(); $query->select(Property::tableName() . '.id, ' . Property::tableName() . '.name AS text')->from(Property::tableName())->andWhere(['like', Property::tableName() . '.name', $search])->limit(100); if (!is_null($object_id)) { $query->leftJoin(PropertyGroup::tableName(), PropertyGroup::tableName() . '.id = ' . Property::tableName() . '.property_group_id'); $query->andWhere([PropertyGroup::tableName() . '.id' => $object_id]); } $command = $query->createCommand(); $data = $command->queryAll(); $out['results'] = array_values($data); } elseif ($id > 0) { $out['results'] = ['id' => $id, 'text' => Property::findOne($id)->name]; } else { $out['results'] = ['id' => 0, 'text' => Yii::t('app', 'No matching records found')]; } echo Json::encode($out); }
public function actionDeleteProperty($id, $property_group_id) { /** @var Property $model */ $model = Property::findOne($id); if (is_null($model)) { throw new NotFoundHttpException(); } $model->delete(); Yii::$app->session->setFlash('danger', Yii::t('app', 'Object removed')); return $this->redirect(Url::to(['/backend/properties/group', 'id' => $property_group_id])); }
/** * renders product item and list. * possible can render all objects, but need for few logic change * @param array $chunkData params for select and render * @param TagDependency $dependency * @return mixed */ private static function renderProducts($chunkData, &$dependency) { $params = ['itemView' => Yii::$app->getModule('shop')->itemView, 'type' => 'show', 'object' => 'product', 'where' => [], 'limit' => 0, 'listView' => Yii::$app->getModule('shop')->listView]; switch ($chunkData['key']) { case 'product': if (ArrayHelper::keyExists('sku', $chunkData)) { $params['where'] = ['sku' => $chunkData['sku']]; } break; case 'productList': $params['type'] = 'list'; break; default: $expression = '%(?P<objectName>[^#]+?)#(?P<objectId>[\\d]+?)$%'; if (preg_match($expression, $chunkData['key'], $matches)) { $params['where']['id'] = $matches['objectId']; } break; } switch ($params['object']) { case 'product': $dependency->tags[] = ActiveRecordHelper::getCommonTag(Product::className()); $query = Product::find(); if (!empty($chunkData['categoryId'])) { $query->leftJoin('{{%product_category}}', Product::tableName() . '.id = {{%product_category}}.object_model_id')->andWhere(['{{%product_category}}.category_id' => $chunkData['categoryId']]); $dependency->tags[] = ActiveRecordHelper::getCommonTag(Category::className()); $dependency->tags[] = ActiveRecordHelper::getObjectTag(Category::className(), $chunkData['categoryId']); } if (!empty($chunkData['property'])) { $expression = '%(?P<propertyKey>[^:]+?):(?P<propertyValue>.+?)$%'; if (preg_match($expression, $chunkData['property'], $matches)) { $property = Property::findOne(['key' => $matches['propertyKey']]); if (!is_null($property)) { /** @var Property $property */ $dependency->tags[] = ActiveRecordHelper::getCommonTag(Property::className()); $dependency->tags[] = $property->objectTag(); if ($property->is_eav == 1) { $query->leftJoin('{{%product_eav}}', Product::tableName() . '.id = {{%product_eav}}.object_model_id')->andWhere(['{{%product_eav}}.key' => $matches['propertyKey'], '{{%product_eav}}.value' => $matches['propertyValue']]); } elseif ($property->has_static_values == 1) { $psv = PropertyStaticValues::findOne(['property_id' => $property->id, 'value' => $matches['propertyValue']]); if (!is_null($psv)) { $dependency->tags[] = ActiveRecordHelper::getCommonTag(PropertyStaticValues::className()); $dependency->tags[] = $psv->objectTag(); $query->leftJoin('{{%object_static_values}}', Product::tableName() . '.id = {{%object_static_values}}.object_model_id')->andWhere(['object_id' => 3, '{{%object_static_values}}.property_static_value_id' => $psv->id]); } else { return ''; } } /** @todo add column_stored */ } else { return ''; } } } break; default: $query = Product::find(); break; } $params = ArrayHelper::merge($params, array_intersect_key($chunkData, $params)); if (!empty($params['where'])) { $query->andWhere($params['where']); } if (!empty($params['limit'])) { $query->limit($params['limit']); } if ($params['type'] === 'list') { $view = $params['listView']; $objects = $query->all(); foreach ($objects as $object) { $dependency->tags[] = $object->objectTag(); } switch ($params['object']) { case 'product': $viewParams = ['products' => $objects]; break; default: $viewParams = ['products' => $objects]; break; } } else { $view = $params['itemView']; $object = $query->one(); if (is_null($object)) { return ''; } $dependency->tags[] = $object->objectTag(); switch ($params['object']) { case 'product': $viewParams = ['product' => $object, 'url' => Url::to(['@product', 'model' => $object, 'category_group_id' => $object->getMainCategory()->category_group_id])]; break; default: $viewParams = ['product' => $object, 'url' => Url::to(['@product', 'model' => $object, 'category_group_id' => $object->getMainCategory()->category_group_id])]; break; } } return Yii::$app->view->render($view, $viewParams); }
public static function getDefaultLanguage() { $languages = self::getLanguages(); $model = Property::findOne('default_language'); return !is_null($model) && !empty($model->value) && in_array($model->value, $languages) ? $model->value : $languages[0]; }