You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
8.5 KiB
224 lines
8.5 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Vendor;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\CentralLogics\Helpers;
|
|
use App\Models\Conversation;
|
|
use App\Models\UserInfo;
|
|
use App\Models\Message;
|
|
use App\Models\User;
|
|
use App\Models\DeliveryMan;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class ConversationController extends Controller
|
|
{
|
|
public function list(Request $request)
|
|
{
|
|
$vendor = Helpers::get_vendor_data();
|
|
$vendor = UserInfo::where('vendor_id',$vendor->id)->first();
|
|
if($vendor){
|
|
$conversations = Conversation::with(['sender','receiver', 'last_message'])->WhereUser($vendor->id);
|
|
if($request->query('key')) {
|
|
$key = explode(' ', $request->get('key'));
|
|
$conversations = $conversations->where(function($qu)use($key){
|
|
$qu->whereHas('sender',function($query)use($key){
|
|
foreach ($key as $value) {
|
|
$query->where('f_name', 'like', "%{$value}%")
|
|
->orWhere('l_name', 'like', "%{$value}%")
|
|
->orWhere('phone', 'like', "%{$value}%");
|
|
}
|
|
})
|
|
->orWhereHas('receiver',function($query1)use($key){
|
|
foreach ($key as $value) {
|
|
$query1->where('f_name', 'like', "%{$value}%")
|
|
->orWhere('l_name', 'like', "%{$value}%")
|
|
->orWhere('phone', 'like', "%{$value}%");
|
|
}
|
|
});
|
|
});
|
|
}
|
|
$conversations = $conversations->orderBy('last_message_time', 'DESC')
|
|
->latest()
|
|
->paginate(8);
|
|
}else{
|
|
$conversations = [];
|
|
}
|
|
|
|
|
|
if ($request->ajax()) {
|
|
// dd($conversations);
|
|
|
|
$view = view('vendor-views.messages.data',compact('conversations'))->render();
|
|
return response()->json(['html'=>$view]);
|
|
}
|
|
|
|
return view('vendor-views.messages.index', compact('conversations'));
|
|
}
|
|
|
|
public function view($conversation_id,$user_id)
|
|
{
|
|
$conversation = Conversation::find($conversation_id);
|
|
$lastmessage = $conversation->last_message;
|
|
if($lastmessage && $lastmessage->sender_id == $user_id ) {
|
|
$conversation->unread_message_count = 0;
|
|
$conversation->save();
|
|
}
|
|
Message::where(['conversation_id' => $conversation->id])->where('sender_id','!=',$user_id)->update(['is_seen' => 1]);
|
|
$convs = Message::where(['conversation_id' => $conversation_id])->get();
|
|
// Message::where(['conversation_id' => $conversation_id])->update(['is_seen' => 1]);
|
|
$conversation= Conversation::find($conversation_id);
|
|
$receiver = $conversation->receiver;
|
|
$sender = $conversation->sender;
|
|
$vendor = Helpers::get_vendor_data();
|
|
$vendor = UserInfo::where('vendor_id',$vendor->id)->first();
|
|
|
|
if($receiver->user_id){
|
|
$user = User::find($receiver->user_id);
|
|
$user_type = 'user';
|
|
}elseif($receiver->deliveryman_id){
|
|
$user = DeliveryMan::find($receiver->deliveryman_id);
|
|
$user_type = 'delivery_man';
|
|
}elseif($sender->user_id){
|
|
$user = User::find($sender->user_id);
|
|
$user_type = 'user';
|
|
}else{
|
|
$user = DeliveryMan::find($sender->deliveryman_id);
|
|
$user_type = 'delivery_man';
|
|
}
|
|
|
|
return response()->json([
|
|
'view' => view('vendor-views.messages.partials._conversations', compact('convs', 'user', 'receiver','sender','user_type','vendor'))->render()
|
|
]);
|
|
}
|
|
|
|
public function store(Request $request, $user_id, $user_type)
|
|
{
|
|
if ($request->has('images')) {
|
|
|
|
$validator = Validator::make($request->all(), [
|
|
'images.*' => 'max:2048',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
$validator->getMessageBag()->add('images', 'Max Image Upload limit is 2mb');
|
|
return response()->json(['errors' => Helpers::error_processor($validator)]);
|
|
}
|
|
|
|
$image_name=[];
|
|
foreach($request->images as $key=>$img)
|
|
{
|
|
$name = Helpers::upload('conversation/', 'png', $img);
|
|
array_push($image_name,$name);
|
|
}
|
|
} else {
|
|
$image_name = null;
|
|
|
|
$validator = Validator::make($request->all(), [
|
|
'reply' => 'required',
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json(['errors' => Helpers::error_processor($validator)]);
|
|
}
|
|
}
|
|
|
|
$vendor = Helpers::get_vendor_data();
|
|
$sender = UserInfo::where('vendor_id',$vendor->id)->first();
|
|
if(!$sender){
|
|
$sender = new UserInfo();
|
|
$sender->vendor_id = $vendor->id;
|
|
$sender->f_name = $vendor->restaurants[0]->name;
|
|
$sender->l_name = '';
|
|
$sender->phone = $vendor->phone;
|
|
$sender->email = $vendor->email;
|
|
$sender->image = $vendor->restaurants[0]->logo;
|
|
$sender->save();
|
|
}
|
|
|
|
if($user_type == 'user'){
|
|
|
|
$user = User::find($user_id);
|
|
$fcm_token=$user->cm_firebase_token;
|
|
$receiver = UserInfo::where('user_id', $user->id)->first();
|
|
if(!$receiver){
|
|
$receiver = new UserInfo();
|
|
$receiver->user_id = $user->id;
|
|
$receiver->f_name = $user->f_name;
|
|
$receiver->l_name = $user->l_name;
|
|
$receiver->phone = $user->phone;
|
|
$receiver->email = $user->email;
|
|
$receiver->image = $user->image;
|
|
$receiver->save();
|
|
}
|
|
|
|
}elseif($user_type == 'delivery_man'){
|
|
$user = User::find($user_id);
|
|
$fcm_token=$user->fcm_token;
|
|
$receiver = UserInfo::where('deliveryman_id', $user->id)->first();
|
|
if(!$receiver){
|
|
$receiver = new UserInfo();
|
|
$receiver->deliveryman_id = $user->id;
|
|
$receiver->f_name = $user->f_name;
|
|
$receiver->l_name = $user->l_name;
|
|
$receiver->phone = $user->phone;
|
|
$receiver->email = $user->email;
|
|
$receiver->image = $user->image;
|
|
$receiver->save();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$conversation = Conversation::WhereConversation($sender->id,$receiver->id)->first();
|
|
|
|
|
|
if(!$conversation){
|
|
$conversation = new Conversation;
|
|
$conversation->sender_id = $sender->id;
|
|
$conversation->sender_type = 'vendor';
|
|
$conversation->receiver_id = $receiver->id;
|
|
$conversation->receiver_type = $user_type;
|
|
$conversation->last_message_time = Carbon::now()->toDateTimeString();
|
|
$conversation->save();
|
|
|
|
$conversation= Conversation::find($conversation->id);
|
|
}
|
|
|
|
$message = new Message();
|
|
$message->conversation_id = $conversation->id;
|
|
$message->sender_id = $sender->id;
|
|
$message->message = $request->reply;
|
|
$message->file = $image_name?json_encode($image_name, JSON_UNESCAPED_SLASHES):null;
|
|
try {
|
|
if($message->save())
|
|
$conversation->unread_message_count = $conversation->unread_message_count? $conversation->unread_message_count+1:1;
|
|
$conversation->last_message_id=$message->id;
|
|
$conversation->last_message_time = Carbon::now()->toDateTimeString();
|
|
$conversation->save();
|
|
{
|
|
$data = [
|
|
'title' =>translate('messages.message'),
|
|
'description' =>translate('messages.message_description'),
|
|
'order_id' => '',
|
|
'image' => '',
|
|
'message' => $message,
|
|
'type'=> 'message',
|
|
'conversation_id'=> $conversation->id,
|
|
'sender_type'=> 'vendor'
|
|
];
|
|
Helpers::send_push_notif_to_device($fcm_token, $data);
|
|
}
|
|
|
|
} catch (\Exception $e) {
|
|
info($e);
|
|
}
|
|
$vendor = UserInfo::where('vendor_id',$vendor->id)->first();
|
|
$convs = Message::where(['conversation_id' => $conversation->id])->get();
|
|
return response()->json([
|
|
'view' => view('vendor-views.messages.partials._conversations', compact('convs', 'user', 'receiver','user_type','vendor'))->render()
|
|
]);
|
|
}
|
|
}
|
|
|