mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 00:53:21 +00:00 
			
		
		
		
	GUACAMOLE-220: Move data source tabs to separate directive.
This commit is contained in:
		| @@ -26,7 +26,6 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto | ||||
|     // Required types | ||||
|     var Error                 = $injector.get('Error'); | ||||
|     var ManagementPermissions = $injector.get('ManagementPermissions'); | ||||
|     var PageDefinition        = $injector.get('PageDefinition'); | ||||
|     var PermissionFlagSet     = $injector.get('PermissionFlagSet'); | ||||
|     var PermissionSet         = $injector.get('PermissionSet'); | ||||
|     var User                  = $injector.get('User'); | ||||
| @@ -40,7 +39,6 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto | ||||
|     var permissionService        = $injector.get('permissionService'); | ||||
|     var requestService           = $injector.get('requestService'); | ||||
|     var schemaService            = $injector.get('schemaService'); | ||||
|     var translationStringService = $injector.get('translationStringService'); | ||||
|     var userService              = $injector.get('userService'); | ||||
|  | ||||
|     /** | ||||
| @@ -136,11 +134,14 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto | ||||
|     $scope.permissionsRemoved = new PermissionSet(); | ||||
|  | ||||
|     /** | ||||
|      * The management-related actions that the current user may perform on the | ||||
|      * user currently being created/modified, or null if the current user's | ||||
|      * permissions have not yet been loaded. | ||||
|      * For each applicable data source, the management-related actions that the | ||||
|      * current user may perform on the user account currently being created | ||||
|      * or modified, as a map of data source identifier to the | ||||
|      * {@link ManagementPermissions} object describing the actions available | ||||
|      * within that data source, or null if the current user's permissions have | ||||
|      * not yet been loaded. | ||||
|      * | ||||
|      * @type ManagementPermissions | ||||
|      * @type Object.<String, ManagementPermissions> | ||||
|      */ | ||||
|     $scope.managementPermissions = null; | ||||
|  | ||||
| @@ -153,14 +154,6 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto | ||||
|      */ | ||||
|     $scope.attributes = null; | ||||
|  | ||||
|     /** | ||||
|      * The pages associated with each user account having the given username. | ||||
|      * Each user account will be associated with a particular data source. | ||||
|      * | ||||
|      * @type PageDefinition[] | ||||
|      */ | ||||
|     $scope.accountPages = []; | ||||
|  | ||||
|     /** | ||||
|      * Returns whether critical data has completed being loaded. | ||||
|      * | ||||
| @@ -349,53 +342,42 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto | ||||
|     }) | ||||
|     .then(function dataReceived(values) { | ||||
|  | ||||
|         var managementPermissions = {}; | ||||
|  | ||||
|         $scope.attributes = values.attributes; | ||||
|  | ||||
|         // Generate pages for each applicable data source | ||||
|         $scope.accountPages = []; | ||||
|         $scope.managementPermissions = {}; | ||||
|         angular.forEach(dataSources, function addAccountPage(dataSource) { | ||||
|  | ||||
|             // Determine whether data source contains this user | ||||
|             var exists = (dataSource in $scope.users); | ||||
|  | ||||
|             // Calculate management actions available for this specific account | ||||
|             managementPermissions[dataSource] = ManagementPermissions.fromPermissionSet( | ||||
|             $scope.managementPermissions[dataSource] = ManagementPermissions.fromPermissionSet( | ||||
|                     values.permissions[dataSource], | ||||
|                     PermissionSet.SystemPermissionType.CREATE_USER, | ||||
|                     PermissionSet.hasUserPermission, | ||||
|                     exists ? username : null); | ||||
|  | ||||
|             // Account is not relevant if it does not exist and cannot be | ||||
|             // created | ||||
|             var readOnly = !managementPermissions[dataSource].canSaveObject; | ||||
|             if (!exists && readOnly) | ||||
|                 return; | ||||
|  | ||||
|             // Only the selected data source is relevant when cloning | ||||
|             if (cloneSourceUsername && dataSource !== $scope.dataSource) | ||||
|                 return; | ||||
|  | ||||
|             // Determine class name based on read-only / linked status | ||||
|             var className; | ||||
|             if (readOnly)    className = 'read-only'; | ||||
|             else if (exists) className = 'linked'; | ||||
|             else             className = 'unlinked'; | ||||
|  | ||||
|             // Add page entry | ||||
|             $scope.accountPages.push(new PageDefinition({ | ||||
|                 name      : translationStringService.canonicalize('DATA_SOURCE_' + dataSource) + '.NAME', | ||||
|                 url       : '/manage/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username || ''), | ||||
|                 className : className | ||||
|             })); | ||||
|  | ||||
|         }); | ||||
|  | ||||
|         $scope.managementPermissions = managementPermissions[$scope.dataSource]; | ||||
|  | ||||
|     }, requestService.WARN); | ||||
|  | ||||
|     /** | ||||
|      * Returns the URL for the page which manages the user account currently | ||||
|      * being edited under the given data source. The given data source need not | ||||
|      * be the same as the data source currently selected. | ||||
|      * | ||||
|      * @param {String} dataSource | ||||
|      *     The unique identifier of the data source that the URL is being | ||||
|      *     generated for. | ||||
|      * | ||||
|      * @returns {String} | ||||
|      *     The URL for the page which manages the user account currently being | ||||
|      *     edited under the given data source. | ||||
|      */ | ||||
|     $scope.getUserURL = function getUserURL(dataSource) { | ||||
|         return '/manage/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username || ''); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Cancels all pending edits, returning to the main list of users. | ||||
|      */ | ||||
|   | ||||
| @@ -0,0 +1,111 @@ | ||||
| /* | ||||
|  * Licensed to the Apache Software Foundation (ASF) under one | ||||
|  * or more contributor license agreements.  See the NOTICE file | ||||
|  * distributed with this work for additional information | ||||
|  * regarding copyright ownership.  The ASF licenses this file | ||||
|  * to you under the Apache License, Version 2.0 (the | ||||
|  * "License"); you may not use this file except in compliance | ||||
|  * with the License.  You may obtain a copy of the License at | ||||
|  * | ||||
|  *   http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, | ||||
|  * software distributed under the License is distributed on an | ||||
|  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
|  * KIND, either express or implied.  See the License for the | ||||
|  * specific language governing permissions and limitations | ||||
|  * under the License. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Directive which displays a set of tabs pointing to the same object within | ||||
|  * different data sources, such as user accounts which span multiple data | ||||
|  * sources. | ||||
|  */ | ||||
| angular.module('manage').directive('dataSourceTabs', ['$injector', | ||||
|     function dataSourceTabs($injector) { | ||||
|  | ||||
|     // Required types | ||||
|     var PageDefinition = $injector.get('PageDefinition'); | ||||
|  | ||||
|     // Required services | ||||
|     var translationStringService = $injector.get('translationStringService'); | ||||
|  | ||||
|     var directive = { | ||||
|  | ||||
|         restrict    : 'E', | ||||
|         replace     : true, | ||||
|         templateUrl : 'app/manage/templates/dataSourceTabs.html', | ||||
|  | ||||
|         scope : { | ||||
|  | ||||
|             /** | ||||
|              * The permissions which dictate the management actions available | ||||
|              * to the current user. | ||||
|              * | ||||
|              * @type Object.<String, ManagementPermissions> | ||||
|              */ | ||||
|             permissions : '=', | ||||
|  | ||||
|             /** | ||||
|              * A function which returns the URL of the object within a given | ||||
|              * data source. The relevant data source will be made available to | ||||
|              * the Angular expression defining this function as the | ||||
|              * "dataSource" variable. No other values will be made available, | ||||
|              * including values from the scope. | ||||
|              * | ||||
|              * @type Function | ||||
|              */ | ||||
|             url : '&' | ||||
|  | ||||
|         } | ||||
|  | ||||
|     }; | ||||
|  | ||||
|     directive.controller = ['$scope', function dataSourceTabsController($scope) { | ||||
|  | ||||
|         /** | ||||
|          * The set of pages which each manage the same object within different | ||||
|          * data sources. | ||||
|          * | ||||
|          * @type PageDefinition[] | ||||
|          */ | ||||
|         $scope.pages = null; | ||||
|  | ||||
|         // Keep pages synchronized with permissions | ||||
|         $scope.$watch('permissions', function permissionsChanged(permissions) { | ||||
|  | ||||
|             $scope.pages = []; | ||||
|             angular.forEach(permissions, function addDataSourcePage(managementPermissions, dataSource) { | ||||
|  | ||||
|                 // Determine whether data source contains this object | ||||
|                 var exists = !!managementPermissions.identifier; | ||||
|  | ||||
|                 // Data source is not relevant if the associated object does not | ||||
|                 // exist and cannot be created | ||||
|                 var readOnly = !managementPermissions.canSaveObject; | ||||
|                 if (!exists && readOnly) | ||||
|                     return; | ||||
|  | ||||
|                 // Determine class name based on read-only / linked status | ||||
|                 var className; | ||||
|                 if (readOnly)    className = 'read-only'; | ||||
|                 else if (exists) className = 'linked'; | ||||
|                 else             className = 'unlinked'; | ||||
|  | ||||
|                 // Add page entry | ||||
|                 $scope.pages.push(new PageDefinition({ | ||||
|                     name      : translationStringService.canonicalize('DATA_SOURCE_' + dataSource) + '.NAME', | ||||
|                     url       : $scope.url({ dataSource : dataSource }), | ||||
|                     className : className | ||||
|                 })); | ||||
|  | ||||
|             }); | ||||
|  | ||||
|         }); | ||||
|  | ||||
|     }]; | ||||
|  | ||||
|     return directive; | ||||
|  | ||||
| }]); | ||||
| @@ -0,0 +1,3 @@ | ||||
| <div class="page-tabs"> | ||||
|     <guac-page-list pages="pages"></guac-page-list> | ||||
| </div> | ||||
| @@ -6,17 +6,18 @@ | ||||
|         <h2>{{'MANAGE_USER.SECTION_HEADER_EDIT_USER' | translate}}</h2> | ||||
|         <guac-user-menu></guac-user-menu> | ||||
|     </div> | ||||
|     <div class="page-tabs"> | ||||
|         <guac-page-list pages="accountPages"></guac-page-list> | ||||
|     </div> | ||||
|     <data-data-source-tabs ng-hide="cloneSourceUsername" | ||||
|         permissions="managementPermissions" | ||||
|         url="getUserURL(dataSource)"> | ||||
|     </data-data-source-tabs> | ||||
|  | ||||
|     <!-- Warn if user is read-only --> | ||||
|     <div class="section" ng-hide="managementPermissions.canSaveObject"> | ||||
|     <div class="section" ng-hide="managementPermissions[dataSource].canSaveObject"> | ||||
|         <p class="notice read-only">{{'MANAGE_USER.INFO_READ_ONLY' | translate}}</p> | ||||
|     </div> | ||||
|  | ||||
|     <!-- Sections applicable to non-read-only users --> | ||||
|     <div ng-show="managementPermissions.canSaveObject"> | ||||
|     <div ng-show="managementPermissions[dataSource].canSaveObject"> | ||||
|  | ||||
|         <!-- User password section --> | ||||
|         <div class="section"> | ||||
| @@ -40,13 +41,14 @@ | ||||
|         </div> | ||||
|  | ||||
|         <!-- User attributes section --> | ||||
|         <div class="attributes" ng-show="managementPermissions.canChangeAttributes"> | ||||
|         <div class="attributes" ng-show="managementPermissions[dataSource].canChangeAttributes"> | ||||
|             <guac-form namespace="'USER_ATTRIBUTES'" content="attributes" | ||||
|                        model="user.attributes" model-only="!managementPermissions.canChangeAllAttributes"></guac-form> | ||||
|                        model="user.attributes" | ||||
|                        model-only="!managementPermissions[dataSource].canChangeAllAttributes"></guac-form> | ||||
|         </div> | ||||
|  | ||||
|         <!-- System permissions section --> | ||||
|         <system-permission-editor ng-show="managementPermissions.canChangePermissions" | ||||
|         <system-permission-editor ng-show="managementPermissions[dataSource].canChangePermissions" | ||||
|               username="selfUsername" | ||||
|               data-data-source="dataSource" | ||||
|               permission-flags="permissionFlags" | ||||
| @@ -55,7 +57,7 @@ | ||||
|         </system-permission-editor> | ||||
|  | ||||
|         <!-- Connection permissions section --> | ||||
|         <connection-permission-editor ng-show="managementPermissions.canChangePermissions" | ||||
|         <connection-permission-editor ng-show="managementPermissions[dataSource].canChangePermissions" | ||||
|               data-data-source="dataSource" | ||||
|               permission-flags="permissionFlags" | ||||
|               permissions-added="permissionsAdded" | ||||
| @@ -64,7 +66,7 @@ | ||||
|  | ||||
|         <!-- Form action buttons --> | ||||
|         <management-buttons namespace="'MANAGE_USER'" | ||||
|               permissions="managementPermissions" | ||||
|               permissions="managementPermissions[dataSource]" | ||||
|               save="saveUser()" | ||||
|               delete="deleteUser()" | ||||
|               clone="cloneUser()" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user