/** * Send new message to another contributor in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function send(Request $request) { /* * -------------------------------------------------------------------------- * Create message * -------------------------------------------------------------------------- * Each conversation will handle by one message record as identity, first * check if contributor sender or receiver ever make conversation, if they * did not then create new one of message. */ $sender = $request->input('contributor_id'); $receiver = $request->input('receiver_id'); $lastMessage = $this->conversation->whereSender($sender)->whereReceiver($receiver)->orWhere('sender', $receiver)->whereReceiver($sender)->first(); if (count($lastMessage) == 0) { $message = new Message(); $message->save(); $messageId = $message->id; } else { $messageId = $lastMessage->message_id; } /* * -------------------------------------------------------------------------- * Create conversation * -------------------------------------------------------------------------- * Populate message id from last conversation or last inserted new message * then create the first conversation or continue with last message, check * if there is request of attachment, if so then upload it. */ $conversation = new Conversation(['message_id' => $messageId, 'sender' => $sender, 'receiver' => $receiver, 'message' => $request->input('message')]); $result = $conversation->save(); if ($result) { $contributorSender = Contributor::findOrFail($sender); $contributor = Contributor::findOrFail($receiver); if ($contributor->email_message) { $this->sendEmailNotification($contributorSender, $contributor, $request->input('message')); } $conversation->broadcastConversation($contributorSender, $contributor, $request->input('message')); } return response()->json(['request_id' => uniqid(), 'status' => $result ? 'success' : 'failure', 'timestamp' => Carbon::now()], $result ? 200 : 500); }
/** * Send new message to another contributor in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function send(Request $request) { /* * -------------------------------------------------------------------------- * Create message * -------------------------------------------------------------------------- * Each conversation will handle by one message record as identity, first * check if contributor sender or receiver ever make conversation, if they * did not then create new one of message. */ $sender = Auth::user()->id; $receiver = (int) $request->input('contributor_id'); $lastMessage = $this->conversation->whereSender($sender)->whereReceiver($receiver)->orWhere('sender', $receiver)->whereReceiver($sender)->first(); if (count($lastMessage) == 0) { $message = new Message(); $message->save(); $messageId = $message->id; } else { $messageId = $lastMessage->message_id; } /* * -------------------------------------------------------------------------- * Create conversation * -------------------------------------------------------------------------- * Populate message id from last conversation or last inserted new message * then create the first conversation or continue with last message, check * if there is request of attachment, if so then upload it. */ $conversation = new Conversation(['message_id' => $messageId, 'sender' => $sender, 'receiver' => $receiver, 'message' => $request->input('message')]); if ($conversation->save()) { $contributor = Contributor::findOrFail($receiver); if ($contributor->email_message) { $this->sendEmailNotification(Auth::user(), $contributor, $request->input('message')); } $conversation->broadcastConversation(Auth::user(), $contributor, $request->input('message')); if ($request->has('async') && $request->ajax()) { $image = new Uploader(); if ($image->upload($request, 'attachment', base_path('public/file/'), 'attachment_' . uniqid())) { $attachment = new Attachment(); $attachment->conversation_id = $conversation->id; $attachment->file = $request->input('attachment'); if (!$attachment->save()) { return false; } } return 'sent'; } return redirect()->back()->with(['status' => 'success', 'message' => Lang::get('alert.message.send', ['receiver' => $contributor->name])]); } if ($request->has('async') && $request->ajax()) { return false; } return redirect()->back()->with(['status' => 'danger', 'message' => Lang::get('alert.error.database')]); }