Ejemplo n.º 1
0
 /**
  * Стандартный sitemap
  */
 public function actionSitemap()
 {
     ini_set("memory_limit", "512M");
     $trees = Tree::find()->where(['site_code' => \Yii::$app->cms->site->code])->orderBy(['level' => SORT_ASC, 'priority' => SORT_ASC])->all();
     if ($trees) {
         /**
          * @var Tree $tree
          */
         foreach ($trees as $tree) {
             if (!$tree->redirect) {
                 $result[] = ["loc" => $tree->url, "lastmod" => $this->_lastMod($tree), "priority" => $this->_calculatePriority($tree), "changefreq" => "daily"];
             }
         }
     }
     $elements = CmsContentElement::find()->joinWith('cmsTree')->andWhere([Tree::tableName() . '.site_code' => \Yii::$app->cms->site->code])->orderBy(['updated_at' => SORT_DESC, 'priority' => SORT_ASC])->all();
     //Добавление элементов в карту
     if ($elements) {
         /**
          * @var CmsContentElement $model
          */
         foreach ($elements as $model) {
             $result[] = ["loc" => $model->absoluteUrl, "lastmod" => $this->_lastMod($model), "priority" => "0.3", "changefreq" => "daily"];
         }
     }
     \Yii::$app->response->format = Response::FORMAT_XML;
     $this->layout = false;
     //Генерация sitemap вручную, не используем XmlResponseFormatter
     \Yii::$app->response->content = $this->render($this->action->id, ['data' => $result]);
     return;
     /*return $this->render($this->action->id, [
           'data' => $result
       ]);;*/
 }
Ejemplo n.º 2
0
 /**
  * @return \yii\widgets\ActiveField
  */
 public function renderForActiveForm()
 {
     $field = parent::renderForActiveForm();
     $find = CmsContentElement::find()->active();
     if ($this->content_id) {
         $find->andWhere(['content_id' => $this->content_id]);
     }
     if ($this->fieldElement == self::FIELD_ELEMENT_SELECT) {
         $field = $this->activeForm->fieldSelect($this->model->relatedPropertiesModel, $this->property->code, ArrayHelper::map($find->all(), 'id', 'name'), []);
     } else {
         if ($this->fieldElement == self::FIELD_ELEMENT_SELECT_MULTI) {
             $field = $this->activeForm->fieldSelectMulti($this->model->relatedPropertiesModel, $this->property->code, ArrayHelper::map($find->all(), 'id', 'name'), []);
         } else {
             if ($this->fieldElement == self::FIELD_ELEMENT_RADIO_LIST) {
                 $field = parent::renderForActiveForm();
                 $field->radioList(ArrayHelper::map($find->all(), 'id', 'name'));
             } else {
                 if ($this->fieldElement == self::FIELD_ELEMENT_CHECKBOX_LIST) {
                     $field = parent::renderForActiveForm();
                     $field->checkboxList(ArrayHelper::map($find->all(), 'id', 'name'));
                 }
             }
         }
     }
     if (!$field) {
         return '';
     }
     return $field;
 }
 /**
  * @param ActiveDataProvider $activeDataProvider
  */
 public function search(ActiveDataProvider $activeDataProvider, $tableName = 'cms_content_element')
 {
     $classSearch = $this->propertyElementClassName;
     /**
      * @var $activeQuery ActiveQuery
      */
     $activeQuery = $activeDataProvider->query;
     $elementIdsGlobal = [];
     $applyFilters = false;
     foreach ($this->toArray() as $propertyCode => $value) {
         //TODO: add to validator related properties
         if ($propertyCode == 'properties') {
             continue;
         }
         if ($property = $this->getProperty($propertyCode)) {
             if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_NUMBER) {
                 $elementIds = [];
                 $query = $classSearch::find()->select(['element_id'])->where(["property_id" => $property->id])->indexBy('element_id');
                 if ($fromValue = $this->{$this->getAttributeNameRangeFrom($propertyCode)}) {
                     $applyFilters = true;
                     $query->andWhere(['>=', 'value_num', (double) $fromValue]);
                 }
                 if ($toValue = $this->{$this->getAttributeNameRangeTo($propertyCode)}) {
                     $applyFilters = true;
                     $query->andWhere(['<=', 'value_num', (double) $toValue]);
                 }
                 if (!$fromValue && !$toValue) {
                     continue;
                 }
                 $elementIds = $query->all();
             } else {
                 if (!$value) {
                     continue;
                 }
                 $applyFilters = true;
                 $elementIds = $classSearch::find()->select(['element_id'])->where(["value" => $value, "property_id" => $property->id])->indexBy('element_id')->all();
             }
             $elementIds = array_keys($elementIds);
             if ($elementIds) {
                 $realElements = CmsContentElement::find()->where(['id' => $elementIds])->select(['id', 'parent_content_element_id'])->indexBy('parent_content_element_id')->groupBy(['parent_content_element_id'])->asArray()->all();
                 $elementIds = array_keys($realElements);
             }
             if (!$elementIds) {
                 $elementIdsGlobal = [];
             }
             if ($elementIdsGlobal) {
                 $elementIdsGlobal = array_intersect($elementIds, $elementIdsGlobal);
             } else {
                 $elementIdsGlobal = $elementIds;
             }
         }
     }
     if ($applyFilters) {
         //$activeQuery->andWhere(['cms_content_element.id' => $elementIdsGlobal]);
         $activeQuery->andWhere([$tableName . '.id' => $elementIdsGlobal]);
     }
 }
Ejemplo n.º 4
0
 /**
  * @return \yii\widgets\ActiveField
  */
 public function renderForActiveForm()
 {
     $field = parent::renderForActiveForm();
     $find = CmsContentElement::find()->active();
     if ($this->content_id) {
         $find->andWhere(['content_id' => $this->content_id]);
     }
     if ($this->multiple == Cms::BOOL_N) {
         $field = $this->activeForm->fieldSelect($this->model->relatedPropertiesModel, $this->property->code, ArrayHelper::map($find->all(), 'id', 'name'), []);
     } else {
         if ($this->multiple == Cms::BOOL_Y) {
             $field = $this->activeForm->fieldSelectMulti($this->model->relatedPropertiesModel, $this->property->code, ArrayHelper::map($find->all(), 'id', 'name'), []);
         }
     }
     return $field;
 }
 public function safeUp()
 {
     if ($models = \skeeks\cms\models\CmsContentElement::find()->all()) {
         /**
          * @var $model \skeeks\cms\models\CmsContentElement
          */
         foreach ($models as $model) {
             if (!method_exists($model, 'getMainImageSrc')) {
                 continue;
             }
             //$user->getFiles()
             $imageSrc = $model->getMainImageSrcOld();
             if ($imageSrc) {
                 $storageFile = \skeeks\cms\models\CmsStorageFile::find()->where(['src' => $imageSrc])->one();
                 if ($storageFile) {
                     $model->image_id = $storageFile->id;
                     $model->image_full_id = $storageFile->id;
                     $model->save(false);
                 }
             }
         }
     }
 }
Ejemplo n.º 6
0
 /**
  * @return string
  */
 public function getStringValue()
 {
     $value = $this->property->relatedPropertiesModel->getAttribute($this->property->code);
     if ($this->isMultiple) {
         $data = ArrayHelper::map(CmsContentElement::find()->where(['id' => $value])->all(), 'id', 'name');
         return implode(', ', $data);
     } else {
         if ($element = CmsContentElement::find()->where(['id' => $value])->one()) {
             return $element->name;
         }
         return "";
     }
 }
Ejemplo n.º 7
0
     }];
 }
 $searchRelatedPropertiesModel = new \skeeks\cms\models\searchs\SearchRelatedPropertiesModel();
 $searchRelatedPropertiesModel->initCmsContent($model->cmsContent);
 $searchRelatedPropertiesModel->load(\Yii::$app->request->get());
 $searchRelatedPropertiesModel->search($dataProvider);
 /**
  * @var $model \skeeks\cms\models\CmsContentElement
  */
 if ($model->relatedPropertiesModel) {
     foreach ($model->relatedPropertiesModel->attributeValues() as $name => $value) {
         $property = $model->relatedPropertiesModel->getRelatedProperty($name);
         $filter = '';
         if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_ELEMENT) {
             $propertyType = $property->createPropertyType();
             $options = \skeeks\cms\models\CmsContentElement::find()->active()->andWhere(['content_id' => $propertyType->content_id])->all();
             $items = \yii\helpers\ArrayHelper::merge(['' => ''], \yii\helpers\ArrayHelper::map($options, 'id', 'name'));
             $filter = \yii\helpers\Html::activeDropDownList($searchRelatedPropertiesModel, $name, $items, ['class' => 'form-control']);
         } else {
             if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_LIST) {
                 $items = \yii\helpers\ArrayHelper::merge(['' => ''], \yii\helpers\ArrayHelper::map($property->enums, 'id', 'value'));
                 $filter = \yii\helpers\Html::activeDropDownList($searchRelatedPropertiesModel, $name, $items, ['class' => 'form-control']);
             } else {
                 if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_STRING) {
                     $filter = \yii\helpers\Html::activeTextInput($searchRelatedPropertiesModel, $name, ['class' => 'form-control']);
                 } else {
                     if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_NUMBER) {
                         $filter = "<div class='row'><div class='col-md-6'>" . \yii\helpers\Html::activeTextInput($searchRelatedPropertiesModel, $searchRelatedPropertiesModel->getAttributeNameRangeFrom($name), ['class' => 'form-control', 'placeholder' => 'от']) . "</div><div class='col-md-6'>" . \yii\helpers\Html::activeTextInput($searchRelatedPropertiesModel, $searchRelatedPropertiesModel->getAttributeNameRangeTo($name), ['class' => 'form-control', 'placeholder' => 'до']) . "</div></div>";
                     }
                 }
             }
Ejemplo n.º 8
0
        $searchRelatedPropertiesModel->search($dataProvider);

         /**
         * @var $model \skeeks\cms\models\CmsContentElement
         */
        if ($model->relatedPropertiesModel)
        {
            foreach ($model->relatedPropertiesModel->toArray($model->relatedPropertiesModel->attributes()) as $name => $value) {

                $property = $model->relatedPropertiesModel->getRelatedProperty($name);
                $filter = '';

                if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_ELEMENT)
                {
                    $propertyType = $property->handler;
                        $options = \skeeks\cms\models\CmsContentElement::find()->active()->andWhere([
                            'content_id' => $propertyType->content_id
                        ])->all();

                        $items = \yii\helpers\ArrayHelper::merge(['' => ''], \yii\helpers\ArrayHelper::map(
                            $options, 'id', 'name'
                        ));

                    $filter = \yii\helpers\Html::activeDropDownList($searchRelatedPropertiesModel, $name, $items, ['class' => 'form-control']);

                } else if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_LIST)
                {
                    $items = \yii\helpers\ArrayHelper::merge(['' => ''], \yii\helpers\ArrayHelper::map(
                        $property->enums, 'id', 'value'
                    ));
 /**
  * @param CmsContent $cmsContent
  * @return array
  */
 public static function getColumnsByContent($cmsContent = null, $dataProvider = null)
 {
     $autoColumns = [];
     if (!$cmsContent) {
         return [];
     }
     $model = CmsContentElement::find()->where(['content_id' => $cmsContent->id])->one();
     if (!$model) {
         $model = new CmsContentElement(['content_id' => $cmsContent->id]);
     }
     if (is_array($model) || is_object($model)) {
         foreach ($model as $name => $value) {
             $autoColumns[] = ['attribute' => $name, 'visible' => false, 'format' => 'raw', 'class' => \yii\grid\DataColumn::className(), 'value' => function ($model, $key, $index) use($name) {
                 if (is_array($model->{$name})) {
                     return implode(",", $model->{$name});
                 } else {
                     return $model->{$name};
                 }
             }];
         }
         $searchRelatedPropertiesModel = new \skeeks\cms\models\searchs\SearchRelatedPropertiesModel();
         $searchRelatedPropertiesModel->initProperties($cmsContent->cmsContentProperties);
         $searchRelatedPropertiesModel->load(\Yii::$app->request->get());
         if ($dataProvider) {
             $searchRelatedPropertiesModel->search($dataProvider);
         }
         /**
          * @var $model \skeeks\cms\models\CmsContentElement
          */
         if ($model->relatedPropertiesModel) {
             $autoColumns = ArrayHelper::merge($autoColumns, GridViewStandart::getColumnsByRelatedPropertiesModel($model->relatedPropertiesModel, $searchRelatedPropertiesModel));
         }
     }
     return $autoColumns;
 }
Ejemplo n.º 10
0
 /**
  * @param $name
  * @return array|mixed|string
  */
 public function getSmartAttribute($name)
 {
     /**
      * @var $property RelatedPropertyModel
      */
     $value = $this->getAttribute($name);
     $property = $this->getRelatedProperty($name);
     if ($property->property_type == PropertyType::CODE_LIST) {
         if ($property->multiple == Cms::BOOL_Y) {
             if ($property->enums) {
                 $result = [];
                 foreach ($property->enums as $enum) {
                     if (in_array($enum->id, $value)) {
                         $result[$enum->code] = $enum->value;
                     }
                 }
                 return $result;
             }
         } else {
             if ($property->enums) {
                 $enum = array_shift($property->enums);
                 foreach ($property->enums as $enum) {
                     if ($enum->id == $value) {
                         return $enum->value;
                     }
                 }
             }
             return "";
         }
     } else {
         if ($property->property_type == PropertyType::CODE_ELEMENT) {
             if ($property->multiple == Cms::BOOL_Y) {
                 return ArrayHelper::map(CmsContentElement::find()->where(['id' => $value])->all(), 'id', 'name');
             } else {
                 if ($element = CmsContentElement::find()->where(['id' => $value])->one()) {
                     return $element->name;
                 }
                 return "";
             }
         } else {
             return $value;
         }
     }
 }
Ejemplo n.º 11
0
 /**
  *
  * Получение доступных опций для свойства
  * @param CmsContentProperty $property
  * @return $this|array|\yii\db\ActiveRecord[]
  */
 public function getRelatedPropertyOptions($property)
 {
     $options = [];
     if ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_ELEMENT) {
         $propertyType = $property->handler;
         if ($this->elementIds) {
             $availables = \skeeks\cms\models\CmsContentElementProperty::find()->select(['value_enum'])->indexBy('value_enum')->andWhere(['element_id' => $this->elementIds])->andWhere(['property_id' => $property->id])->asArray()->all();
             $availables = array_keys($availables);
         }
         $options = \skeeks\cms\models\CmsContentElement::find()->active()->andWhere(['content_id' => $propertyType->content_id]);
         if ($this->elementIds) {
             $options->andWhere(['id' => $availables]);
         }
         $options = $options->select(['id', 'name'])->asArray()->all();
         $options = \yii\helpers\ArrayHelper::map($options, 'id', 'name');
     } elseif ($property->property_type == \skeeks\cms\relatedProperties\PropertyType::CODE_LIST) {
         $options = $property->getEnums()->select(['id', 'value']);
         if ($this->elementIds) {
             $availables = \skeeks\cms\models\CmsContentElementProperty::find()->select(['value_enum'])->indexBy('value_enum')->andWhere(['element_id' => $this->elementIds])->andWhere(['property_id' => $property->id])->asArray()->all();
             $availables = array_keys($availables);
             $options->andWhere(['id' => $availables]);
         }
         $options = $options->asArray()->all();
         $options = \yii\helpers\ArrayHelper::map($options, 'id', 'value');
     }
     return $options;
 }