Esempio n. 1
0
 public function getData()
 {
     $objectClass = Object::findById($this->objectId)->object_class;
     $object = new $objectClass();
     $this->data = $object->attributeLabels();
     return parent::getData();
 }
Esempio n. 2
0
 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');
     }
 }
Esempio n. 3
0
 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']);
     }
 }
Esempio n. 5
0
 /**
  * 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];
 }
Esempio n. 6
0
 /**
  * @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;
 }
Esempio n. 7
0
 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();
 }
Esempio n. 8
0
 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
 }
Esempio n. 9
0
 /**
  * @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;
 }
Esempio n. 10
0
 /**
  * @return Object|null
  */
 public function getTargetObject()
 {
     return Object::findById($this->object_id);
 }
Esempio n. 11
0
 /**
  * @return Object|null
  */
 public function getTargetObject()
 {
     if ($this->targetObject === null) {
         $this->targetObject = Object::findById($this->object_id);
     }
     return $this->targetObject;
 }
Esempio n. 12
0
 /**
  * @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);
 }
Esempio n. 13
0
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');
Esempio n. 14
0
 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];
 }
Esempio n. 15
0
 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;
 }
Esempio n. 16
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]);
 }
 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]);
 }
Esempio n. 18
0
                <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 
    }
Esempio n. 19
0
 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;
 }
Esempio n. 21
0
<?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;
}]);