/**
  * Method that receives the call from JS Client to login a user
  *
  * @param \Library\HttpRequest $rq: the request
  * @return json object A JSON object with the result bool value and success/error message
  */
 public function executeAuthenticate(\Library\HttpRequest $rq)
 {
     //Initialize the response to error.
     $result = $this->InitResponseWS();
     //Let's retrieve the inputs from AJAX POST request
     $data_sent = $this->dataPost();
     $authProvider = new AuthProvider($this->app->config->get("encryption_key"), $this->managers->getManagerOf('Login'));
     $authProvider->prepareUser($data_sent);
     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':
                     \Applications\PMTool\Helpers\TaskHelper::UnsetCurrentSessionTask($this->user);
                     break;
                 case 'pm_id':
                     \Applications\PMTool\Helpers\PmHelper::StoreSessionPm($this, $authProvider->getUserType(), true);
                     break;
             }
             $result = $this->InitResponseWS("success");
             $result['role'] = $user->getRole();
         }
     }
     //return the JSON data
     echo \Library\HttpResponse::encodeJson($result);
 }
 public function executeDelete(\Library\HttpRequest $rq)
 {
     // Init result
     $result = $this->InitResponseWS();
     $sessionProject = \Applications\PMTool\Helpers\ProjectHelper::GetCurrentSessionProject($this->app()->user());
     $db_result = FALSE;
     $task_id = intval($this->dataPost["task_id"]);
     //Check if the task to be deleted if the Task manager's
     $task_selected = \Applications\PMTool\Helpers\TaskHelper::GetSessionTask($this->app()->user(), $task_id);
     //Load interface to query the database
     if ($task_selected !== NULL) {
         $manager = $this->managers->getManagerOf($this->module());
         if ($manager->delete($task_selected[\Library\Enums\SessionKeys::TaskObj], "task_id")) {
             $sessionTasks = \Applications\PMTool\Helpers\TaskHelper::GetSessionTasks($this->app()->user());
             unset($sessionTasks[\Library\Enums\SessionKeys::TaskKey . $task_id]);
             \Applications\PMTool\Helpers\TaskHelper::SetSessionTasks($this->app()->user(), $sessionTasks);
             $index = \Applications\PMTool\Helpers\CommonHelper::FindIndexInIdListById(\Library\Enums\SessionKeys::TaskKey . $task_id, $sessionProject[\Library\Enums\SessionKeys::ProjectTasks]);
             $db_result = $index === NULL ? FALSE : TRUE;
             unset($sessionProject[\Library\Enums\SessionKeys::ProjectTasks][$index]);
             \Applications\PMTool\Helpers\ProjectHelper::SetUserSessionProject($this->app()->user(), $sessionProject);
             $currentSessionTask = \Applications\PMTool\Helpers\TaskHelper::GetCurrentSessionTask($this->app()->user());
             if ($currentSessionTask[\Library\Enums\SessionKeys::TaskObj]->task_id() == $task_id) {
                 \Applications\PMTool\Helpers\TaskHelper::UnsetCurrentSessionTask($this->app()->user());
             }
         }
     }
     $this->SendResponseWS($result, array("resx_file" => \Applications\PMTool\Resources\Enums\ResxFileNameKeys::Task, "resx_key" => $this->action(), "step" => $db_result !== FALSE ? "success" : "error"));
 }
 /**
  * Method that get a project and returns the result of operation
  * 
  * @param \Library\HttpRequest $rq
  * @return JSON
  */
 public function executeSetCurrentProject(\Library\HttpRequest $rq)
 {
     $result = $this->InitResponseWS();
     // Init result
     $manager = $this->managers()->getManagerOf('Project');
     $projectEdit = new \Applications\PMTool\Models\Dao\Project();
     $pm = $this->user->getAttribute(\Library\Enums\SessionKeys::CurrentPm);
     $pm = $pm[\Library\Enums\SessionKeys::PmObject];
     $pm_id = $pm->pm_id();
     $projectEdit->setPm_id($pm_id);
     $projectEdit->setProject_is_default(0);
     if (!$manager->edit($projectEdit, 'pm_id')) {
         throw new \Exception(__CLASS__ . "->" . __METHOD__ . " => Project Edit failed for PM ID=" . $pm_id);
     }
     $project_id = $this->dataPost["project_id"];
     $projectEdit->setProject_id($project_id);
     $projectEdit->setProject_is_default(1);
     if (!$manager->edit($projectEdit, 'project_id')) {
         throw new \Exception(__CLASS__ . "->" . __METHOD__ . " => Project Edit failed for Project ID=" . $project_id);
     } else {
         \Applications\PMTool\Helpers\ProjectHelper::RefreshProjectObjectsForCurrentPm($this);
     }
     $project = \Applications\PMTool\Helpers\ProjectHelper::GetAndStoreCurrentProject($this->user(), $project_id);
     $result["dataId"] = $project->project_id();
     \Applications\PMTool\Helpers\TaskHelper::UnsetCurrentSessionTask($this->user());
     $this->SendResponseWS($result, array("resx_file" => \Applications\PMTool\Resources\Enums\ResxFileNameKeys::Project, "resx_key" => $this->action(), "step" => $project != NULL ? "success" : "error"));
 }