[ 'class' => 'common\behaviors\Slug', 'in_attribute' => 'title', 'out_attribute' => 'translit', 'translit' => true ], [ 'class' => SaveImgBehavior::className(), ], ]; } /** * @inheritdoc */ public function rules() { return [ [['date'], 'default', 'value' => function() { return time(); }], [['date', 'date_end'], 'safe'], [['title', 'body'], 'required'], [['body', 'body_preview', 'seo_text'], 'string'], [['title', 'image', 'translit', 'meta_title', 'meta_keywords', 'meta_description', 'h1'], 'string', 'max' => 255], [['imageUpload'], 'safe'], [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], [['date', 'date_end'], 'filter', 'filter' => function($value) { return strtotime($value)?:time(); }], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'date' => 'Дата (Дата начала)', 'date_end' => '(Дата окончания)', 'title' => 'Название', 'body' => 'Текст', 'body_preview' => 'Текст (предпросмотр)', 'image' => 'Image', 'imageUrl' => Yii::t('app', 'Image'), 'translit' => 'Translit', 'meta_title' => 'Meta Title', 'meta_keywords' => 'Meta Keywords', 'meta_description' => 'Meta Description', 'seo_text' => 'Seo Text', 'h1' => 'H1', 'imageUpload' => 'Картинка', ]; } public function getImageFile() { return empty($this->image) ? null : Yii::getAlias('@imagesDir/articles/'. $this->image); } public function getImageUrl() { return empty($this->image) ? null : Yii::getAlias('@imagesUrl/articles/' . $this->image); } public function recalculateRating() { /** * @var ArticleToRating $averageRating */ $average = $this->getComments()->joinWith('rating')->select(['average' => 'avg(artbox_comment_rating.value)::float'])->scalar(); if(!$average) { $average = 0; } $averageRating = $this->averageRating; if(!empty($averageRating)) { $averageRating->value = $average; } else { $averageRating = new ArticleToRating(['articles_id' => $this->id, 'value' => $average]); } if($averageRating->save()) { return true; } else { return false; } } public function getComments() { return $this->hasMany(CommentModel::className(), ['entity_id' => 'id'])->where(['artbox_comment.entity' => self::className(), 'artbox_comment.status' => CommentModel::STATUS_ACTIVE, 'artbox_comment.artbox_comment_pid' => NULL]); } public function getAverageRating() { return $this->hasOne(ArticleToRating::className(), ['articles_id' => 'id']); } }