AIRAVATA-2190 Select project when cloning experiment
Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/f76343df Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/f76343df Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/f76343df Branch: refs/heads/develop Commit: f76343df20524fcf8e8595f519555c0de33f4df4 Parents: 0d58af5 Author: Marcus Christie <[email protected]> Authored: Fri Nov 4 12:12:47 2016 -0400 Committer: Marcus Christie <[email protected]> Committed: Fri Nov 4 12:12:47 2016 -0400 ---------------------------------------------------------------------- app/controllers/ExperimentController.php | 17 +++----- app/libraries/ExperimentUtilities.php | 4 +- app/libraries/ProjectUtilities.php | 15 +++++++ app/routes.php | 2 +- app/views/partials/experiment-info.blade.php | 51 ++++++++++++++++------- 5 files changed, 60 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/f76343df/app/controllers/ExperimentController.php ---------------------------------------------------------------------- diff --git a/app/controllers/ExperimentController.php b/app/controllers/ExperimentController.php index e6803a9..7b8e101 100755 --- a/app/controllers/ExperimentController.php +++ b/app/controllers/ExperimentController.php @@ -141,7 +141,7 @@ class ExperimentController extends BaseController } $expVal["jobDetails"] = $jobDetails; - + $writeableProjects = ProjectUtilities::get_all_user_writeable_projects(Session::get("gateway_id"), Session::get("username")); $data = array( "expId" => Input::get("expId"), @@ -149,7 +149,8 @@ class ExperimentController extends BaseController "project" => $project, "jobDetails" => $jobDetails, "expVal" => $expVal, - "autoRefresh"=> $autoRefresh + "autoRefresh"=> $autoRefresh, + "writeableProjects" => $writeableProjects ); if(Config::get('pga_config.airavata')["data-sharing-enabled"]){ $users = SharingUtilities::getProfilesForSharedUsers(Input::get("expId"), ResourceType::EXPERIMENT); @@ -288,16 +289,10 @@ class ExperimentController extends BaseController public function cloneExperiment() { - if (isset($_GET['expId'])) { - $cloneId = ExperimentUtilities::clone_experiment($_GET['expId']); - $experiment = ExperimentUtilities::get_experiment($cloneId); - $project = ProjectUtilities::get_project($experiment->projectId); - - $expVal = ExperimentUtilities::get_experiment_values($experiment); - $expVal["jobState"] = ExperimentUtilities::get_job_status($experiment); + // TODO: catch and handle errors when cloning fails + $cloneId = ExperimentUtilities::clone_experiment(Input::get('expId'), Input::get('projectId')); - return Redirect::to('experiment/edit?expId=' . $cloneId . "&clonedExp=true"); - } + return Redirect::to('experiment/edit?expId=' . $cloneId . "&clonedExp=true"); } public function editSubmit() http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/f76343df/app/libraries/ExperimentUtilities.php ---------------------------------------------------------------------- diff --git a/app/libraries/ExperimentUtilities.php b/app/libraries/ExperimentUtilities.php index 3b803b5..fb0d363 100755 --- a/app/libraries/ExperimentUtilities.php +++ b/app/libraries/ExperimentUtilities.php @@ -581,12 +581,12 @@ class ExperimentUtilities * Clone the experiment with the given ID * @param $expId */ - public static function clone_experiment($expId) + public static function clone_experiment($expId, $projectId) { try { //create new experiment to receive the clone $experiment = Airavata::getExperiment(Session::get('authz-token'), $expId); - $cloneId = Airavata::cloneExperiment(Session::get('authz-token'), $expId, 'Clone of ' . $experiment->experimentName); + $cloneId = Airavata::cloneExperiment(Session::get('authz-token'), $expId, 'Clone of ' . $experiment->experimentName, $projectId); //updating the experiment inputs and output path $experiment = Airavata::getExperiment(Session::get('authz-token'), $cloneId); $experimentInputs = $experiment->experimentInputs; http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/f76343df/app/libraries/ProjectUtilities.php ---------------------------------------------------------------------- diff --git a/app/libraries/ProjectUtilities.php b/app/libraries/ProjectUtilities.php index 1a58c61..d1d7600 100755 --- a/app/libraries/ProjectUtilities.php +++ b/app/libraries/ProjectUtilities.php @@ -46,6 +46,19 @@ class ProjectUtilities return $userProjects; } + public static function get_all_user_writeable_projects($gatewayId, $username) + { + $writeableProjects = array(); + $userProjects = ProjectUtilities::get_all_user_projects($gatewayId, $username); + foreach($userProjects as $project) { + if (SharingUtilities::userCanWrite($username, $project->projectID, ResourceType::PROJECT)) { + $writeableProjects[] = $project; + } + } + + return $writeableProjects; + } + /** * Get the project with the given ID * @param $projectId @@ -78,6 +91,7 @@ class ProjectUtilities public static function create_project_select($projectId = null, $editable = true) { $editable ? $disabled = '' : $disabled = 'disabled'; + // TODO: this should only return projects the user can write $userProjects = ProjectUtilities::get_all_user_projects(Session::get("gateway_id"), Session::get('username')); echo '<select class="form-control" name="project" id="project" required ' . $disabled . '>'; @@ -338,6 +352,7 @@ class ProjectUtilities GrouperUtilities::shareResourceWithUsers($projectId, ResourceType::PROJECT, $radd); GrouperUtilities::revokeSharingOfResourceFromUsers($projectId, ResourceType::PROJECT, $rrevoke); + // TODO: get rid of the experiment revocation stuff $experiments = ProjectUtilities::get_experiments_in_project($projectId); foreach ($experiments as $exp) { http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/f76343df/app/routes.php ---------------------------------------------------------------------- diff --git a/app/routes.php b/app/routes.php index a087339..6fc817b 100755 --- a/app/routes.php +++ b/app/routes.php @@ -102,7 +102,7 @@ Route::get("experiment/summary", "ExperimentController@summary"); Route::post("experiment/summary", "ExperimentController@expChange"); -Route::get("experiment/clone", "ExperimentController@cloneExperiment"); +Route::post("experiment/clone", "ExperimentController@cloneExperiment"); Route::get("experiment/edit", "ExperimentController@editView"); http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/f76343df/app/views/partials/experiment-info.blade.php ---------------------------------------------------------------------- diff --git a/app/views/partials/experiment-info.blade.php b/app/views/partials/experiment-info.blade.php index 8236a49..0d7b621 100644 --- a/app/views/partials/experiment-info.blade.php +++ b/app/views/partials/experiment-info.blade.php @@ -1,4 +1,9 @@ {{ HTML::style('css/sharing.css') }} +<style> +#experiment-form { + margin-bottom: 20px; +} +</style> <div class="container" style="max-width: 750px;"> <!-- @if(isset( $invalidExperimentId ) ) @@ -213,7 +218,7 @@ @if( !isset( $dashboard)) - <form action="{{URL::to('/') }}/experiment/summary" method="post" role="form"> + <form id="experiment-form" action="{{URL::to('/') }}/experiment/summary" method="post" role="form"> <div class="form-group"> @if(Config::get('pga_config.airavata')["data-sharing-enabled"]) @@ -238,20 +243,6 @@ <span class="glyphicon glyphicon-remove"></span> Cancel </a> -<!-- <input name="clone"--> -<!-- type="submit"--> -<!-- class="btn btn-primary"--> -<!-- value="Clone"--> -<!-- title="Create a clone of the experiment. Cloning is the only way to change an experiment's settings--> -<!-- after it has been launched.">--> - <a href="{{URL::to('/') }}/experiment/clone?expId={{ $experiment->experimentId }}" - class="btn btn-primary" - role="button" - title="Create a clone of the experiment. Cloning is the only way to change an experiment's settings - after it has been launched." target="_blank"> - <span class="glyphicon glyphicon-pencil"></span> - Clone - </a> <input type="hidden" name="expId" value="{{ Input::get('expId') }}"/> <a href="{{URL::to('/') }}/experiment/edit?expId={{ $experiment->experimentId }}&savedExp=true" class="btn btn-default" @@ -272,6 +263,36 @@ @endif </div> </form> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Clone Experiment</h3> + </div> + <div class="panel-body"> + <form class="form-inline" action="{{ URL::to('/') }}/experiment/clone" method="post"> + <input type="hidden" name="expId" value="{{ Input::get('expId') }}"/> + <div class="form-group"> + <label for="projectId">Project</label> + <select class="form-control" name="projectId" required> + @foreach($writeableProjects as $project) + <option value="{{{ $project->projectID }}}" + @if( $project->projectID == $experiment->projectId) + selected + @endif + >{{{ $project->name }}}</option> + @endforeach + </select> + </div> + + <button type="submit" + class="btn btn-primary" + role="button" + title="Create a clone of the experiment. Cloning is the only way to change an experiment's settings after it has been launched."> + <span class="glyphicon glyphicon-pencil"></span> + Clone + </a> + </form> + </div> + </div> @endif <input type="hidden" id="lastModifiedTime" value="{{ $expVal['experimentTimeOfStateChange'] }}"/>
