SaveImgBehavior::className(), 'fields' => [ ['name'=>'image','directory' => 'articles' ] ] ], 'slug' => [ 'class' => 'common\behaviors\Slug', 'in_attribute' => 'title', 'out_attribute' => 'translit', 'translit' => true ], ]; } /** * @inheritdoc */ public function rules() { return [ [['date'], 'safe'], [['title', 'body'], 'required'], [['body', 'seo_text'], 'string'], [['title', 'image', 'translit', 'meta_title', 'meta_keywords', 'meta_description', 'h1'], 'string', 'max' => 255], [['imageUpload'], 'safe'], [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'date' => 'Date', 'title' => 'Title', 'body' => 'Body', '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', ]; } 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']); } }