diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js index e6396c631..22d6c8837 100644 --- a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js +++ b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionController.js @@ -21,7 +21,7 @@ */ /** - * The controller for the connection edit modal. + * The controller for editing or creating connections. */ angular.module('manage').controller('manageConnectionController', ['$scope', '$injector', function manageConnectionController($scope, $injector) { @@ -63,7 +63,6 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i connectionGroupService.getConnectionGroupTree(ConnectionGroup.ROOT_IDENTIFIER, PermissionSet.ObjectPermissionType.UPDATE) .success(function connectionGroupReceived(rootGroup) { $scope.rootGroup = rootGroup; - $scope.loadingConnections = false; }); // Get protocol metadata @@ -135,12 +134,11 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i }); }); - }; /** * An action to be provided along with the object sent to showStatus which - * closes the currently-shown status dialog. + * immediately deletes the current connection. */ var DELETE_ACTION = { name : "manage.edit.connection.delete", @@ -204,6 +202,3 @@ angular.module('manage').controller('manageConnectionController', ['$scope', '$i }; }]); - - - diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js index 87520c03d..2aa6a2177 100644 --- a/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js +++ b/guacamole/src/main/webapp/app/manage/controllers/manageConnectionGroupController.js @@ -21,7 +21,7 @@ */ /** - * The controller for the connection group edit modal. + * The controller for editing or creating connection groups. */ angular.module('manage').controller('manageConnectionGroupController', ['$scope', '$injector', function manageConnectionGroupController($scope, $injector) { @@ -31,28 +31,53 @@ angular.module('manage').controller('manageConnectionGroupController', ['$scope' var PermissionSet = $injector.get('PermissionSet'); // Required services - var connectionGroupService = $injector.get('connectionGroupService'); + var $location = $injector.get('$location'); var $routeParams = $injector.get('$routeParams'); + var connectionGroupService = $injector.get('connectionGroupService'); - // Copy data into a new conection group object in case the user doesn't want to save + /** + * An action to be provided along with the object sent to showStatus which + * closes the currently-shown status dialog. + */ + var ACKNOWLEDGE_ACTION = { + name : "manage.error.action.acknowledge", + // Handle action + callback : function acknowledgeCallback() { + $scope.showStatus(false); + } + }; + + /** + * The identifier of the connection group being edited. If a new connection + * group is being created, this will not be defined. + * + * @type String + */ var identifier = $routeParams.id; - // Pull connection group data + // Pull connection group hierarchy + connectionGroupService.getConnectionGroupTree(ConnectionGroup.ROOT_IDENTIFIER, PermissionSet.ObjectPermissionType.UPDATE) + .success(function connectionGroupReceived(rootGroup) { + $scope.rootGroup = rootGroup; + }); + + // If we are editing an existing connection group, pull its data if (identifier) { connectionGroupService.getConnectionGroup(identifier).success(function connectionGroupReceived(connectionGroup) { $scope.connectionGroup = connectionGroup; }); } + // If we are creating a new connection group, populate skeleton connection group data else $scope.connectionGroup = new ConnectionGroup(); - connectionGroupService.getConnectionGroupTree(ConnectionGroup.ROOT_IDENTIFIER, PermissionSet.ObjectPermissionType.UPDATE) - .success(function connectionGroupReceived(rootGroup) { - $scope.rootGroup = rootGroup; - $scope.loadingConnections = false; - }); - + /** + * Available connection group types, as translation string / internal value + * pairs. + * + * @type Object[] + */ $scope.types = [ { label: "organizational", @@ -65,59 +90,99 @@ angular.module('manage').controller('manageConnectionGroupController', ['$scope' ]; /** - * Close the modal. + * Cancels all pending edits, returning to the management page. */ - $scope.close = function close() { - connectionGroupEditModal.deactivate(); + $scope.cancel = function cancel() { + $location.path('/manage/'); + }; + + /** + * Saves the connection group, creating a new connection group or updating + * the existing connection group. + */ + $scope.saveConnectionGroup = function saveConnectionGroup() { + + // Save the connection + connectionGroupService.saveConnectionGroup($scope.connectionGroup) + .success(function savedConnectionGroup() { + $location.path('/manage/'); + }) + + // Notify of any errors + .error(function connectionGroupSaveFailed(error) { + $scope.showStatus({ + 'className' : 'error', + 'title' : 'manage.error.title', + 'text' : error.message, + 'actions' : [ ACKNOWLEDGE_ACTION ] + }); + }); + }; /** - * Save the connection and close the modal. + * An action to be provided along with the object sent to showStatus which + * immediately deletes the current connection group. */ - $scope.save = function save() { - connectionGroupService.saveConnectionGroup($scope.connectionGroup).success(function successfullyUpdatedConnectionGroup() { - - var oldParentID = oldConnectionGroup.parentIdentifier; - var newParentID = $scope.connectionGroup.parentIdentifier; - - // Copy the data back to the original model - angular.extend(oldConnectionGroup, $scope.connectionGroup); - - // New groups are created by default in root - don't try to move it if it's already there. - if(newConnectionGroup && newParentID === $scope.rootGroup.identifier) { - $scope.moveItem($scope.connectionGroup, oldParentID, newParentID); - } else { - connectionGroupService.moveConnectionGroup($scope.connectionGroup).then(function moveConnectionGroup() { - $scope.moveItem($scope.connectionGroup, oldParentID, newParentID); - }); - } - - // Close the modal - connectionGroupEditModal.deactivate(); - }); + var DELETE_ACTION = { + name : "manage.edit.connectionGroup.delete", + className : "danger", + // Handle action + callback : function deleteCallback() { + deleteConnectionGroupImmediately(); + $scope.showStatus(false); + } }; - + /** - * Delete the connection and close the modal. + * An action to be provided along with the object sent to showStatus which + * closes the currently-shown status dialog. */ - $scope['delete'] = function deleteConnectionGroup() { - - // Nothing to delete if the connection is new - if(newConnectionGroup) - // Close the modal - connectionGroupEditModal.deactivate(); - - connectionGroupService.deleteConnectionGroup($scope.connectionGroup).success(function successfullyDeletedConnectionGroup() { - var oldParentID = oldConnectionGroup.parentIdentifier; - - // We have to remove this connection group from the heirarchy - $scope.moveItem($scope.connectionGroup, oldParentID); - - // Close the modal - connectionGroupEditModal.deactivate(); + var CANCEL_ACTION = { + name : "manage.edit.connectionGroup.cancel", + // Handle action + callback : function cancelCallback() { + $scope.showStatus(false); + } + }; + + /** + * Immediately deletes the current connection group, without prompting the + * user for confirmation. + */ + var deleteConnectionGroupImmediately = function deleteConnectionGroupImmediately() { + + // Delete the connection group + connectionGroupService.deleteConnectionGroup($scope.connectionGroup) + .success(function deletedConnectionGroup() { + $location.path('/manage/'); + }) + + // Notify of any errors + .error(function connectionGroupDeletionFailed(error) { + $scope.showStatus({ + 'className' : 'error', + 'title' : 'manage.error.title', + 'text' : error.message, + 'actions' : [ ACKNOWLEDGE_ACTION ] + }); }); - } + + }; + + /** + * Deletes the connection group, prompting the user first to confirm that + * deletion is desired. + */ + $scope.deleteConnectionGroup = function deleteConnectionGroup() { + + // Confirm deletion request + $scope.showStatus({ + 'title' : 'manage.edit.connectionGroup.confirmDelete.title', + 'text' : 'manage.edit.connectionGroup.confirmDelete.text', + 'actions' : [ DELETE_ACTION, CANCEL_ACTION] + }); + + }; + }]); - - - diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js index c62cb38fe..bf1a6cfdf 100644 --- a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js +++ b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js @@ -21,7 +21,7 @@ */ /** - * The controller for the connection edit modal. + * The controller for editing users. */ angular.module('manage').controller('manageUserController', ['$scope', '$injector', function manageUserController($scope, $injector) { diff --git a/guacamole/src/main/webapp/app/manage/templates/manageConnection.html b/guacamole/src/main/webapp/app/manage/templates/manageConnection.html index 4d4ab7de7..aaf67618b 100644 --- a/guacamole/src/main/webapp/app/manage/templates/manageConnection.html +++ b/guacamole/src/main/webapp/app/manage/templates/manageConnection.html @@ -25,10 +25,8 @@ THE SOFTWARE. {{'home.logout' | translate}} - +

{{'manage.edit.connection.title' | translate}}

- -
@@ -61,31 +59,28 @@ THE SOFTWARE.

{{'manage.edit.connection.parameters' | translate}}

-
-
- - - - - - -
{{'protocol.' + connection.protocol + '.parameters.' + parameter.name + '.label' | translate}}: - -
+ + + + + + + +
{{'protocol.' + connection.protocol + '.parameters.' + parameter.name + '.label' | translate}}: + +
- - - + + +
- +

{{'manage.edit.connection.history.usageHistory' | translate}}

- -

{{'manage.edit.connection.history.connectionNotUsed' | translate}}

diff --git a/guacamole/src/main/webapp/app/manage/templates/manageConnectionGroup.html b/guacamole/src/main/webapp/app/manage/templates/manageConnectionGroup.html index 336ee2a9f..05fd26c5f 100644 --- a/guacamole/src/main/webapp/app/manage/templates/manageConnectionGroup.html +++ b/guacamole/src/main/webapp/app/manage/templates/manageConnectionGroup.html @@ -25,8 +25,8 @@ THE SOFTWARE. {{'home.logout' | translate}} - -

{{connectionGroup.name}}

+ +

{{'manage.edit.connectionGroup.title' | translate}}

@@ -42,8 +42,8 @@ THE SOFTWARE. + + @@ -57,9 +57,9 @@ THE SOFTWARE.
{{'manage.edit.connectionGroup.location' | translate}} - -
- +
- - - + + +
\ No newline at end of file diff --git a/guacamole/src/main/webapp/translations/en_US.json b/guacamole/src/main/webapp/translations/en_US.json index 84637ccf2..231000dda 100644 --- a/guacamole/src/main/webapp/translations/en_US.json +++ b/guacamole/src/main/webapp/translations/en_US.json @@ -64,9 +64,14 @@ } }, "connectionGroup": { + "title" : "Edit Connection Group", "cancel" : "Cancel", "save" : "Save", "delete" : "Delete", + "confirmDelete" : { + "title" : "Delete Connection", + "text" : "Connection groups cannot be restored after they have been deleted. Are you sure you want to delete this connection group?" + }, "usageHistory" : "Usage History:", "type" : { "label" : "Type",