Просмотр файла app/Controllers/ApiController.php

Размер файла: 5.52Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Controllers;
  6.  
  7. use App\Models\Message;
  8. use App\Models\Post;
  9. use App\Models\Topic;
  10. use App\Models\User;
  11. use Illuminate\Http\Request;
  12.  
  13. class ApiController extends BaseController
  14. {
  15. /**
  16. * Главная страница
  17. *
  18. * @return string
  19. */
  20. public function index(): string
  21. {
  22. return view('api/index');
  23. }
  24.  
  25. /**
  26. * Api пользователей
  27. *
  28. * @param Request $request
  29. *
  30. * @return void
  31. */
  32. public function users(Request $request): void
  33. {
  34. header('Content-type: application/json');
  35. header('Content-Disposition: inline; filename="users.json";');
  36.  
  37. $token = $request->input('token');
  38.  
  39. if (! $token) {
  40. echo json_encode(['error' => 'no token']);
  41. exit();
  42. }
  43.  
  44. $user = User::query()->where('apikey', $token)->first();
  45.  
  46. if (! $user) {
  47. echo json_encode(['error' => 'no user']);
  48. exit();
  49. }
  50.  
  51. echo json_encode([
  52. 'login' => $user->login,
  53. 'email' => $user->email,
  54. 'name' => $user->name,
  55. 'level' => $user->level,
  56. 'country' => $user->country,
  57. 'city' => $user->city,
  58. 'site' => $user->site,
  59. 'gender' => $user->gender,
  60. 'birthday' => $user->birthday,
  61. 'newwall' => $user->newwall,
  62. 'point' => $user->point,
  63. 'money' => $user->money,
  64. 'allprivat' => $user->getCountMessages(),
  65. 'newprivat' => $user->newprivat,
  66. 'status' => $user->getStatus(),
  67. 'avatar' => $user->avatar ? siteUrl(true) . $user->avatar : null,
  68. 'picture' => $user->picture ? siteUrl(true) . $user->picture : null,
  69. 'rating' => $user->rating,
  70. 'lastlogin' => $user->updated_at,
  71. ]);
  72. }
  73.  
  74. /**
  75. * Api приватных сообщений
  76. *
  77. * @param Request $request
  78. *
  79. * @return void
  80. */
  81. public function messages(Request $request): void
  82. {
  83. header('Content-type: application/json');
  84. header('Content-Disposition: inline; filename="messages.json";');
  85.  
  86. $token = $request->input('token');
  87. $count = int($request->input('count', 10));
  88.  
  89. if (! $token) {
  90. echo json_encode(['error' => 'no token']);
  91. exit();
  92. }
  93.  
  94. $user = User::query()->where('apikey', $token)->first();
  95. if (! $user) {
  96. echo json_encode(['error' => 'no user']);
  97. exit();
  98. }
  99.  
  100. $messages = Message::query()
  101. ->where('user_id', $user->id)
  102. ->where('type', Message::IN)
  103. ->orderByDesc('created_at')
  104. ->limit($count)
  105. ->get();
  106.  
  107. if ($messages->isEmpty()) {
  108. echo json_encode(['error' => 'no messages']);
  109. exit();
  110. }
  111.  
  112. $total = $messages->count();
  113.  
  114. $msg = [];
  115. foreach ($messages as $data) {
  116. $data->text = bbCode($data->text);
  117.  
  118. $msg[] = [
  119. 'author_id' => $data->author_id,
  120. 'login' => $data->author->id ? $data->author->login : 'Система',
  121. 'text' => $data->text,
  122. 'reading' => $data->reading,
  123. 'created_at' => $data->created_at,
  124. ];
  125. }
  126.  
  127. echo json_encode([
  128. 'total' => $total,
  129. 'messages' => $msg
  130. ]);
  131. }
  132.  
  133. /**
  134. * Api постов темы в форуме
  135. *
  136. * @param Request $request
  137. *
  138. * @return void
  139. */
  140. public function forums(Request $request): void
  141. {
  142. header('Content-type: application/json');
  143. header('Content-Disposition: inline; filename="forums.json";');
  144.  
  145. $token = $request->input('token');
  146. $id = int($request->input('id'));
  147.  
  148. if (! $token) {
  149. echo json_encode(['error' => 'no token']);
  150. exit();
  151. }
  152.  
  153. $user = User::query()->where('apikey', $token)->first();
  154. if (! $user) {
  155. echo json_encode(['error' => 'no user']);
  156. exit();
  157. }
  158.  
  159. /** @var Topic $topic */
  160. $topic = Topic::query()->find($id);
  161. if (! $topic) {
  162. echo json_encode(['error' => 'no topic']);
  163. exit();
  164. }
  165.  
  166. $posts = Post::query()
  167. ->where('topic_id', $id)
  168. ->orderBy('created_at')
  169. ->get();
  170.  
  171. $messages = [];
  172. foreach ($posts as $post) {
  173. $post->text = bbCode($post->text);
  174.  
  175. $messages[] = [
  176. 'post_id' => $post->id,
  177. 'user_id' => $post->user_id,
  178. 'login' => $post->user->login,
  179. 'text' => $post->text,
  180. 'rating' => $post->rating,
  181. 'updated_at' => $post->updated_at,
  182. 'created_at' => $post->created_at,
  183. ];
  184. }
  185.  
  186. echo json_encode([
  187. 'id' => $topic->id,
  188. 'forum_id' => $topic->forum_id,
  189. 'user_id' => $topic->user_id,
  190. 'login' => $topic->user->login,
  191. 'title' => $topic->title,
  192. 'closed' => $topic->closed,
  193. 'locked' => $topic->locked,
  194. 'note' => $topic->note,
  195. 'moderators' => $topic->moderators,
  196. 'updated_at' => $topic->updated_at,
  197. 'created_at' => $topic->created_at,
  198. 'messages' => $messages,
  199. ]);
  200. }
  201. }