DefaultController.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: NODELOG
  5. * Date: 2016/12/11
  6. * Time: 下午6:13
  7. */
  8. namespace plugins\danmu\controllers;
  9. use common\components\Controller;
  10. use common\models\Comment;
  11. use common\modules\user\models\User;
  12. use yii\data\Pagination;
  13. use yii\helpers\HtmlPurifier;
  14. use yii\helpers\Url;
  15. use Yii;
  16. class DefaultController extends Controller
  17. {
  18. // 图文弹幕
  19. public function actionIndex()
  20. {
  21. Yii::$app->response->format = 'json';
  22. $entityId = \Yii::$app->request->post('entity_id');
  23. $entity = \Yii::$app->request->post('entity');
  24. $time = \Yii::$app->request->post('time');
  25. $page = \Yii::$app->request->post('page');
  26. $query = Comment::find()->where(['entity' => $entity, 'entity_id' => $entityId]);
  27. $countQuery = clone $query;
  28. $pages = new Pagination(['totalCount' => $countQuery->count()]);
  29. $models = $query->alias('comment')->offset($pages->offset)
  30. ->orderBy('created_at desc')
  31. ->limit($pages->limit)
  32. ->with('user')
  33. ->all();
  34. $list = array_map(function ($value) {
  35. $item['id'] = $value->id;
  36. $item['avatar'] = Url::to($value->user->getAvatar(96), true);
  37. $item['nickname'] = $value->user->username;
  38. $item['content'] = HtmlPurifier::process(preg_replace('/(@\S+?\s)/', '', $value->content));
  39. $isRe = preg_match('/@(\S+?)\s/', $value->content, $matches);
  40. $item['isRe'] = $isRe > 0;
  41. if ($isRe > 0) {
  42. $item['re_nickname'] = $matches[1];
  43. $reUser = User::findByUsername($matches[1]);
  44. $item['re_avatar'] = $reUser !== null ? Url::to($reUser->getAvatar(96), true) : '';
  45. }
  46. return $item;
  47. }, $models);
  48. $hasNext = 0;
  49. if ($page < $pages->pageCount) {
  50. $hasNext = 1;
  51. }
  52. return [
  53. 'list' => $list,
  54. 'hasNext' => $hasNext,
  55. 'time' => $time,
  56. ];
  57. }
  58. }