Forum.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\api\controller;
  4. use app\BaseController;
  5. use app\model\api\ForumPost;
  6. use app\model\api\ForumComment;
  7. use app\model\api\User as UserModel;
  8. use app\Request;
  9. use library\services\UtilService;
  10. use think\facade\Db;
  11. /**
  12. * 论坛控制器
  13. */
  14. class Forum extends BaseController
  15. {
  16. /**
  17. * 检查用户发帖权限
  18. * @param int $uid
  19. * @return bool
  20. */
  21. private function checkPostPermission($uid)
  22. {
  23. $user = Db::name('user')->where('uid', $uid)->find();
  24. return !empty($user) && $user['permission'] == 1;
  25. }
  26. /**
  27. * 帖子列表
  28. * @param Request $request
  29. */
  30. public function postList(Request $request)
  31. {
  32. $post = UtilService::getMore([
  33. ['page', 1],
  34. ['pageSize', 20],
  35. ], $request);
  36. $result = (new ForumPost())->getList((int)$post['page'], (int)$post['pageSize']);
  37. return app('json')->success($result);
  38. }
  39. /**
  40. * 帖子详情
  41. * @param Request $request
  42. */
  43. public function postDetail(Request $request)
  44. {
  45. $post = UtilService::getMore([
  46. ['id', 0, 'empty', '参数错误'],
  47. ], $request);
  48. $detail = (new ForumPost())->getDetail((int)$post['id']);
  49. if (!$detail) {
  50. return app('json')->fail('帖子不存在');
  51. }
  52. return app('json')->success($detail);
  53. }
  54. /**
  55. * 发布帖子
  56. * @param Request $request
  57. */
  58. public function createPost(Request $request)
  59. {
  60. $uid = $request->user['uid'];
  61. // 检查发帖权限
  62. if (!$this->checkPostPermission($uid)) {
  63. return app('json')->fail('您没有发帖权限');
  64. }
  65. $postData = UtilService::getMore([
  66. ['title', '', 'empty', '请填写标题'],
  67. ['content', '', 'empty', '请填写内容'],
  68. ['images', []],
  69. ], $request);
  70. // 验证标题长度
  71. if (mb_strlen($postData['title']) > 200) {
  72. return app('json')->fail('标题不能超过200个字符');
  73. }
  74. // 验证内容长度
  75. if (mb_strlen($postData['content']) < 10) {
  76. return app('json')->fail('内容不能少于10个字符');
  77. }
  78. $result = (new ForumPost())->createPost($uid, $postData);
  79. if ($result[0]) {
  80. return app('json')->success($result[1]);
  81. } else {
  82. return app('json')->fail($result[1]);
  83. }
  84. }
  85. /**
  86. * 我的帖子列表
  87. * @param Request $request
  88. */
  89. public function myPosts(Request $request)
  90. {
  91. $uid = $request->user['uid'];
  92. $post = UtilService::getMore([
  93. ['page', 1],
  94. ['pageSize', 20],
  95. ], $request);
  96. $result = (new ForumPost())->getUserPosts($uid, (int)$post['page'], (int)$post['pageSize']);
  97. return app('json')->success($result);
  98. }
  99. /**
  100. * 评论列表
  101. * @param Request $request
  102. */
  103. public function commentList(Request $request)
  104. {
  105. $post = UtilService::getMore([
  106. ['post_id', 0, 'empty', '参数错误'],
  107. ['page', 1],
  108. ['pageSize', 20],
  109. ], $request);
  110. $result = (new ForumComment())->getList((int)$post['post_id'], (int)$post['page'], (int)$post['pageSize']);
  111. return app('json')->success($result);
  112. }
  113. /**
  114. * 添加评论
  115. * @param Request $request
  116. */
  117. public function addComment(Request $request)
  118. {
  119. $uid = $request->user['uid'];
  120. $postData = UtilService::getMore([
  121. ['post_id', 0, 'empty', '参数错误'],
  122. ['content', '', 'empty', '请填写评论内容'],
  123. ], $request);
  124. // 验证内容长度
  125. if (mb_strlen($postData['content']) < 1) {
  126. return app('json')->fail('评论内容不能为空');
  127. }
  128. if (mb_strlen($postData['content']) > 1000) {
  129. return app('json')->fail('评论内容不能超过1000个字符');
  130. }
  131. $result = (new ForumComment())->addComment($uid, (int)$postData['post_id'], $postData['content']);
  132. if ($result[0]) {
  133. return app('json')->success($result[1], $result[2] ?? []);
  134. } else {
  135. return app('json')->fail($result[1]);
  136. }
  137. }
  138. /**
  139. * 删除评论
  140. * @param Request $request
  141. */
  142. public function deleteComment(Request $request)
  143. {
  144. $uid = $request->user['uid'];
  145. $post = UtilService::getMore([
  146. ['id', 0, 'empty', '参数错误'],
  147. ], $request);
  148. $result = (new ForumComment())->deleteComment((int)$post['id'], $uid);
  149. if ($result[0]) {
  150. return app('json')->success($result[1]);
  151. } else {
  152. return app('json')->fail($result[1]);
  153. }
  154. }
  155. /**
  156. * 我的评论列表
  157. * @param Request $request
  158. */
  159. public function myComments(Request $request)
  160. {
  161. $uid = $request->user['uid'];
  162. $post = UtilService::getMore([
  163. ['page', 1],
  164. ['pageSize', 20],
  165. ], $request);
  166. $result = (new ForumComment())->getUserComments($uid, (int)$post['page'], (int)$post['pageSize']);
  167. return app('json')->success($result);
  168. }
  169. /**
  170. * 检查发帖权限
  171. * @param Request $request
  172. */
  173. public function checkPermission(Request $request)
  174. {
  175. $uid = $request->user['uid'];
  176. $hasPermission = $this->checkPostPermission($uid);
  177. return app('json')->success('查询成功', [
  178. 'has_permission' => $hasPermission
  179. ]);
  180. }
  181. }