AddonsCourseDiscuss.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace addons\Course\common\models;
  3. use addons\Course\common\enums\CourseEnum;
  4. use common\enums\StatusEnum;
  5. use common\models\base\User;
  6. use Yii;
  7. /**
  8. * This is the model class for table "{{%addons_course_discuss}}".
  9. *
  10. * @property int $id
  11. * @property int $mall_id
  12. * @property int $uid 用户id
  13. * @property int $cid 评论的课程id
  14. * @property int $cpid 评论的章节id
  15. * @property string|null $content 评论内容
  16. * @property int $score 课程评分
  17. * @property int $is_anonymous 是否匿名,1:是,0:不是
  18. * @property int $is_shield 是否屏蔽评论,1:是,0:否
  19. * @property int $status 状态 0禁用,1启用,-1是删除
  20. * @property int $created_at
  21. * @property int $updated_at
  22. */
  23. class AddonsCourseDiscuss extends \common\models\base\BaseActiveRecord
  24. {
  25. /**
  26. * {@inheritdoc}
  27. */
  28. public static function tableName()
  29. {
  30. return '{{%addons_course_discuss}}';
  31. }
  32. /**
  33. * {@inheritdoc}
  34. */
  35. public function rules()
  36. {
  37. return [
  38. [['mall_id', 'uid', 'cid', 'cpid', 'score', 'is_anonymous', 'is_shield', 'status', 'created_at', 'updated_at'], 'integer'],
  39. [['content'], 'string'],
  40. ];
  41. }
  42. /**
  43. * {@inheritdoc}
  44. */
  45. public function attributeLabels()
  46. {
  47. return [
  48. 'id' => 'ID',
  49. 'mall_id' => 'Mall ID',
  50. 'uid' => '用户id',
  51. 'cid' => '评论的课程id',
  52. 'cpid' => '评论的章节id',
  53. 'content' => '评论内容',
  54. 'score' => '课程评分',
  55. 'is_anonymous' => '是否匿名,1:是,0:不是',
  56. 'is_shield' => '是否屏蔽评论,1:是,0:否',
  57. 'status' => '状态 0禁用,1启用,-1是删除',
  58. 'created_at' => 'Created At',
  59. 'updated_at' => 'Updated At',
  60. ];
  61. }
  62. // 关联模型
  63. public function getUser()
  64. {
  65. return $this->hasOne(User::class, ['id' => 'uid'])->select('nickname,avatar_url,id');
  66. }
  67. public static function setData(array $params)
  68. {
  69. try {
  70. if (!empty($params['id'])) {
  71. $model = self::findOne(['mall_id' => $params['mall_id'], 'id' => $params['id'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
  72. if (empty($model)) throw new \Exception('服务不存在或已删除');
  73. } else {
  74. $model = new self();
  75. $model->loadDefaultValues();
  76. }
  77. if (!empty($params['content'])) {
  78. $params['content'] = json_encode($params['content']);
  79. }
  80. if (!$model->load($params, '')) throw new \Exception($model->getErrorMessage());
  81. if (!$model->save()) throw new \Exception($model->getErrorMessage());
  82. return $model;
  83. } catch (\Exception $e) {
  84. self::$static_error = $e->getMessage();
  85. return false;
  86. }
  87. }
  88. /**
  89. * @name: allDiscussList
  90. * @msg: 获取某一课程下所有评论,如果是匿名的,处理用户名和头像
  91. * @param {Int} $course_id
  92. * @param {Int} $pageSize
  93. * @return {*}
  94. */
  95. public static function allDiscussList(int $course_id, $mall_id)
  96. {
  97. if (empty($course_id)) {
  98. // 返回 空数组
  99. $course_id = 0;
  100. }
  101. $where[] = ['status' => StatusEnum::ENABLED, 'mall_id' => $mall_id, 'cid' => $course_id, 'is_shield' => CourseEnum::IS_SHIELD_ZERO];
  102. $params['where'] = $where;
  103. $params['with'] =['user'];
  104. $params['select'] = 'id,uid,cid as course_id,content,score,is_anonymous,created_at';
  105. $params['order'] = 'created_at desc';
  106. $params['page'] = \Yii::$app->request->get('page', 1);
  107. $params['limit'] = \Yii::$app->request->get('limit', 20);
  108. $discuss_data = self::listPage($params);
  109. if (!empty($discuss_data)) {
  110. $base_url = \yii\helpers\Url::home(true);
  111. // 处理匿名评论
  112. foreach ($discuss_data['list'] as $dk => &$dv) {
  113. $discuss_data['list'][$dk]['content'] = self::decodeContent($dv['content']);
  114. if (0 === (int)$dv['uid']) {
  115. $dv['username'] = $discuss_data['list'][$dk]['nickname'] = '系统管理员';
  116. $discuss_data['list'][$dk]['avatar_url'] = $base_url . '/static/images/login/user.png';
  117. $discuss_data['list'][$dk]['user_id'] = 0;
  118. }
  119. if (1 == $dv['is_anonymous']) {
  120. $dv['nickname'] = '**匿名用户**';
  121. $dv['avatar_url'] = $base_url . 'static/images/login/user.png';
  122. $dv['user'] = '';
  123. }
  124. unset($discuss_data['list'][$dk]['uid'], $discuss_data['list'][$dk]['is_anonymous']);
  125. }
  126. }
  127. return $discuss_data;
  128. }
  129. public static function decodeContent($content)
  130. {
  131. if (empty($content)) {
  132. return $content;
  133. }
  134. return json_decode($content);
  135. }
  136. }