123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?php
- /**
- * Created by PhpStorm.
- * User: NODELOG
- * Date: 2016/12/19
- * Time: 下午4:20
- */
- namespace common\behaviors;
- use common\models\Comment;
- use common\models\CommentInfo;
- use common\traits\EntityTrait;
- use Yii;
- use yii\base\Behavior;
- use yii\db\ActiveRecord;
- use yii\validators\Validator;
- class CommentBehavior extends Behavior
- {
- use EntityTrait;
- /**
- * @var \yii\db\ActiveRecord
- */
- public $owner;
- public $defaultStatus = 1;
- public function events()
- {
- return [
- ActiveRecord::EVENT_INIT => 'addRules',
- ActiveRecord::EVENT_AFTER_INSERT => 'afterInsert',
- ActiveRecord::EVENT_AFTER_UPDATE => 'afterUpdate',
- ActiveRecord::EVENT_AFTER_DELETE => 'afterDelete',
- ];
- }
- public function addRules()
- {
- $this->addRule('commentEnabled', 'in', ['range' => [0, 1]]);
- }
- public function addRule($attributes, $validator, $options = [])
- {
- $validators = $this->owner->getValidators();
- $validators->append(Validator::createValidator($validator, $this->owner, (array) $attributes, $options));
- }
- public function afterInsert()
- {
- if ($this->_commentEnabled != null) {
- $status = $this->_commentEnabled;
- if ($status == $this->defaultStatus) {
- return;
- }
- $model = new CommentInfo();
- $model->entity = $this->getEntity();
- $model->entity_id = $this->getEntityId();
- $model->status = $status;
- $model->save();
- }
- }
- public function afterUpdate()
- {
- if ($this->_commentEnabled != null) {
- $status = $this->_commentEnabled;
- /* @var $model \common\models\CommentInfo */
- $model = $this->owner->commentInfo;
- if ($model == null) {
- if ($status == $this->defaultStatus) {
- return;
- }
- $model = new CommentInfo();
- $model->entity = $this->getEntity();
- $model->entity_id = $this->getEntityId();
- $model->status = $status;
- $model->save();
- } else {
- $model->status = $status;
- $model->save();
- }
- }
- }
- public function afterDelete()
- {
- $entity = $this->getEntity();
- $entityId = $this->getEntityId();
- CommentInfo::deleteAll(['entity' => $entity, 'entity_id' => $entityId]);
- Comment::deleteAll(['entity' => $entity, 'entity_id' => $entityId]);
- }
- public function getCommentInfo()
- {
- return $this->owner->hasOne(CommentInfo::className(), [
- 'entity_id' => $this->owner->primaryKey()[0]
- ])->where(['entity' => $this->getEntity()]);
- }
- public function getCommentTotal()
- {
- $model = $this->owner->commentInfo;
- if ($model == null) {
- return 0;
- }
- return $model->total;
- }
- private $_commentEnabled;
- public function getCommentEnabled()
- {
- if ($this->_commentEnabled != null) {
- return $this->_commentEnabled;
- }
- $model = $this->owner->commentInfo;
- if ($model == null || $model->status === null) {
- return $this->defaultStatus;
- }
- return $model->status;
- }
- public function setCommentEnabled($commentEnabled)
- {
- $this->_commentEnabled = $commentEnabled;
- }
- }
|