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(),//文章
- ];
- }
- }
|