/** * Join to event * * @param \Illuminate\Http\Request $request * @param int $id * @param string $slug * @param string $type * * @return mixed */ public function join(\Illuminate\Http\Request $request, $id, $slug, $type) { $events = new Events(); $members = new Members(); $profile = new User(); $event = $events->getById($id); $user_id = (int) \Auth::user()->id; $user = $profile->getById($user_id); $user_name = $user->getProfile()->getFirstName() . ' ' . $user->getProfile()->getLastName(); if ($event === null) { die; // @TODO: } if ($event->isMine() === false) { $user_in_event = $members->getUserInEvent($event->getId(), $user_id); $can_add = true; /** * If user in */ if ($user_in_event !== null) { $can_add = false; /** * Delete if follower */ if ($type == 'member' and $user_in_event->isStatusFollower()) { $can_add = true; $members->deleteUserFromEvent($event->getId(), $user_id); } } /** * Add */ if ($can_add === true) { /** * Prepare notification */ $notification = (new NewNotification())->setUserId($event->getUserId())->setUniqueKey('events.members.join.' . $type . '.' . $event->getId())->setTypeId('events.members.join.' . $type)->addVariable('user', $user_name)->addVariable('event', $event->getTitle()); switch ($type) { case 'follower': $members->addNewFollower($event->getId(), $user_id); // New line on event time line (new NewLine())->setEventId($event->getId())->setTypeAsMessage()->setMessage($user_name . ' zaczął obserwować to wydarzenie')->save(); $notification->setCallback('/events/' . $event->getId() . '/' . $event->getSlug()); $request->session()->flash('message', 'Obserwujesz to wydarzenie'); break; case 'member': $members->addNewMember($event->getId(), $user_id); $notification->setCallback('/events/edit/' . $event->getId() . '/members'); $request->session()->flash('message', 'Zapisałeś się do wydarzenia. Zostaniesz poinformwany, gdy organizator Cie zaakceptuje'); break; } /** * Send notification to owner */ $notification->save(); } } return redirect()->route('events.event', ['id' => $event->getId(), 'slug' => $event->getSlug()]); }