/** * Method that adds a facility and returns the result of operation * * @param \Library\HttpRequest $rq * @return JSON */ public function executeAdd(\Library\HttpRequest $rq) { $result = $this->InitResponseWS(); $dataPost = $this->dataPost(); if ($dataPost['facility_lat'] == "" or $dataPost['facility_long'] == "") { $latLng = \Applications\PMTool\Helpers\MapHelper::GetCoordinatesToCenterOverARegion($this->app()->config()); $dataPost['facility_lat'] = $latLng['lat']; $dataPost['facility_long'] = $latLng['lng']; } $facility = \Applications\PMTool\Helpers\CommonHelper::PrepareUserObject($dataPost, new \Applications\PMTool\Models\Dao\Facility()); $result["data"] = $facility; //Load interface to query the database $manager = $this->managers->getManagerOf($this->module()); $result["dataId"] = $manager->add($facility); $facility->setFacility_id($result["dataId"]); $sessionProject = \Applications\PMTool\Helpers\ProjectHelper::GetUserSessionProject($this->app()->user(), $facility->project_id()); $sessionProject[\Library\Enums\SessionKeys::FacilityObject] = $facility; \Applications\PMTool\Helpers\ProjectHelper::UpdateUserSessionProject($this->app()->user(), $sessionProject); //Process DB result and send result if ($result["dataId"] > 0) { $result = $this->SendResponseWS($result, array("resx_file" => \Applications\PMTool\Resources\Enums\ResxFileNameKeys::Facility, "resx_key" => $this->action(), "step" => $result["dataId"] > 0 ? "success" : "error")); } }
/** * <p> Retrieve the markers to display on Google Maps and the center position * if no items are returned for the Current Project Task Locations</p> * <p> This method is called via an AJAX request from the client side. </p> * <p> The method receive by inheritance some post data * properties JSON object which includes objectTypes as "keys" and nested associative propNames * example: * "properties": { * "location_obj": { * "objectLatPropName": "location_lat", * "objectLngPropName": "location_long", * "objectActivePropName": "location_active" * } * } * For more info: * \Applications\PMTool\Helpers\MapHelper::CreateTaskLocationMarkerItems * @link * </p> * <p> * @param object $rq <p> * The current HttpRequest. * </p> * @return mixed $result <p> * The result is a standard JSON response containing * the specific data to the request, e.g.: * - the list markers for a given filter * - the default position used to center the map (this configured in the appsettings.xml) */ public function executeListCurrentProjectTasks(\Library\HttpRequest $rq) { $result = $this->InitResponseWS(); $dataPost = $this->dataPost(); $properties = json_decode($dataPost['properties'], true); //get facility location info $defaultLocationProperties = $properties['defaultLocation']; //unset default location because we don't want to show facility marker unset($properties['defaultLocation']); //get current sesion project and refresh project's locations then get current session task $sessionProject = \Applications\PMTool\Helpers\ProjectHelper::GetCurrentSessionProject($this->app()->user()); //get project_id and load locations from DB $project_id = $sessionProject[\Library\Enums\SessionKeys::ProjectObject]->project_id(); $sessionProject[\Library\Enums\SessionKeys::ProjectLocations] = $locations = \Applications\PMTool\Helpers\LocationHelper::GetLocationListFromDB($this, $project_id); //store updated session \Applications\PMTool\Helpers\ProjectHelper::SetUserSessionProject($this->user(), $sessionProject); $sessionProject[\Library\Enums\SessionKeys::ProjectLocations] = $this->_GetAndStoreLocationsInSession($sessionProject); $sessionTask = \Applications\PMTool\Helpers\TaskHelper::GetCurrentSessionTask($this->app()->user()); //create two arrays with current project's locations, one for locations linked with the task and other unlinked $taskLocations = \Applications\PMTool\Helpers\LocationHelper::GetAndStoreTaskLocations($this, $sessionTask); $projectLocations = \Applications\PMTool\Helpers\LocationHelper::GetProjectLocations($this, $sessionProject, $taskLocations); $locations = array(\Library\Enums\SessionKeys::TaskLocations => $taskLocations, \Library\Enums\SessionKeys::ProjectLocations => $projectLocations); //load marker icons from config $icons = \Applications\PMTool\Helpers\MapHelper::GetActiveInactiveIcons($this->app()->relative_path, $this->app()->imageUtil, $this->app()->config()); if (isset($properties['activeTask']) && $properties['activeTask']) { $activeTask = $result["activeTask"] = true; } else { $activeTask = $result["activeTask"] = false; } //create google maps marker items $projectLocationMarkers = \Applications\PMTool\Helpers\MapHelper::CreateTaskLocationMarkerItems($this, $locations, $properties, $icons, $activeTask); $result["noLatLngIcon"] = $icons["taskNoLatLng"]; $result["activeIcon"] = $icons["task"]; $result["inactiveIcon"] = $icons["task"]; $result["items"] = $projectLocationMarkers; $result["defaultPosition"] = \Applications\PMTool\Helpers\MapHelper::GetCoordinatesToCenterOverARegion($this->app()->config()); $result["boundary"] = \Applications\PMTool\Helpers\MapHelper::GetBoundary($sessionProject); $result["facility_id"] = $sessionProject[\Library\Enums\SessionKeys::FacilityObject]->facility_id(); $result["project_id"] = $sessionProject[\Library\Enums\SessionKeys::FacilityObject]->project_id(); $result["type"] = 'task'; $noCoordinateMarkers = count(array_filter($projectLocationMarkers, function ($item) { return !$item['noLatLng']; })); if ($noCoordinateMarkers == 0) { $defaultLocations = \Applications\PMTool\Helpers\MapHelper::BuildLatAndLongCoordFromGeoObjects(array(\Applications\PMTool\Helpers\CommonHelper::GetValueFromArrayByKey($sessionProject, $defaultLocationProperties['object'])), $defaultLocationProperties['objectLatPropName'], $defaultLocationProperties['objectLngPropName']); if (count($defaultLocations) > 0) { $result['defaultPosition'] = $defaultLocations[0]; } } $result["controls"] = array("markers" => true, "shapes" => true, "ruler" => true); $this->SendResponseWS($result, array("resx_file" => \Applications\PMTool\Resources\Enums\ResxFileNameKeys::Map, "resx_key" => $this->action(), "step" => count($projectLocationMarkers) >= 0 ? "success" : "error")); }