/** * Update user status in event * * @param int $id * @param int $user_id * @param int $status * * @return mixed * * @throws \Exception */ public function status($id, $user_id, $status) { $this->init($id); if ($status == 'member') { /** * Sprawdzenie limitu */ if ($this->event->getMembers()->count() == $this->event->getUsersLimit()) { // @TODO: throw new \Exception('Przekroczony limit'); } /** * Powiadomienia do pozostałych uczestników * * @var $user \Flocc\Profile */ $user = (new User())->getById($user_id)->getProfile(); foreach ($this->event->getMembersAndFollowers() as $member) { (new NewNotification())->setUserId($member->getUserId())->setUniqueKey('events.members.new.' . $id . '.' . $user_id)->setTypeId('events.members.new')->setCallback('/events/' . $event->getId() . '/' . $event->getSlug())->addVariable('user', $user->getFirstName() . ' ' . $user->getLastName())->addVariable('event', $this->event->getTitle())->save(); } /** * Powiadomienie do usera, że został zaakceptowany */ (new NewNotification())->setUserId($user_id)->setUniqueKey('events.members.accept.' . $id)->setTypeId('events.members.accept')->setCallback('/events/' . $event->getId() . '/' . $event->getSlug())->addVariable('event', $this->event->getTitle())->save(); /** * Powiadomienie na tablicy wydarzenia */ (new TimeLine\NewLine())->setEventId($id)->setTypeAsMessage()->setMessage(sprintf('[b]%s[/b] dołączył do wydarzenia dnia [b]%s[/b]', $user->getFirstName() . ' ' . $user->getLastName(), date('Y-m-d')))->setUserId(Auth::getUserId())->save(); /** * Zmiana statusu */ (new Members())->updateStatus($user_id, $id, $status); /** * Po dodaniu tego jest przekroczny limit */ if ($this->event->getUsersLimit() == $this->event->getMembers()->count()) { (new Events())->closeEvent($id); /** * Wysłanie powiadomienia do użytkowników */ foreach ($this->event->getMembersAndFollowers() as $member) { (new NewNotification())->setUserId($member->getUserId())->setUniqueKey('events.limit.' . $this->event->getId())->setCallback('/events/' . $event->getId() . '/' . $event->getSlug())->setTypeId('events.limit')->addVariable('event', $this->event->getTitle())->save(); } } } if ($status == 'rejected') { /** * Zmiana statusu */ (new Members())->updateStatus($user_id, $id, 'follower'); } return redirect()->route('events.edit.members', ['id' => $id]); }