added group creation ui
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/a195a5b8 Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/a195a5b8 Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/a195a5b8 Branch: refs/heads/grouper-integration Commit: a195a5b8eb9aaaa58715524a77bf1bceec2c4222 Parents: fedf8e1 Author: Jeff Kinnison <[email protected]> Authored: Thu Jul 7 15:43:10 2016 -0400 Committer: Jeff Kinnison <[email protected]> Committed: Thu Jul 7 15:43:10 2016 -0400 ---------------------------------------------------------------------- app/controllers/GroupController.php | 33 ++++++ app/routes.php | 6 +- app/views/experiment/create.blade.php | 1 + app/views/group/create.blade.php | 75 +++++++++++++ app/views/project/create.blade.php | 1 + public/css/sharing.css | 2 +- public/js/sharing/groups.js | 162 +++++++++++++++++++++++++++++ 7 files changed, 278 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a195a5b8/app/controllers/GroupController.php ---------------------------------------------------------------------- diff --git a/app/controllers/GroupController.php b/app/controllers/GroupController.php new file mode 100644 index 0000000..3d71837 --- /dev/null +++ b/app/controllers/GroupController.php @@ -0,0 +1,33 @@ +<?php + +class GroupController extends BaseController { + public function __construct() + { + $this->beforeFilter('verifylogin'); + $this->beforeFilter('verifyauthorizeduser'); + Session::put("nav-active", "group"); + } + + public function createView() + { + return View::make("group/create"); + } + + public function createSubmit() + { + // TODO: Write submission logic + } + + public function editView() + { + // TODO: Write logic to load current group members + } + + public function summaryView() + { + // TODO: Write group display logic + } + +} + +?> http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a195a5b8/app/routes.php ---------------------------------------------------------------------- diff --git a/app/routes.php b/app/routes.php index 41fd139..bc9e744 100644 --- a/app/routes.php +++ b/app/routes.php @@ -97,7 +97,6 @@ Route::get("experiment/browse", "ExperimentController@browseView"); Route::post("experiment/browse", "ExperimentController@browseView"); - Route::get("download", function(){ //FIXME check for no ../ parts in the path if(Input::has("path") && (0 == strpos(Input::get("path"), Session::get('username')) @@ -116,6 +115,11 @@ Route::get("files/browse", "FilemanagerController@browse"); Route::get("files/get","FilemanagerController@get"); /* + * Group Routes + */ +Route::get("group/create", "GroupController@createView"); + +/* * Compute Resources Routes */ http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a195a5b8/app/views/experiment/create.blade.php ---------------------------------------------------------------------- diff --git a/app/views/experiment/create.blade.php b/app/views/experiment/create.blade.php index e36536f..ca857a2 100755 --- a/app/views/experiment/create.blade.php +++ b/app/views/experiment/create.blade.php @@ -83,5 +83,6 @@ @section('scripts') @parent +{{ HTML::script('js/sharing/sharing_utils.js') }} {{ HTML::script('js/sharing/share.js') }} @stop http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a195a5b8/app/views/group/create.blade.php ---------------------------------------------------------------------- diff --git a/app/views/group/create.blade.php b/app/views/group/create.blade.php new file mode 100644 index 0000000..8d5c378 --- /dev/null +++ b/app/views/group/create.blade.php @@ -0,0 +1,75 @@ +@extends('layout.basic') + +@section('page-header') +@parent +{{ HTML::style('css/sharing.css') }} +@stop + +@section('content') +<div class="col-md-offset-3 col-md-6"> + + <h1>Create a new group</h1> + + <form action="{{URL::to('/')}}/group/create" method="POST" role="form" enctype="multipart/form-data"> + + <?php + + $disabled = ''; + $groupName = ''; + $groupDescription = ''; + + $echo = ''; + $wrf = ''; + ?> + + <div class="form-group required"> + <label for="group-name" class="control-label">Group Name</label> + <input type="text" class="form-control" name="group-name" id="group-name" + placeholder="Enter group name" autofocus required="required" maxlength="50"> + </div> + <div class="form-group"> + <label for="group-description">Group Description</label> + <textarea class="form-control" name="group-description" id="group-description" + placeholder="Optional: Enter a short description of the group" maxlength="200"></textarea> + </div> + + <div class="form-group"> + <label for="project-share">Select Group Members</label><br /> + <input id="share-box-filter" class="form-control" type="text" placeholder="Filter the user list" /> + <label>Show</label> + <div id="show-results-group" class="btn-group" role="group" aria-label="Show Groups or Users"> + <button type="button" class="show-groups show-results-btn btn btn-primary">Groups</button> + <button type="button" class="show-users show-results-btn btn btn-default">Users</button> + </div> + <label>Order By</label> + <select class="order-results-selector"> + <option value="username">Username</option> + <option value="firstlast">First, Last Name</option> + <option value="lastfirst">Last, First Name</option> + <option value="email">Email</option> + </select> + <ul id="share-box-users" class="form-control"></ul> + <label>Members</label> + <ul id="share-box-share" class="text-align-center form-control"> + <p>No members yet</p> + </ul> + <input id="share-settings" name="share-settings" type="hidden" value="" /> + </div> + + <div class="btn-toolbar"> + <input name="continue" type="submit" class="btn btn-primary" value="Save"> + <input name="clear" type="reset" class="btn btn-default" value="Clear"> + </div> + </form> + +</div> + +{{ HTML::image("assets/Profile_avatar_placeholder_large.png", 'placeholder image', array('class' => 'baseimage')) }} + +@stop + +@section('scripts') +@parent +{{ HTML::script('js/sharing/sharing_utils.js') }} +{{ HTML::script('js/sharing/groups.js') }} +@stop http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a195a5b8/app/views/project/create.blade.php ---------------------------------------------------------------------- diff --git a/app/views/project/create.blade.php b/app/views/project/create.blade.php index 069b5ba..d24ab1b 100755 --- a/app/views/project/create.blade.php +++ b/app/views/project/create.blade.php @@ -64,5 +64,6 @@ $(this).val($.trim($(this).val())); }); </script> +{{ HTML::script('js/sharing/sharing_utils.js') }} {{ HTML::script('js/sharing/share.js') }} @stop http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a195a5b8/public/css/sharing.css ---------------------------------------------------------------------- diff --git a/public/css/sharing.css b/public/css/sharing.css index 552e07d..426cd20 100755 --- a/public/css/sharing.css +++ b/public/css/sharing.css @@ -13,7 +13,7 @@ #share-box-filter { width: 100%; height: 24pt; - font-size: large; + font-size: normal; } #share-box-options { http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a195a5b8/public/js/sharing/groups.js ---------------------------------------------------------------------- diff --git a/public/js/sharing/groups.js b/public/js/sharing/groups.js index e69de29..27bcbcc 100644 --- a/public/js/sharing/groups.js +++ b/public/js/sharing/groups.js @@ -0,0 +1,162 @@ +/** + * @author Jeff Kinnison <[email protected]> + */ +var dummy_user_data = [ + { + username: 'testuser1', + firstname: 'Jane', + lastname: 'Doe', + email: '[email protected]' + }, + { + username: 'testuser2', + firstname: 'Ego', + lastname: 'Id', + email: '[email protected]' + }, + { + username: 'testuser3', + firstname: 'Ivan', + lastname: 'Ivanov', + email: '[email protected]' + }, + { + username: 'testuser4', + firstname: 'Grok', + lastname: 'Smytheson', + email: '[email protected]' + }, + { + username: 'testuser5', + firstname: 'Identifier', + lastname: 'Appellation', + email: '[email protected]' + } +]; + +$(function() { + var comparator_map, comparator, $original_shared_list, $revoke_list; + comparator_map = { + "username": usernameComparator, + "firstlast": firstLastComparator, + "lastfirst": lastFirstComparator, + "email": emailComparator + }; + comparator = usernameComparator; + + var createTestData = function() { + var $users, $user, data; + + $users = $('#share-box-users'); + + for (var user in dummy_user_data) { + if (dummy_user_data.hasOwnProperty(user)) { + data = dummy_user_data[user]; + $user = createThumbnail(data.username, data.firstname, data.lastname, data.email, 0, false); + $user.addClass('share-box-users-item'); + $users.append($user); + } + } + } + + // Filter visible user thumbnails based on pattern in .share-box-filter + $('body').on('keyup', '.share-box-filter', function (e) { + var $target, pattern, visible, $users; + e.preventDefault(); + e.stopPropagation(); + $target = $(e.target); + pattern = $target.val().toLowerCase(); + if (!pattern || pattern === '') { + pattern = /.+/; + } + $users = $('#share-box-users').children(visible); + userFilter($users, pattern); + return false; + }); + + // Toggle between visible groups and visible users + // $('body').on('click', '.show-results-btn', function(e) { + // var $target; + // e.preventDefault(); + // e.stopPropagation(); + // $target = $(e.target); + // if ($target.hasClass("show-groups") && !$target.hasClass('btn-primary')) { + // $('.group-thumbnail').show(); + // $('.user-thumbnail').hide(); + // $('.show-groups').addClass('btn-primary'); + // $('.show-groups').removeClass('btn-default'); + // $('.show-users').addClass('btn-default'); + // $('.show-users').removeClass('btn-primary'); + // } + // else if ($target.hasClass("show-users") && !$target.hasClass('btn-primary')) { + // $('.user-thumbnail').show(); + // $('.group-thumbnail').hide(); + // $('.show-users').addClass('btn-primary'); + // $('.show-users').removeClass('btn-default'); + // $('.show-groups').addClass('btn-default'); + // $('.show-groups').removeClass('btn-primary'); + // } + // return false; + // }); + + // Sort users by some metric + $('body').on('change', '.order-results-selector', function(e) { + var $target, $sibling, $sorted; + $target = $(e.target); + console.log($target); + comparator = comparator_map[$target.val()]; + $('.order-results-selector').val($target.val()); + $sibling = $target.siblings('#share-box-users'); + $sorted = $sibling.children('.sharing-thumbnail'); + $sorted.detach(); + $sorted.sort(comparator); + $sibling.append($sorted); + }); + + // Handle adding and removing membership + $('body').on('click', '.share-box-users-item, .sharing-thumbnail-unshare', function(e) { + var $target, $share; + e.stopPropagation(); + e.preventDefault(); + console.log("Click!"); + $target = $(e.target).closest('.sharing-thumbnail'); + changeShareState($target); + $share = $('#share-box-share'); + if ($share.children().length === 0) { + $share.append('<p>No members yet</p>'); + } + else { + $par = $share.find('p'); + $par.remove(); + } + return false; + }); + + $('body').on('change', '#share-box-share', function(e) { + var $target, $par; + e.preventDefault(); + e.stopPropagation(); + $target = $(e.target); + if ($target.children().length === 0) { + $target.append('<p>No members yet</p>'); + } + else { + $par = $target.find('p'); + $par.remove(); + } + return false; + }); + + $('body').on('click', 'input[type="reset"]', function (e) { + var $shared_users; + $shared_users = $('.share-box-share-item'); + $shared_users.toggleClass('.share-box-share-item .share-box-users-item'); + $shared_users.find('.sharing-thumbnail-access').val(access_enum.NONE).hide(); + $shared_users.detach().appendTo('#share-box-users'); + $('.order-results-selector').trigger('change'); + $('#shared-users').addClass('text-align-center'); + $('#shared-users').prepend('<p>This project has not been shared</p>'); + }); + + createTestData(); +});
