public function postSendMessage(Request $request, $property_id = NULL) { $rules = ['message' => 'required']; $this->validate($request, $rules); $property = Property::find($property_id); $property->load('agentList'); $user = Auth::user(); if ($property->agentList) { $agent = $property->agentList; } else { $agent = ProjectHelper::getDefaultAgent(); } $conversation = $user->getPropertyConversation($property); if ($conversation) { $agent = $conversation->recipient; } else { $conversation = $user->createPropertyConversation($property, $agent); } $message = new Message(['message' => $request->input('message')]); $message->sender()->associate($user); if ($agent) { $message->recipient()->associate($agent); } $message->referenced()->associate($property); $message->parentMessage()->associate($conversation); $message->save(); if ($request->ajax()) { $return = ['message' => ['id' => $message->id, 'text' => $message->message]]; return response()->json($return); } return redirect()->back()->with('messages', [trans('property.inbox.sent_message')]); }
public function postScheduleViewing(Request $request, $id) { $user = Auth::user(); $property = Property::findOrFail($id); $property->load('agentList'); $allowedTime = array_keys(Property::getViewingTimeLabel()); $rules = ['viewing_date' => 'required|date_format:Y-m-d', 'viewing_time' => ['required', 'in:' . implode(',', $allowedTime)]]; $this->validate($request, $rules); $viewingTime = str_replace('_', ':', $request->input('viewing_time')); $viewingFrom = \DateTime::createFromFormat('Y-m-d H:i', $request->input('viewing_date') . ' ' . $viewingTime); $viewingTo = clone $viewingFrom; $viewingTo->modify('+2 hours'); $viewingSchedule = ViewingSchedule::where('user_id', $user->id)->where('property_id', $property->id)->first(); if ($property->agentList) { $agent = $property->agentList; } else { $agent = ProjectHelper::getDefaultAgent(); } if (!$viewingSchedule) { $viewingSchedule = new ViewingSchedule(); $viewingSchedule->user()->associate($user); $viewingSchedule->property()->associate($property); if ($agent) { $viewingSchedule->agent()->associate($agent); } $reschedule = FALSE; } else { $reschedule = TRUE; } $viewingSchedule->fill(['viewing_from' => $viewingFrom->format('Y-m-d H:i:s'), 'viewing_until' => $viewingTo->format('Y-m-d H:i:s')]); $viewingSchedule->status = ViewingSchedule::STATUS_PENDING; $viewingSchedule->save(); if ($reschedule) { Event::fire(new ViewingScheduleEvent($viewingSchedule, 'reschedule')); } else { Event::fire(new ViewingScheduleEvent($viewingSchedule, 'new')); } $conversation = $user->getPropertyConversation($property); if (!$conversation) { $user->createPropertyConversation($property, $agent); } if ($reschedule) { $message = trans('property.schedule_viewing.reschedule_success_message'); } else { $message = trans('property.schedule_viewing.success_message'); } return redirect()->back()->with('messages', [$message]); }