mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-11-04 02:53:22 +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