public function executeServiceDiscussion(\Library\HttpRequest $rq) { $discussionId = $rq->getData("discussion_id"); $currentUserObject = $this->user->getAttribute(\Library\Enums\SessionKeys::UserConnected); $data["username"] = $rq->getData("username"); $data["pwd"] = $rq->getData("password"); $data["encrypted_pwd"] = true; //check if user is already logged in and if username and password aren't sent through url if ($currentUserObject instanceof \Applications\PMTool\Models\Dao\User && !isset($data["username"]) && !isset($data["pwd"])) { } else { $authProvider = new \Applications\PMTool\AuthProvider($this->app->config->get("encryption_key"), $this->managers->getManagerOf('Login')); $authProvider->prepareUser($data); if ($authProvider->getUser() instanceof \Library\Interfaces\IUser) { $this->app->auth->authenticate($authProvider->getUser()); $this->user->setAttribute(\Library\Enums\SessionKeys::UserTypeObject, $authProvider->getUserType()); if ($authProvider->getUser()) { $user = $this->app->user; $routes = array_filter($this->app->router->routes(), function ($route) use($user) { return count($route->role()) == 0 || in_array($user->getRole(), $route->role()); }); \Applications\PMTool\Helpers\UserHelper::SaveRoutes($user, $routes); switch ($authProvider->getUser()->getType()) { case 'technician_id': break; case 'pm_id': \Applications\PMTool\Helpers\PmHelper::StoreSessionPm($this, $authProvider->getUserType(), true); break; } } } $currentUserObject = $this->user->getAttribute(\Library\Enums\SessionKeys::UserConnected); } $discussionArray = \Applications\PMTool\Helpers\DiscussionHelper::GetDiscussionByIdFromDB($this, $discussionId); $user = \Applications\PMTool\Helpers\CommonHelper::FindObjectByIntValue(intval($currentUserObject->user_id()), 'user_id', $discussionArray[\Library\Enums\SessionKeys::DiscussionPeople]); //check if logged in user is the part of this discussion if ($user) { \Applications\PMTool\Helpers\DiscussionHelper::SetCurrentDiscussion($this->user, $discussionArray[\Library\Enums\SessionKeys::DiscussionObj], $discussionArray[\Library\Enums\SessionKeys::DiscussionPeople]); $currentDiscussion = $discussionArray; if ($currentDiscussion) { $manager = $this->managers()->getManagerOf('User'); $discussion_person = \Applications\PMTool\Helpers\CommonHelper::FindObjectByIntValue(1, 'discussion_person_is_author', $currentDiscussion[\Library\Enums\SessionKeys::DiscussionPeople]); $discussion_user_type = $manager->selectUserTypeObjectByUserId($discussion_person->user_id()); if ($discussion_user_type) { $currentDiscussion['comm_with'] = $discussion_user_type; $currentDiscussion['comm_type'] = \Applications\PMTool\Helpers\UserHelper::FindUserTypeFromObject($discussion_user_type); } $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::currentDiscussion, $currentDiscussion); } } else { \Applications\PMTool\Helpers\DiscussionHelper::UnsetCurrentDiscussion($this->user); } $modules = $this->app()->router()->selectedRoute()->phpModules(); $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::form_modules, $modules); }
/** * Starts communication with * entities with passed parameters */ public static function StartCommunicationWith($caller, $selection_type, $selection_id) { $sessionTask = \Applications\PMTool\Helpers\TaskHelper::GetCurrentSessionTask($caller->user()); $taskDiscussions = \Applications\PMTool\Helpers\DiscussionHelper::GetAllTaskDiscussions($caller, $sessionTask[\Library\Enums\SessionKeys::TaskObj]->task_id()); if ($selection_type == 'technician_id') { $technicians = \Applications\PMTool\Helpers\TechnicianHelper::GetAndStoreTaskTechnicians($caller, $sessionTask); foreach ($technicians as $technician) { if ($technician->technician_id() == $selection_id) { $manager = $caller->managers()->getManagerOf('User'); $user = $manager->selectUserByTypeId('technician_id', $technician->technician_id()); break; } } } else { if ($selection_type == 'service_id') { $services = \Applications\PMTool\Helpers\ServiceHelper::GetAndStoreTaskServices($caller, $sessionTask); foreach ($services as $service) { if ($service->service_id() == $selection_id) { $manager = $caller->managers()->getManagerOf('User'); $user = $manager->selectUserByTypeId('service_id', $service->service_id()); break; } } } else { if ($selection_type == 'pm_id') { $sessionPm = $caller->user->getAttribute(\Library\Enums\SessionKeys::CurrentPm); $currentPmObject = $sessionPm[\Library\Enums\SessionKeys::PmObject]; if ($currentPmObject->pm_id() == $selection_id) { $manager = $caller->managers()->getManagerOf('User'); $user = $manager->selectUserByTypeId('pm_id', $currentPmObject->pm_id()); } } } } //we can add more users later if we choose to add more people in same discussion $discussionUsers = array($caller->user()->getAttribute(\Library\Enums\SessionKeys::UserConnected), $user); $discussion = \Applications\PMTool\Helpers\DiscussionHelper::CheckIfDiscussionExistsByUsers($caller, $caller->user()->getAttribute(\Library\Enums\SessionKeys::UserConnected), $user, $sessionTask[\Library\Enums\SessionKeys::TaskObj]->task_id()); if ($discussion === false) { $discussion = \Applications\PMTool\Helpers\DiscussionHelper::CreateNewDiscussion($caller, $discussionUsers, $sessionTask[\Library\Enums\SessionKeys::TaskObj]->task_id()); } //in case create discussion returned false we will check if discussion is false again if ($discussion !== false) { $manager = $caller->managers()->getManagerOf('DiscussionPerson'); $discussion_person = new \Applications\PMTool\Models\Dao\Discussion_person(); $discussion_person->setDiscussion_id($discussion->discussion_id()); //select all connected people so we can store them in session $discussion_people = $manager->selectMany($discussion_person, 'discussion_id'); \Applications\PMTool\Helpers\DiscussionHelper::SetCurrentDiscussion($caller->user(), $discussion, $discussion_people); $return_val = true; } else { $return_val = false; } return $return_val; }