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);
 }
 /**
  * Method that edits a a client and returns the result of operation
  * 
  * @param \Library\HttpRequest $rq
  * @return JSON
  */
 public function executeEdit(\Library\HttpRequest $rq)
 {
     $result = $this->InitResponseWS();
     //Load interface to query the database
     $manager = $this->managers->getManagerOf($this->module());
     $result_edit = $manager->edit(\Applications\PMTool\Helpers\CommonHelper::PrepareUserObject($this->dataPost(), new \Applications\PMTool\Models\Dao\Client()), "client_id");
     $result["dataId"] = $this->dataPost["client_id"];
     if ($result_edit) {
         \Applications\PMTool\Helpers\UserHelper::EditUser($this, 'client_id');
         $sessionProject = \Applications\PMTool\Helpers\ProjectHelper::GetUserSessionProject($this->app()->user(), $this->dataPost["project_id"]);
         $sessionProject[\Library\Enums\SessionKeys::ClientObject] = \Applications\PMTool\Helpers\CommonHelper::PrepareUserObject($this->dataPost(), new \Applications\PMTool\Models\Dao\Client());
         \Applications\PMTool\Helpers\ProjectHelper::UpdateUserSessionProject($this->app()->user(), $sessionProject);
     }
     $this->SendResponseWS($result, array("resx_file" => \Applications\PMTool\Resources\Enums\ResxFileNameKeys::Client, "resx_key" => $this->action(), "step" => $result_edit ? "success" : "error"));
 }
 public function executeAdd(\Library\HttpRequest $rq)
 {
     // Init result sent to client (e.g. browser)
     $result = $this->InitResponseWS();
     //Get the current PM Session
     $pm = \Applications\PMTool\Helpers\PmHelper::GetCurrentSessionPm($this->app()->user());
     $dataPost = $this->dataPost();
     $dataPost["pm_id"] = $pm === NULL ? NULL : $pm[\Library\Enums\SessionKeys::PmObject]->pm_id();
     $origin = $originId = "";
     if (array_key_exists("origin", $dataPost)) {
         $postUserData = (array) $dataPost["userData"];
         $postUserData["pm_id"] = $dataPost["pm_id"];
         $origin = $dataPost["origin"];
         $originId = $dataPost["originid"];
     } else {
         $postUserData = $dataPost;
     }
     //Store the pm_id in the dataPost...
     //.. and build the object to query the DB
     $technician = \Applications\PMTool\Helpers\CommonHelper::PrepareUserObject($postUserData, new \Applications\PMTool\Models\Dao\Technician());
     $technician->setTechnician_document("");
     $result["dataIn"] = $technician;
     //Load interface to query the database
     $manager = $this->managers->getManagerOf($this->module);
     $result["dataId"] = $manager->add($technician);
     if ($pm !== NULL) {
         //Update the object with last inserted Id
         $technician->setTechnician_id($result["dataId"]);
         if ($technician->technician_id() > 0 && \Library\Utility\StringHelper::Equals($origin, "task") && !\Library\Utility\StringHelper::IsNullOrEmpty($originId)) {
             \Applications\PMTool\Helpers\TechnicianHelper::AddTaskTechnician($this, $originId, $technician->technician_id());
         }
         //Update the PM Session
         array_push($pm[\Library\Enums\SessionKeys::PmTechnicians], $technician);
         //And update the Sessiom
         \Applications\PMTool\Helpers\PmHelper::SetSessionPm($this->app()->user(), $pm);
     }
     //add user record for FT
     if (intval($result["dataId"]) > 0) {
         $this->dataPost['user_email'] = $postUserData['technician_email'];
         $userId = \Applications\PMTool\Helpers\UserHelper::AddUser($this, $result["dataId"], \Library\Enums\UserRole::Technician);
     }
     //Send the response to browser
     $this->SendResponseWS($result, array("resx_file" => \Applications\PMTool\Resources\Enums\ResxFileNameKeys::Technician, "resx_key" => $this->action(), "step" => intval($result["dataId"]) > 0 && $userId > 0 ? "success" : "error"));
 }
 public function executeGetDiscussionThread(\Library\HttpRequest $rq)
 {
     $result = $this->InitResponseWS();
     $currentSessionTask = \Applications\PMTool\Helpers\TaskHelper::GetCurrentSessionTask($this->user());
     $currentDiscussion = \Applications\PMTool\Helpers\DiscussionHelper::GetCurrentDiscussion($this->user);
     $discussionNames = array();
     if ($currentDiscussion) {
         foreach ($currentDiscussion[\Library\Enums\SessionKeys::DiscussionPeople] as $person) {
             $manager = $this->managers()->getManagerOf('User');
             $userTypeObject = $manager->selectUserTypeObjectByUserId($person->user_id());
             $userType = \Applications\PMTool\Helpers\UserHelper::FindUserTypeFromObject($userTypeObject);
             if ($userType == 'pm_id') {
                 $discussionNames[$person->discussion_person_id()] = $userTypeObject->pm_name();
             } else {
                 if ($userType == 'technician_id') {
                     $discussionNames[$person->discussion_person_id()] = $userTypeObject->technician_name();
                 } else {
                     if ($userType == 'service_id') {
                         $discussionNames[$person->discussion_person_id()] = $userTypeObject->service_name();
                     }
                 }
             }
             if ($person->discussion_person_is_author() != 1) {
                 $result['user_type'] = $userType;
             }
         }
         $thread = \Applications\PMTool\Helpers\DiscussionHelper::GetDiscussionThread($this, $currentDiscussion);
         $time = $this->dataPost['time'];
         if (isset($time) && !is_null('time') && $thread) {
             $thread = \Applications\PMTool\Helpers\DiscussionHelper::SliceThread($thread, $time);
         }
         if ($thread) {
             foreach ($thread as &$content) {
                 foreach ($discussionNames as $id => $name) {
                     if ($id == $content->discussion_person_id()) {
                         $content->user_name = $name;
                         break;
                     }
                 }
             }
             $result['thread'] = $thread;
         }
         $result['discussion'] = $currentDiscussion[\Library\Enums\SessionKeys::DiscussionObj];
         $result['success'] = true;
     } else {
         $result['success'] = false;
     }
     $this->SendResponseWS($result, array("resx_file" => \Applications\PMTool\Resources\Enums\ResxFileNameKeys::ActiveTask, "resx_key" => $this->action(), "step" => $result['success'] ? "success" : "error"));
 }
 /**
  * Method that logout a user from the session and then redirect him to Login page.
  *
  * @param \Library\HttpRequest $rq
  */
 public function executeCreate(\Library\HttpRequest $rq)
 {
     $protect = new \Library\BL\Core\Encryption();
     $data = array("user_login" => $rq->getData("login"), "user_password" => $rq->getData("password"), "user_type" => $rq->getData("type"), "user_role" => \Applications\PMTool\Helpers\UserHelper::GetRoleFromType($rq->getData("type")));
     $user = \Applications\PMTool\Helpers\CommonHelper::PrepareUserObject($data, new Applications\PMTool\Models\Dao\User());
     $user->setUser_password($protect->Encrypt($this->app->config->get("encryption_key"), $user->user_password()));
     $loginDal = $this->managers->getManagerOf("Login");
     $id = $loginDal->add($pm);
     $redirect = intval($id) > 0 ? TRUE : FALSE;
     if ($redirect) {
         $this->Redirect("login");
     }
 }
 public function executeCommunications(\Library\HttpRequest $rq)
 {
     $sessionProject = \Applications\PMTool\Helpers\ProjectHelper::GetCurrentSessionProject($this->user());
     //Check if a project needs to be selected in order to display this page
     if (!$sessionProject) {
         $this->Redirect(\Library\Enums\ResourceKeys\UrlKeys::MobileTasks);
     }
     $sessionPm = $this->user->getAttribute(\Library\Enums\SessionKeys::CurrentPm);
     $sessionTask = \Applications\PMTool\Helpers\TaskHelper::GetCurrentSessionTask($this->user());
     //\Applications\PMTool\Helpers\CommonHelper::pr($sessionTask);
     $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::currentProject, $sessionProject[\Library\Enums\SessionKeys::ProjectObject]);
     $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::currentTask, $sessionTask[\Library\Enums\SessionKeys::TaskObj]);
     $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::currentPm, $sessionPm[\Library\Enums\SessionKeys::PmObject]);
     //Get current Discussion from session and set for view
     $currentDiscussion = \Applications\PMTool\Helpers\DiscussionHelper::GetCurrentDiscussion($this->user);
     if ($currentDiscussion) {
         $manager = $this->managers()->getManagerOf('User');
         $discussion_person = \Applications\PMTool\Helpers\DiscussionHelper::GetOtherDiscussionPerson($this->user(), $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);
     }
     $task_services = \Applications\PMTool\Helpers\ServiceHelper::GetAndStoreTaskServices($this, $sessionTask);
     $task_services = \Applications\PMTool\Helpers\ServiceHelper::CategorizeTheList($task_services, "service_type");
     $data = array(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::module => 'activetask', \Applications\PMTool\Resources\Enums\ViewVariablesKeys::categorized_list_left => $task_services, \Applications\PMTool\Resources\Enums\ViewVariablesKeys::properties_left => \Applications\PMTool\Helpers\CommonHelper::SetPropertyNamesForDualList(strtolower("service")));
     $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::data, $data);
     $task_technicians = \Applications\PMTool\Helpers\TechnicianHelper::GetAndStoreTaskTechnicians($this, $sessionTask);
     $task_technicians = \Applications\PMTool\Helpers\CommonHelper::FilterObjectsToExcludeRelatedObject($task_technicians, array($this->user()->getAttribute(\Library\Enums\SessionKeys::UserTypeObject)), 'technician_id');
     $data_left = array(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::module => 'activetask', \Applications\PMTool\Resources\Enums\ViewVariablesKeys::objects_list_left => $task_technicians, \Applications\PMTool\Resources\Enums\ViewVariablesKeys::properties_left => \Applications\PMTool\Helpers\CommonHelper::SetPropertyNamesForDualList(strtolower("technician")));
     $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::data_left, $data_left);
     $modules = $this->app()->router()->selectedRoute()->phpModules();
     $this->page->addVar(\Applications\PMTool\Resources\Enums\ViewVariablesKeys::form_modules, $modules);
 }
 private function _StoreUserInDb($user, $userType, $userTypeId)
 {
     $role = \Applications\PMTool\Helpers\UserHelper::GetRoleFromType($userType);
     $user->setUser_role_id($role);
     if ($userType != "") {
         $user->setUser_type($userType);
         $user->setUser_value($userTypeId);
     } else {
         $user->setUser_type("");
         $user->setUser_value("");
         $user->setUser_role_id(1);
     }
     $manager = $this->managers->getManagerOf($this->module);
     $res = $manager->add($user);
     if (intval($res) > 0) {
         $user->setUser_id($res);
         return $user;
     } else {
         return $res;
     }
 }