[ 'class' => 'common\behaviors\Slug', 'in_attribute' => 'title', 'out_attribute' => 'translit', 'translit' => true, ], [ 'class' => SaveImgBehavior::className(), ], 'language' => [ 'class' => LanguageBehavior::className(), ], ]; } /** * @inheritdoc */ public function rules() { return [ [ [ 'date' ], 'default', 'value' => function() { return time(); }, ], [ [ 'date' ], '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' ], 'filter', 'filter' => function($value) { return strtotime($value) ? : time(); }, ], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'date' => 'Date', 'title' => 'Title', 'body' => 'Body', 'body_preview' => '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', ]; } 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' ]); } }