user(); $medical_center_id = null; if ($User->hasRole('Supervisor') || $User->hasRole('User')) { $medical_center_id = $User->medical_center_id; } $Users = User::where(function ($query) use ($User) { $query->whereHas('messagesSent', function ($q) use ($User) { $q->where('recipient_user_id', $User->id); }) ->orWhereHas('messagesReceived', function ($q) use ($User) { $q->where('sender_user_id', $User->id); }); }) ->when($medical_center_id, function ($query) use ($medical_center_id) { $query->where('medical_center_id', $medical_center_id); }) ->paginate(10); foreach ($Users as $user) { $user->unread_messages_count = Message::where('sender_user_id', $user->id) ->where('recipient_user_id', $User->id) ->where('status', 'UnRead') ->count(); $user->messages_count = Message::where(function ($query) use ($user, $User) { $query->where('sender_user_id', $user->id) ->where('recipient_user_id', $User->id); })->orWhere(function ($query) use ($user, $User) { $query->where('sender_user_id', $User->id) ->where('recipient_user_id', $user->id); })->count(); } return MessageResponse::data($Users); } public function create() { } public function show($UserID) { // if (!auth('api')->user()->can('show', $Message)) { // return MessageResponse::error(trans('messages.access_denied')); // } $User = User::findOrFail($UserID); // $SendMessages = Message::where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $UserID)->get(); $ReceivedMessages = Message::where('sender_user_id', $UserID)->where('recipient_user_id', auth('api')->user()->id)->get(); $Messages = Message::where(function ($query) use ($UserID) { $query->where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $UserID); })->orWhere(function ($query) use ($UserID) { $query->where('sender_user_id', $UserID)->where('recipient_user_id', auth('api')->user()->id); })->get(); foreach ($ReceivedMessages as $ReceivedMessage) { $ReceivedMessage->status = 'Read'; $ReceivedMessage->save(); } return MessageResponse::data($Messages); } public function store(StoreMessageRequest $request) { $MessageData = [ // 'title' => $request->title, 'text' => $request->message, 'sender_user_id' => auth('api')->user()->id, 'recipient_user_id' => $request->user_id, 'status' => 'UnRead', ]; Message::create($MessageData); return MessageResponse::success(trans('messages.success')); } public function edit(Message $Message) { // return MessageResponse::data($Message); } public function update(StoreMessageRequest $request, Message $Message) { // $Message->update($request->all()); // return MessageResponse::success(trans('messages.success')); } public function destroy(Message $Message) { if (auth('api')->user()->cant('delete', $Message)) { return MessageResponse::error(trans('messages.access_denied')); } $Message->delete(); return MessageResponse::success(trans('messages.success')); } public function destroyUserMessages(User $User) { // if (auth('api')->user()->cant('deleteUserMessage', Message::class)) { // return MessageResponse::error(trans('messages.access_denied')); // } Message::where(function ($query) use ($User) { $query->where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $User->id); })->orWhere(function ($query) use ($User) { $query->where('sender_user_id', $User->id)->where('recipient_user_id', auth('api')->user()->id); })->get()->each->delete(); return MessageResponse::success(trans('messages.success')); } }