MessageController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use App\Models\Message;
  4. use App\Models\User;
  5. use Illuminate\Http\Request;
  6. use App\Http\Requests;
  7. use App\Http\Controllers\Controller;
  8. use Illuminate\Support\Facades\Config;
  9. use Illuminate\Support\Facades\DB;
  10. class MessageController extends Controller
  11. {
  12. /*问题创建校验*/
  13. protected $validateRules = [
  14. 'content' => 'required|max:65535',
  15. 'to_user_id' => 'required|integer',
  16. ];
  17. /**
  18. * 我的私信首页
  19. * @return \Illuminate\Http\Response
  20. */
  21. public function index()
  22. {
  23. $loginUser = Auth()->user();
  24. /*子查询进行分组*/
  25. $subQuery = Message::where("to_user_id","=",$loginUser->id)->where("to_deleted","=",0)->orderBy("created_at","desc");
  26. /*联查子查询再进行排序*/
  27. $messages = DB::table(DB::raw("({$subQuery->toSql()}) as t "))
  28. ->mergeBindings($subQuery->getQuery())
  29. ->select("*")
  30. ->groupBy("from_user_id")
  31. ->orderBy("created_at","desc")
  32. ->paginate(10);
  33. $messages->map(function($message) {
  34. $message->fromUser = User::find($message->from_user_id);
  35. });
  36. return view('theme::message.index')->with('messages',$messages);
  37. }
  38. /**
  39. * Show the form for creating a new resource.
  40. *
  41. * @return \Illuminate\Http\Response
  42. */
  43. public function create()
  44. {
  45. //
  46. }
  47. /**
  48. * Store a newly created resource in storage.
  49. *
  50. * @param \Illuminate\Http\Request $request
  51. * @return \Illuminate\Http\Response
  52. */
  53. public function store(Request $request)
  54. {
  55. $loginUser = $request->user();
  56. $toUser = User::find($request->input('to_user_id'));
  57. if(!$toUser){
  58. abort(404);
  59. }
  60. $this->validate($request,$this->validateRules);
  61. $data = [
  62. 'from_user_id' => $loginUser->id,
  63. 'to_user_id' => $toUser->id,
  64. 'content' => $request->input('content')
  65. ];
  66. $message = Message::create($data);
  67. if($message){
  68. return $this->success(route('auth.message.show',['user_id'=>$toUser->id]),'消息发送成功');
  69. }
  70. return $this->error("消息发送失败,请稍后再试",route('website.index'));
  71. }
  72. /**
  73. * Display the specified resource.
  74. *
  75. * @param int $id
  76. * @return \Illuminate\Http\Response
  77. */
  78. public function show($user_id)
  79. {
  80. $toUser = User::find($user_id);
  81. if(!$toUser){
  82. abort(404);
  83. }
  84. /*设置该对话全部未读为已读*/
  85. Message::where('to_user_id','=',Auth()->user()->id)->where('is_read','=',0)->update(['is_read'=>1]);
  86. $messages = Message::where(function($query) use ($toUser) {
  87. $query->where('to_user_id','=',Auth()->user()->id)
  88. ->where('from_user_id','=',$toUser->id)
  89. ->where('to_deleted','=',0);
  90. })->orWhere(function($query) use ($toUser) {
  91. $query->where('to_user_id','=',$toUser->id)
  92. ->where('from_user_id','=',Auth()->user()->id)
  93. ->where('from_deleted','=',0);
  94. })->orderBy('created_at','desc')->paginate(10);
  95. return view('theme::message.show')->with('toUser',$toUser)->with('messages',$messages);
  96. }
  97. /**
  98. * Show the form for editing the specified resource.
  99. *
  100. * @param int $id
  101. * @return \Illuminate\Http\Response
  102. */
  103. public function edit($id)
  104. {
  105. //
  106. }
  107. /**
  108. * Update the specified resource in storage.
  109. *
  110. * @param \Illuminate\Http\Request $request
  111. * @param int $id
  112. * @return \Illuminate\Http\Response
  113. */
  114. public function update(Request $request, $id)
  115. {
  116. //
  117. }
  118. /**
  119. * Remove the specified resource from storage.
  120. *
  121. * @param int $id
  122. * @return \Illuminate\Http\Response
  123. */
  124. public function destroy(Request $request,$id)
  125. {
  126. $loginUser = $request->user();
  127. $message = Message::find($id);
  128. if(!$message){
  129. abort(404);
  130. }
  131. /*收件人删除*/
  132. if( $message->to_user_id === $loginUser->id )
  133. {
  134. $message->to_deleted = 1;
  135. $message->save();
  136. }else if( $message->from_user_id === $loginUser->id ){
  137. $message->from_deleted = 1;
  138. $message->save();
  139. }else{
  140. return response('error');
  141. }
  142. /*删除双方都删除过的信息*/
  143. if( $message->to_deleted == 1 && $message->from_deleted == 1 ){
  144. $message->delete();
  145. }
  146. return response('ok');
  147. }
  148. public function destroySession(Request $request,$from_user_id)
  149. {
  150. $loginUser = $request->user();
  151. /*删除给我的消息*/
  152. Message::where('to_user_id','=',$loginUser->id)
  153. ->where('from_user_id','=',$from_user_id)
  154. ->update(['to_deleted'=>1]);
  155. /*删除我发的消息*/
  156. Message::where('to_user_id','=',$from_user_id)
  157. ->where('from_user_id','=',$loginUser->id)
  158. ->update(['from_deleted'=>1]);
  159. /*删除双方都删除的所有消息*/
  160. Message::where('to_deleted','=',1)->where('from_deleted','=',1)->delete();
  161. return response('ok');
  162. }
  163. }