MessageController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Message;
  4. use App\Models\MessageComment;
  5. use App\Http\Requests\StoremessageRequest;
  6. use App\Http\Requests\StoreMessageCommentRequest;
  7. use App\Http\Requests\UpdatemessageRequest;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\DB;
  10. use Illuminate\Support\Facades\File;
  11. use Illuminate\Support\Facades\Storage;
  12. class MessageController extends Controller
  13. {
  14. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return \Illuminate\Http\Response
  18. */
  19. public function index()
  20. {
  21. //
  22. $message = Message::all();
  23. return $message;
  24. }
  25. /**
  26. * Show the form for creating a new resource.
  27. *
  28. * @return \Illuminate\Http\Response
  29. */
  30. public function create()
  31. {
  32. //
  33. }
  34. /**
  35. * Store a newly created resource in storage.
  36. *
  37. * @param \App\Http\Requests\StoremessageRequest $request
  38. * @return \Illuminate\Http\Response
  39. */
  40. public function store(Request $request)
  41. {
  42. //
  43. $preview = "";
  44. if ($request->preview == "preview") {
  45. $preview = str_replace("\n", "", $request->content);
  46. $preview = str_replace(" ", "", $preview);
  47. $preview = strip_tags($preview);
  48. $preview = mb_substr($preview, 0, 55) . "...";
  49. }
  50. $path = $request->file('thumbnail')->store('public');
  51. $url = Storage::url($path);
  52. $message_comment = Message::create([
  53. 'title' => $request->title,
  54. 'content' => $request->content,
  55. 'author_id' => $request->User()->id,
  56. 'preview' => $preview,
  57. 'tag' => $request->tag,
  58. 'thumbnail' => $url,
  59. 'created_at' => now(),
  60. ]);
  61. return $message_comment;
  62. }
  63. /**
  64. * Store a newly created resource in storage.
  65. *
  66. * @param \App\Http\Requests\StoreMessageCommentRequest $request
  67. * @return \Illuminate\Http\Response
  68. */
  69. public function storeComment(StoreMessageCommentRequest $request)
  70. {
  71. //
  72. $message_comment = MessageComment::Create([
  73. 'content' => $request->content,
  74. 'author_id' => $request->User()->id,
  75. 'message_id' => $request->message_id,
  76. ]);
  77. return $message_comment;
  78. }
  79. /**
  80. * Display the specified resource.
  81. *
  82. * @param \App\Models\message $message
  83. * @return \Illuminate\Http\Response
  84. */
  85. public function show(Request $request, message $message)
  86. {
  87. //
  88. $message = Message::where('id', '=', $request->id)->get()[0];
  89. $comment = MessageComment::where('message_id', '=', $request->id)->get();
  90. $response = [
  91. 'blog' => $message,
  92. 'comments' => $comment,
  93. ];
  94. return response($response, 201);
  95. }
  96. /**
  97. * Show the form for editing the specified resource.
  98. *
  99. * @param \App\Models\message $message
  100. * @return \Illuminate\Http\Response
  101. */
  102. public function edit(message $message)
  103. {
  104. //
  105. }
  106. /**
  107. * Update the specified resource in storage.
  108. *
  109. * @param \App\Http\Requests\UpdatemessageRequest $request
  110. * @param \App\Models\message $message
  111. * @return \Illuminate\Http\Response
  112. */
  113. public function update(UpdatemessageRequest $request, message $message)
  114. {
  115. //
  116. $preview = "";
  117. if ($request->preview == "preview") {
  118. $preview = str_replace("\n", "", $request->content);
  119. $preview = str_replace(" ", "", $preview);
  120. $preview = strip_tags($preview);
  121. $preview = mb_substr($preview, 0, 55) . "...";
  122. }
  123. if (is_string($request->thumbnail)) {
  124. $url = $request->thumbnail;
  125. } else {
  126. $thumbnail = Message::where('id', $request->id)->get()[0]->thumbnail;
  127. $path = $request->file('thumbnail')->store('public');
  128. $url = Storage::url($path);
  129. File::delete($thumbnail);
  130. }
  131. $message = Message::where('id', $request->id)
  132. ->where('author_id', $request->User()->id)
  133. ->update([
  134. 'title' => $request->title,
  135. 'content' => $request->content,
  136. 'preview' => $preview,
  137. 'tag' => $request->tag,
  138. 'thumbnail' => $url,
  139. 'updated_at' => now(),
  140. ]);
  141. if ($message == 0) {
  142. abort(403, '你沒有編輯此貼文的權限!');
  143. }
  144. return $message;
  145. }
  146. /**
  147. * Remove the specified resource from storage.
  148. *
  149. * @param \App\Models\message $message
  150. * @return \Illuminate\Http\Response
  151. */
  152. public function destroy(Request $request, Message $message)
  153. {
  154. $thumbnail = Message::where('id', $request->id)->get()[0]->thumbnail;
  155. // if ($request->user()->tokenCan('Admin')) {
  156. // $message = Message::where('id', $request->id)->delete();
  157. // } else if ($request->user()->tokenCan('User')) {
  158. // $message = Message::where('id', $request->id)
  159. // ->where('author_id', $request->User()->id)->delete();
  160. // } else {
  161. // abort(403, '你沒有刪除此貼文的權限!');
  162. // }
  163. //$message > 0 && !
  164. if (!str_contains($thumbnail, 'http')) {
  165. Storage::delete($thumbnail);
  166. }
  167. return $thumbnail;
  168. }
  169. public function count()
  170. {
  171. $count = DB::select('SELECT [messages].[id],Count([message_comments].[id]) AS count FROM [laravel].[dbo].[messages]
  172. LEFT JOIN [message_comments] ON [message_comments].[message_id] = [messages].[id]
  173. GROUP BY [messages].[id]');
  174. return $count;
  175. }
  176. public function recent()
  177. {
  178. //
  179. $message = Message::all()->sortByDesc('created_at')->take(4);
  180. $categories = [
  181. ['category' => '台灣小吃', 'icon' => 'SlackIcon'],
  182. ['category' => '美食', 'icon' => 'CoffeeIcon'],
  183. ['category' => '熱炒店', 'icon' => 'SunIcon'],
  184. ['category' => '吃到飽', 'icon' => 'ThumbsUpIcon'],
  185. ];
  186. $response = [
  187. 'recentPosts' => $message,
  188. 'categories' => $categories,
  189. ];
  190. return $response;
  191. }
  192. }