| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 | 
							- <?php
 
- namespace common\models;
 
- use backend\models\search\SearchModelTrait;
 
- use common\behaviors\VoteBehavior;
 
- use common\modules\user\behaviors\UserBehavior;
 
- use common\modules\user\models\User;
 
- use yii\behaviors\BlameableBehavior;
 
- use yii\behaviors\TimestampBehavior;
 
- use yii\helpers\Html;
 
- use common\behaviors\UserBehaviorBehavior;
 
- use Yii;
 
- /**
 
-  * This is the model class for table "{{%comment}}".
 
-  *
 
-  * @property int $id
 
-  * @property int $user_id
 
-  * @property string $user_ip
 
-  * @property string $content
 
-  * @property string $entity
 
-  * @property int $entity_id
 
-  * @property int $parent_id
 
-  * @property int $reply_uid
 
-  * @property int $created_at
 
-  * @property Comment $parent
 
-  */
 
- class Comment extends \yii\db\ActiveRecord
 
- {
 
-     use SearchModelTrait;
 
-     const PAGE_SIZE = 10;
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public static function tableName()
 
-     {
 
-         return '{{%comment}}';
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function rules()
 
-     {
 
-         return [
 
-             [['entity', 'entity_id', 'content'], 'required'],
 
-             [['entity_id', 'user_id', 'parent_id', 'is_top', 'parent_id', 'reply_uid'], 'integer'],
 
-             [['content'], 'string'],
 
-             ['content', 'setReplyUid'],
 
-         ];
 
-     }
 
-     public function setReplyUid($attribute)
 
-     {
 
-         if (preg_match('/@(\S+?)\s/', $this->$attribute, $matches) > 0) {
 
-             $replyUserName = $matches[1];
 
-             $replyUserId = User::find()->select('id')->where(['username' => $replyUserName])->scalar();
 
-             $this->reply_uid = $replyUserId;
 
-         }
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function attributeLabels()
 
-     {
 
-         return [
 
-             'id' => 'ID',
 
-             'entity' => '来源',
 
-             'entity_id' => '来源ID',
 
-             'user_id' => '评论人',
 
-             'user_ip' => 'IP',
 
-             'content' => '内容',
 
-             'up' => '顶',
 
-             'down' => '踩',
 
-             'is_top' => '是否置顶',
 
-             'status' => '状态',
 
-             'created_at' => '创建时间',
 
-             'updated_at' => '更新时间',
 
-             'parent_id' => '父评论'
 
-         ];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function behaviors()
 
-     {
 
-         return [
 
-             TimestampBehavior::className(),
 
-             [
 
-                 'class' => BlameableBehavior::className(),
 
-                 'createdByAttribute' => 'user_id',
 
-                 'updatedByAttribute' => false
 
-             ],
 
-             VoteBehavior::className(),
 
-             UserBehavior::className(),
 
-             [
 
-                 'class' => UserBehaviorBehavior::className(),
 
-                 'eventName' => [self::EVENT_AFTER_INSERT],
 
-                 'name' => 'comment',
 
-                 'rule' => [
 
-                     'cycle' => 24,
 
-                     'max' => 10,
 
-                     'counter' => 5,
 
-                 ],
 
-                 'content' => '{user.username}在{extra.time}评论',
 
-                 'data' => [
 
-                     'extra' => [
 
-                         'time' => date('Y-m-d H:i:s')
 
-                     ]
 
-                 ]
 
-             ]
 
-         ];
 
-     }
 
-     /**
 
-      * 获取所有子评论.
 
-      *
 
-      * @return \yii\db\ActiveQuery
 
-      */
 
-     public function getSons()
 
-     {
 
-         return $this->hasMany(self::className(), ['parent_id' => 'id'])->where(['status' => 1]);
 
-     }
 
-     public function getParent()
 
-     {
 
-         return $this->hasOne(self::className(), ['id' => 'parent_id']);
 
-     }
 
-     public function transactions()
 
-     {
 
-         return [
 
-             self::SCENARIO_DEFAULT => self::OP_ALL,
 
-         ];
 
-     }
 
-     public static function process($data)
 
-     {
 
-         preg_match('/@(\S+?)\s/', $data, $matches);
 
-         if (!empty($matches)) {
 
-             $replyUserName = $matches[1];
 
-             $replyUserId = User::find()->select('id')->where(['username' => $replyUserName])->scalar();
 
-             $data = preg_replace('/(@\S+?\s)/', Html::a('$1', ['/user/default/index', 'id' => $replyUserId]), $data);
 
-         }
 
-         return $data;
 
-     }
 
-     public function beforeSave($insert)
 
-     {
 
-         if (parent::beforeSave($insert)) {
 
-             if ($insert == true) {
 
-                 if ($this->parent_id) {
 
-                     $this->reply_uid = $this->parent->user_id;
 
-                 }
 
-                 $this->user_ip = Yii::$app->getRequest()->getUserIP();
 
-                 return true;
 
-             }
 
-             return true;
 
-         }
 
-         return false;
 
-     }
 
-     public function afterSave($insert, $changedAttributes)
 
-     {
 
-         parent::afterSave($insert, $changedAttributes);
 
-         if ($insert) {
 
-             $this->updateCommentTotal();
 
-             return true;
 
-         }
 
-         return true;
 
-     }
 
-     public function afterDelete()
 
-     {
 
-         parent::afterDelete();
 
-         $this->updateCommentTotal();
 
-     }
 
-     public function updateCommentTotal()
 
-     {
 
-         $model = CommentInfo::find()->where(['entity' => $this->entity, 'entity_id' => $this->entity_id])->one();
 
-         $total = Comment::activeCount($this->entity, $this->entity_id);
 
-         if($model == null && $total != 0) {
 
-             $model = new CommentInfo();
 
-             $model->entity =$this->entity;
 
-             $model->entity_id = $this->entity_id;
 
-             $model->total =$total;
 
-             $model->save();
 
-         } else {
 
-             $model->total = $total;
 
-             $model->save();
 
-         }
 
-     }
 
-     public static function activeCount($entity, $entity_id = NULL)
 
-     {
 
-         return self::find()->where([
 
-             'entity' => $entity,
 
-             'entity_id' => $entity_id,
 
-             'status' => 1
 
-         ])->count();
 
-     }
 
-     /**
 
-      * 关联实体列表
 
-      * @return array
 
-      * @author nodelog
 
-      */
 
-     public static function getEntityList()
 
-     {
 
-         return [
 
-             'clock' => Clock::className(),//朋友圈
 
-             'goods' => Goods::className(),//商品
 
-             'article' => Article::className(),//文章
 
-         ];
 
-     }
 
- }
 
 
  |