From 138ea40dc947f8ff32f82737e7c2d74adcc07718 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 18 Sep 2017 12:36:35 -0700 Subject: [PATCH] GUACAMOLE-394: List users in a table displaying last active time. --- .../settings/directives/guacSettingsUsers.js | 33 ++++++++++++++- .../webapp/app/settings/styles/user-list.css | 42 +++++++++++++++++++ .../app/settings/templates/settingsUsers.html | 35 +++++++++++----- .../src/main/webapp/translations/de.json | 6 ++- .../src/main/webapp/translations/en.json | 7 +++- .../src/main/webapp/translations/fr.json | 6 ++- .../src/main/webapp/translations/it.json | 6 ++- .../src/main/webapp/translations/nl.json | 6 ++- .../src/main/webapp/translations/no.json | 6 ++- .../src/main/webapp/translations/ru.json | 6 ++- 10 files changed, 134 insertions(+), 19 deletions(-) create mode 100644 guacamole/src/main/webapp/app/settings/styles/user-list.css diff --git a/guacamole/src/main/webapp/app/settings/directives/guacSettingsUsers.js b/guacamole/src/main/webapp/app/settings/directives/guacSettingsUsers.js index cc134fa94..1ac9fad9c 100644 --- a/guacamole/src/main/webapp/app/settings/directives/guacSettingsUsers.js +++ b/guacamole/src/main/webapp/app/settings/directives/guacSettingsUsers.js @@ -36,9 +36,11 @@ angular.module('settings').directive('guacSettingsUsers', [function guacSettings // Required types var ManageableUser = $injector.get('ManageableUser'); var PermissionSet = $injector.get('PermissionSet'); + var SortOrder = $injector.get('SortOrder'); // Required services var $location = $injector.get('$location'); + var $translate = $injector.get('$translate'); var authenticationService = $injector.get('authenticationService'); var dataSourceService = $injector.get('dataSourceService'); var guacNotification = $injector.get('guacNotification'); @@ -98,9 +100,37 @@ angular.module('settings').directive('guacSettingsUsers', [function guacSettings * @type String[] */ $scope.filteredUserProperties = [ + 'user.lastActive', 'user.username' ]; + /** + * The date format for use for the last active date. + * + * @type String + */ + $scope.dateFormat = null; + + /** + * SortOrder instance which stores the sort order of the listed + * users. + * + * @type SortOrder + */ + $scope.order = new SortOrder([ + 'user.username', + '-user.lastActive' + ]); + + // Get session date format + $translate('SETTINGS_USERS.FORMAT_DATE') + .then(function dateFormatReceived(retrievedDateFormat) { + + // Store received date format + $scope.dateFormat = retrievedDateFormat; + + }); + /** * Returns whether critical data has completed being loaded. * @@ -110,7 +140,8 @@ angular.module('settings').directive('guacSettingsUsers', [function guacSettings */ $scope.isLoaded = function isLoaded() { - return $scope.manageableUsers !== null + return $scope.dateFormat !== null + && $scope.manageableUsers !== null && $scope.permissions !== null; }; diff --git a/guacamole/src/main/webapp/app/settings/styles/user-list.css b/guacamole/src/main/webapp/app/settings/styles/user-list.css new file mode 100644 index 000000000..6c0edd59f --- /dev/null +++ b/guacamole/src/main/webapp/app/settings/styles/user-list.css @@ -0,0 +1,42 @@ +/* + * 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. + */ + +.settings.users table.user-list { + width: 100%; +} + +.settings.users table.user-list th.last-active, +.settings.users table.user-list td.last-active { + white-space: nowrap; + width: 0; +} + +.settings.users table.user-list th.username, +.settings.users table.user-list td.username { + width: 100%; +} + +.settings.users table.user-list tr.user td.username a[href] { + display: block; + padding: .5em 1em; +} + +.settings.users table.user-list tr.user td.username { + padding: 0; +} diff --git a/guacamole/src/main/webapp/app/settings/templates/settingsUsers.html b/guacamole/src/main/webapp/app/settings/templates/settingsUsers.html index 41dac6c4b..67f6760eb 100644 --- a/guacamole/src/main/webapp/app/settings/templates/settingsUsers.html +++ b/guacamole/src/main/webapp/app/settings/templates/settingsUsers.html @@ -21,19 +21,32 @@ -
- -
+ + + + + + + + + + + + + +
+ {{'SETTINGS_USERS.TABLE_HEADER_USERNAME' | translate}} + + {{'SETTINGS_USERS.TABLE_HEADER_LAST_ACTIVE' | translate}} +
+ +
+ {{manageableUser.user.username}} +
+
{{manageableUser.user.lastActive | date : dateFormat}}
+ items="filteredManageableUsers | orderBy : order.predicate"> \ No newline at end of file diff --git a/guacamole/src/main/webapp/translations/de.json b/guacamole/src/main/webapp/translations/de.json index 940340281..90953e5c7 100644 --- a/guacamole/src/main/webapp/translations/de.json +++ b/guacamole/src/main/webapp/translations/de.json @@ -598,9 +598,13 @@ "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + "HELP_USERS" : "Klicke oder Tippe auf einen Benutzer um diesen zu verwalten. Abhänig von Ihrer Zugriffsebene können Benutzer hinzugefügt, gelöscht bzw. dessen Passwort geändert werden.", - "SECTION_HEADER_USERS" : "Benutzer" + "SECTION_HEADER_USERS" : "Benutzer", + + "TABLE_HEADER_USERNAME" : "Benutzername" }, diff --git a/guacamole/src/main/webapp/translations/en.json b/guacamole/src/main/webapp/translations/en.json index 2b4fb5d32..a64f64ca4 100644 --- a/guacamole/src/main/webapp/translations/en.json +++ b/guacamole/src/main/webapp/translations/en.json @@ -675,9 +675,14 @@ "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + "HELP_USERS" : "Click or tap on a user below to manage that user. Depending on your access level, users can be added and deleted, and their passwords can be changed.", - "SECTION_HEADER_USERS" : "Users" + "SECTION_HEADER_USERS" : "Users", + + "TABLE_HEADER_LAST_ACTIVE" : "Last active", + "TABLE_HEADER_USERNAME" : "Username" }, diff --git a/guacamole/src/main/webapp/translations/fr.json b/guacamole/src/main/webapp/translations/fr.json index d59c38406..8ebbd36cf 100644 --- a/guacamole/src/main/webapp/translations/fr.json +++ b/guacamole/src/main/webapp/translations/fr.json @@ -601,9 +601,13 @@ "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + "HELP_USERS" : "Cliquer ou appuyer sur un utilisateur en dessous pour le gérer. Selon vos permissions, les utilisateurs peuvent être ajoutés, supprimés, leur mot de passe changé.", - "SECTION_HEADER_USERS" : "Utilisateur" + "SECTION_HEADER_USERS" : "Utilisateur", + + "TABLE_HEADER_USERNAME" : "Identifiant" }, diff --git a/guacamole/src/main/webapp/translations/it.json b/guacamole/src/main/webapp/translations/it.json index e84e67f48..5b3f64178 100644 --- a/guacamole/src/main/webapp/translations/it.json +++ b/guacamole/src/main/webapp/translations/it.json @@ -543,9 +543,13 @@ "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + "HELP_USERS" : "Click or tap on a user below to manage that user. Depending on your access level, users can be added and deleted, and their passwords can be changed.", - "SECTION_HEADER_USERS" : "Utenti" + "SECTION_HEADER_USERS" : "Utenti", + + "TABLE_HEADER_USERNAME" : "Username" }, diff --git a/guacamole/src/main/webapp/translations/nl.json b/guacamole/src/main/webapp/translations/nl.json index 7cc867b74..69a789ac6 100644 --- a/guacamole/src/main/webapp/translations/nl.json +++ b/guacamole/src/main/webapp/translations/nl.json @@ -631,9 +631,13 @@ "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + "HELP_USERS" : "Klik of tik op een van de onderstaande gebruikers om die te beheren. Afhankelijk van uw toegangsniveau kunnen gebruikers worden toegevoegd, verwijderd en hun wachtwoorden gewijzigd.", - "SECTION_HEADER_USERS" : "Gebruikers" + "SECTION_HEADER_USERS" : "Gebruikers", + + "TABLE_HEADER_USERNAME" : "Gebruikersnaam" }, diff --git a/guacamole/src/main/webapp/translations/no.json b/guacamole/src/main/webapp/translations/no.json index 8b20b5d84..30ea8719d 100644 --- a/guacamole/src/main/webapp/translations/no.json +++ b/guacamole/src/main/webapp/translations/no.json @@ -612,9 +612,13 @@ "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + "HELP_USERS" : "Klikk på en bruker under for å administrere den brukeren. Avhengig av din tilgang kan brukere legges til, slettes og passordet kan endres.", - "SECTION_HEADER_USERS" : "Brukere" + "SECTION_HEADER_USERS" : "Brukere", + + "TABLE_HEADER_USERNAME" : "Brukernavn" }, diff --git a/guacamole/src/main/webapp/translations/ru.json b/guacamole/src/main/webapp/translations/ru.json index 0e47f60d2..4f045257e 100644 --- a/guacamole/src/main/webapp/translations/ru.json +++ b/guacamole/src/main/webapp/translations/ru.json @@ -524,9 +524,13 @@ "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + "HELP_USERS" : "Нажмите на пользователя, чтобы управлять им. В зависимости от прав доступа возможно добавление и удаление пользователей, а также изменение паролей.", - "SECTION_HEADER_USERS" : "Пользователи" + "SECTION_HEADER_USERS" : "Пользователи", + + "TABLE_HEADER_USERNAME" : "Имя пользователя" },