app/controllers/ProjectController.php (198 lines of code) (raw):

<?php class ProjectController extends BaseController { /** * Limit used in fetching paginated results * @var int */ var $limit = 20; /** * Instantiate a new ProjectController Instance **/ public function __construct() { $this->beforeFilter('verifylogin'); $this->beforeFilter('verifyauthorizeduser'); Session::put("nav-active", "project"); } public function createView() { if (Config::get('pga_config.airavata')["data-sharing-enabled"]){ return View::make("project/create", array("users" => json_encode(array()), "owner" => json_encode(array()))); }else{ return View::make("project/no-sharing-create"); } } public function createSubmit() { if (isset($_POST['save'])) { $projectId = ProjectUtilities::create_project(); return Redirect::to('project/summary?projId=' . urlencode($projectId)); } else { return Redirect::to('project/create'); } } public function summary() { if (Input::has("projId")) { Session::put("projId", Input::get("projId")); $project = ProjectUtilities::get_project(Input::get('projId')); $experiments = ProjectUtilities::get_experiments_in_project(Input::get("projId")); if(Config::get('pga_config.airavata')["data-sharing-enabled"]){ $users = SharingUtilities::getProfilesForSharedUsers(Input::get('projId')); $owner = array(); if (strcmp(Session::get("username"), $project->owner) !== 0) { $owner[$project->owner] = $users[$project->owner]; $users = array_diff_key($users, $owner); } $experiment_can_write = array(); foreach($experiments as $experiment) { if (SharingUtilities::userCanWrite(Session::get("username"), $experiment->experimentId)) { $experiment_can_write[$experiment->experimentId] = true; } else { $experiment_can_write[$experiment->experimentId] = false; } } return View::make("project/summary", array("projectId" => Input::get("projId"), "experiments" => $experiments, "users" => json_encode($users), "owner" => json_encode($owner), "project_can_write" => SharingUtilities::userCanWrite(Session::get("username"), Input::get("projId")), "experiment_can_write" => $experiment_can_write )); }else{ return View::make("project/no-sharing-summary", array("projectId" => Input::get("projId"), "experiments" => $experiments )); } } else return Redirect::to("home"); } public function editView() { if (Input::has("projId") || Input::has("projectId")) { $projectId = Input::get("projId") ? Input::get("projId") : Input::get("projectId"); $project = ProjectUtilities::get_project($projectId); return $this->createEditView($projectId, $project, null); } else { return Redirect::to("home"); } } public function editSubmit() { $projectDetails = new stdClass(); $projectDetails->owner = Input::get("projectOwner"); $projectDetails->name = Input::get("project-name"); $projectDetails->description = Input::get("project-description"); if(Config::get('pga_config.airavata')["data-sharing-enabled"]){ if (isset($_POST['save']) && SharingUtilities::userCanWrite(Session::get("username"), Input::get("projectId"))) { try { ProjectUtilities::update_project(Input::get("projectId"), $projectDetails); } catch (Exception $ex) { // Decode JSON into assoc. array $shareSettings = json_decode(Input::get('share-settings'), true); return $this->createEditView(Input::get("projectId"), $projectDetails, $shareSettings)->with("errorMessage", "Failed to update project: " . $ex->getMessage()); } } }else{ try { ProjectUtilities::update_project(Input::get("projectId"), $projectDetails); } catch (Exception $ex) { return $this->createEditView(Input::get("projectId"), $projectDetails, null)->with("errorMessage", "Failed to update project: " . $ex->getMessage()); } } return Redirect::to("project/summary?projId=" . urlencode(Input::get("projectId")))->with("project_edited", true); } /** * Create the edit view either from existing data or user submitted data. * @param $projectId String * @param $projectDetails stdClass instance * @param $shareSettings array */ private function createEditView($projectId, $projectDetails, $shareSettings) { if (Config::get('pga_config.airavata')["data-sharing-enabled"]) { if (SharingUtilities::userCanWrite(Session::get("username"), $projectId)) { if ($shareSettings) { $profiles = SharingUtilities::getUserProfiles(array_keys($shareSettings)); foreach ($profiles as $username => $profile) { $profile["access"] = $shareSettings[$username]; $profiles[$username] = $profile; } $users = $profiles; } else { $users = SharingUtilities::getProfilesForSharedUsers($projectId); } $owner = array(); if (strcmp(Session::get("username"), $projectDetails->owner) !== 0) { $owner[$projectDetails->owner] = $users[$projectDetails->owner]; $users = array_diff_key($users, $owner); } $canEditSharing = strcmp(Session::get("username"), $projectDetails->owner) === 0; return View::make("project/edit", array("projectId" => $projectId, "project" => $projectDetails, "users" => json_encode($users), "owner" => json_encode($owner), "canEditSharing" => $canEditSharing )); }else { return Redirect::to('project/summary?projId=' . urlencode($projectId))->with("error", "You do not have permission to edit this project."); } } else { return View::make("project/no-sharing-edit", array("projectId" => $projectId, "project" => $projectDetails, )); } } public function browseView() { $pageNo = Input::get('pageNo'); $prev = Input::get('prev'); $isSearch = Input::get('search'); if (empty($pageNo) || isset($isSearch) ) { $pageNo = 1; } else { if (isset($prev)) { $pageNo -= 1; } else { $pageNo += 1; } } $searchValue = Input::get("search-value"); if(!empty($searchValue)){ $projects = ProjectUtilities::get_proj_search_results_with_pagination(Input::get("search-key"), Input::get("search-value"), $this->limit, ($pageNo - 1) * $this->limit); }else{ $projects = ProjectUtilities::get_all_user_accessible_projects_with_pagination($this->limit, ($pageNo - 1) * $this->limit); } $can_write = array(); $user = Session::get("username"); foreach($projects as $project) { if(Config::get('pga_config.airavata')["data-sharing-enabled"]){ $can_write[$project->projectID] = SharingUtilities::userCanWrite($user, $project->projectID); } else { $can_write[$project->projectID] = true; } } return View::make('project/browse', array( 'pageNo' => $pageNo, 'limit' => $this->limit, 'projects' => $projects, 'can_write' => $can_write )); } /** * Generate JSON containing permissions information for this project. * * This function retrieves the user profile and permissions for every user * other than the client that has access to the project. In the event that * the project does not exist, return an error message. */ public function sharedUsers() { if (Session::has("authz-token") && array_key_exists('resourceId', $_GET)) { return Response::json(SharingUtilities::getProfilesForSharedUsers($_GET['resourceId'])); } else { return Response::json(array("error" => "Error: No project specified")); } } public function unsharedUsers() { if (Session::has("authz-token") && array_key_exists('resourceId', $_GET)) { return Response::json(SharingUtilities::getProfilesForUnsharedUsers($_GET['resourceId'])); } else { return Response::json(array("error" => "Error: No project specified")); } } public function allUsers() { return Response::json(SharingUtilities::getAllUserProfiles()); } } ?>