mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 13:41:21 +00:00
GUAC-1053: Move settings-specific things into own namespace.
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
/**
|
||||
* A directive for managing all connections and connection groups in the system.
|
||||
*/
|
||||
angular.module('settings').directive('guacManageConnections', [function guacManageConnections() {
|
||||
angular.module('settings').directive('guacSettingsConnections', [function guacSettingsConnections() {
|
||||
|
||||
return {
|
||||
// Element only
|
||||
@@ -33,8 +33,8 @@ angular.module('settings').directive('guacManageConnections', [function guacMana
|
||||
scope: {
|
||||
},
|
||||
|
||||
templateUrl: 'app/settings/templates/manageConnections.html',
|
||||
controller: ['$scope', '$injector', function manageConnectionsController($scope, $injector) {
|
||||
templateUrl: 'app/settings/templates/settingsConnections.html',
|
||||
controller: ['$scope', '$injector', function settingsConnectionsController($scope, $injector) {
|
||||
|
||||
// Required types
|
||||
var ConnectionGroup = $injector.get('ConnectionGroup');
|
||||
@@ -55,7 +55,7 @@ angular.module('settings').directive('guacManageConnections', [function guacMana
|
||||
* showStatus which closes the currently-shown status dialog.
|
||||
*/
|
||||
var ACKNOWLEDGE_ACTION = {
|
||||
name : "MANAGE_CONNECTION.ACTION_ACKNOWLEDGE",
|
||||
name : "SETTINGS_CONNECTIONS.ACTION_ACKNOWLEDGE",
|
||||
// Handle action
|
||||
callback : function acknowledgeCallback() {
|
||||
guacNotification.showStatus(false);
|
@@ -23,7 +23,7 @@
|
||||
/**
|
||||
* A directive for managing all active Guacamole sessions.
|
||||
*/
|
||||
angular.module('settings').directive('guacManageSessions', [function guacManageSessions() {
|
||||
angular.module('settings').directive('guacSettingsSessions', [function guacSettingsSessions() {
|
||||
|
||||
return {
|
||||
// Element only
|
||||
@@ -33,9 +33,8 @@ angular.module('settings').directive('guacManageSessions', [function guacManageS
|
||||
scope: {
|
||||
},
|
||||
|
||||
templateUrl: 'app/settings/templates/manageSessions.html',
|
||||
controller: ['$scope', '$injector',
|
||||
function manageSessionsController($scope, $injector) {
|
||||
templateUrl: 'app/settings/templates/settingsSessions.html',
|
||||
controller: ['$scope', '$injector', function settingsSessionsController($scope, $injector) {
|
||||
|
||||
// Required types
|
||||
var ActiveConnectionWrapper = $injector.get('ActiveConnectionWrapper');
|
||||
@@ -218,7 +217,7 @@ angular.module('settings').directive('guacManageSessions', [function guacManageS
|
||||
});
|
||||
|
||||
// Get session date format
|
||||
$translate('MANAGE_SESSION.FORMAT_STARTDATE').then(function sessionDateFormatReceived(retrievedSessionDateFormat) {
|
||||
$translate('SETTINGS_SESSIONS.FORMAT_STARTDATE').then(function sessionDateFormatReceived(retrievedSessionDateFormat) {
|
||||
|
||||
// Store received date format
|
||||
sessionDateFormat = retrievedSessionDateFormat;
|
||||
@@ -248,7 +247,7 @@ angular.module('settings').directive('guacManageSessions', [function guacManageS
|
||||
* showStatus which closes the currently-shown status dialog.
|
||||
*/
|
||||
var ACKNOWLEDGE_ACTION = {
|
||||
name : "MANAGE_SESSION.ACTION_ACKNOWLEDGE",
|
||||
name : "SETTINGS_SESSIONS.ACTION_ACKNOWLEDGE",
|
||||
// Handle action
|
||||
callback : function acknowledgeCallback() {
|
||||
guacNotification.showStatus(false);
|
||||
@@ -260,7 +259,7 @@ angular.module('settings').directive('guacManageSessions', [function guacManageS
|
||||
* showStatus which closes the currently-shown status dialog.
|
||||
*/
|
||||
var CANCEL_ACTION = {
|
||||
name : "MANAGE_SESSION.ACTION_CANCEL",
|
||||
name : "SETTINGS_SESSIONS.ACTION_CANCEL",
|
||||
// Handle action
|
||||
callback : function cancelCallback() {
|
||||
guacNotification.showStatus(false);
|
||||
@@ -273,7 +272,7 @@ angular.module('settings').directive('guacManageSessions', [function guacManageS
|
||||
* sessions.
|
||||
*/
|
||||
var DELETE_ACTION = {
|
||||
name : "MANAGE_SESSION.ACTION_DELETE",
|
||||
name : "SETTINGS_SESSIONS.ACTION_DELETE",
|
||||
className : "danger",
|
||||
// Handle action
|
||||
callback : function deleteCallback() {
|
||||
@@ -306,7 +305,7 @@ angular.module('settings').directive('guacManageSessions', [function guacManageS
|
||||
.error(function activeConnectionDeletionFailed(error) {
|
||||
guacNotification.showStatus({
|
||||
'className' : 'error',
|
||||
'title' : 'MANAGE_SESSION.DIALOG_HEADER_ERROR',
|
||||
'title' : 'SETTINGS_SESSIONS.DIALOG_HEADER_ERROR',
|
||||
'text' : error.message,
|
||||
'actions' : [ ACKNOWLEDGE_ACTION ]
|
||||
});
|
||||
@@ -321,8 +320,8 @@ angular.module('settings').directive('guacManageSessions', [function guacManageS
|
||||
$scope.deleteSessions = function deleteSessions() {
|
||||
// Confirm deletion request
|
||||
guacNotification.showStatus({
|
||||
'title' : 'MANAGE_SESSION.DIALOG_HEADER_CONFIRM_DELETE',
|
||||
'text' : 'MANAGE_SESSION.TEXT_CONFIRM_DELETE',
|
||||
'title' : 'SETTINGS_SESSIONS.DIALOG_HEADER_CONFIRM_DELETE',
|
||||
'text' : 'SETTINGS_SESSIONS.TEXT_CONFIRM_DELETE',
|
||||
'actions' : [ DELETE_ACTION, CANCEL_ACTION]
|
||||
});
|
||||
};
|
@@ -23,7 +23,7 @@
|
||||
/**
|
||||
* A directive for managing all users in the system.
|
||||
*/
|
||||
angular.module('settings').directive('guacManageUsers', [function guacManageUsers() {
|
||||
angular.module('settings').directive('guacSettingsUsers', [function guacSettingsUsers() {
|
||||
|
||||
return {
|
||||
// Element only
|
||||
@@ -33,8 +33,8 @@ angular.module('settings').directive('guacManageUsers', [function guacManageUser
|
||||
scope: {
|
||||
},
|
||||
|
||||
templateUrl: 'app/settings/templates/manageUsers.html',
|
||||
controller: ['$scope', '$injector', function manageUsersController($scope, $injector) {
|
||||
templateUrl: 'app/settings/templates/settingsUsers.html',
|
||||
controller: ['$scope', '$injector', function settingsUsersController($scope, $injector) {
|
||||
|
||||
// Required types
|
||||
var PermissionSet = $injector.get('PermissionSet');
|
||||
@@ -55,7 +55,7 @@ angular.module('settings').directive('guacManageUsers', [function guacManageUser
|
||||
* showStatus which closes the currently-shown status dialog.
|
||||
*/
|
||||
var ACKNOWLEDGE_ACTION = {
|
||||
name : "MANAGE_USER.ACTION_ACKNOWLEDGE",
|
||||
name : "SETTINGS_USERS.ACTION_ACKNOWLEDGE",
|
||||
// Handle action
|
||||
callback : function acknowledgeCallback() {
|
||||
guacNotification.showStatus(false);
|
||||
@@ -175,7 +175,7 @@ angular.module('settings').directive('guacManageUsers', [function guacManageUser
|
||||
.error(function userCreationFailed(error) {
|
||||
guacNotification.showStatus({
|
||||
'className' : 'error',
|
||||
'title' : 'MANAGE_USER.DIALOG_HEADER_ERROR',
|
||||
'title' : 'SETTINGS_USERS.DIALOG_HEADER_ERROR',
|
||||
'text' : error.message,
|
||||
'actions' : [ ACKNOWLEDGE_ACTION ]
|
||||
});
|
@@ -33,7 +33,7 @@
|
||||
|
||||
<!-- Active user count -->
|
||||
<span class="activeUserCount" ng-show="item.getActiveConnections()">
|
||||
{{'MANAGE_CONNECTION.INFO_ACTIVE_USER_COUNT' | translate:'{USERS: item.getActiveConnections()}'}}
|
||||
{{'SETTINGS_CONNECTIONS.INFO_ACTIVE_USER_COUNT' | translate:'{USERS: item.getActiveConnections()}'}}
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
@@ -23,7 +23,7 @@ THE SOFTWARE.
|
||||
<div class="view">
|
||||
|
||||
<div class="header">
|
||||
<h2>{{'MANAGE_SETTINGS.SECTION_HEADER_MANAGE_SETTINGS' | translate}}</h2>
|
||||
<h2>{{'SETTINGS.SECTION_HEADER_SETTINGS' | translate}}</h2>
|
||||
<guac-user-menu></guac-user-menu>
|
||||
</div>
|
||||
|
||||
@@ -33,8 +33,8 @@ THE SOFTWARE.
|
||||
</div>
|
||||
|
||||
<!-- Selected tab -->
|
||||
<guac-manage-users ng-if="activeTab === 'users'"></guac-manage-users>
|
||||
<guac-manage-connections ng-if="activeTab === 'connections'"></guac-manage-connections>
|
||||
<guac-manage-sessions ng-if="activeTab === 'sessions'"></guac-manage-sessions>
|
||||
<guac-settings-users ng-if="activeTab === 'users'"></guac-settings-users>
|
||||
<guac-settings-connections ng-if="activeTab === 'connections'"></guac-settings-connections>
|
||||
<guac-settings-sessions ng-if="activeTab === 'sessions'"></guac-settings-sessions>
|
||||
|
||||
</div>
|
||||
|
@@ -22,18 +22,18 @@
|
||||
-->
|
||||
|
||||
<!-- Connection management -->
|
||||
<p>{{'MANAGE_CONNECTION.HELP_CONNECTIONS' | translate}}</p>
|
||||
<p>{{'SETTINGS_CONNECTIONS.HELP_CONNECTIONS' | translate}}</p>
|
||||
|
||||
<!-- Form action buttons -->
|
||||
<div class="action-buttons">
|
||||
|
||||
<a class="add-connection button"
|
||||
ng-show="canCreateConnections"
|
||||
href="#/manage/connections/">{{'MANAGE_CONNECTION.ACTION_NEW_CONNECTION' | translate}}</a>
|
||||
href="#/manage/connections/">{{'SETTINGS_CONNECTIONS.ACTION_NEW_CONNECTION' | translate}}</a>
|
||||
|
||||
<a class="add-connection-group button"
|
||||
ng-show="canCreateConnectionGroups"
|
||||
href="#/manage/connectionGroups/">{{'MANAGE_CONNECTION.ACTION_NEW_CONNECTION_GROUP' | translate}}</a>
|
||||
href="#/manage/connectionGroups/">{{'SETTINGS_CONNECTIONS.ACTION_NEW_CONNECTION_GROUP' | translate}}</a>
|
||||
|
||||
</div>
|
||||
|
@@ -22,16 +22,16 @@
|
||||
-->
|
||||
|
||||
<!-- User Session management -->
|
||||
<p>{{'MANAGE_SESSION.HELP_SESSIONS' | translate}}</p>
|
||||
<p>{{'SETTINGS_SESSIONS.HELP_SESSIONS' | translate}}</p>
|
||||
|
||||
<!-- Form action buttons -->
|
||||
<div class="action-buttons">
|
||||
<button class="delete-sessions danger" ng-disabled="!canDeleteSessions()" ng-click="deleteSessions()">{{'MANAGE_SESSION.ACTION_DELETE' | translate}}</button>
|
||||
<button class="delete-sessions danger" ng-disabled="!canDeleteSessions()" ng-click="deleteSessions()">{{'SETTINGS_SESSIONS.ACTION_DELETE' | translate}}</button>
|
||||
</div>
|
||||
|
||||
<!-- Session filter -->
|
||||
<guac-filter filtered-items="filteredWrappers" items="wrappers"
|
||||
placeholder="'MANAGE_SESSION.FIELD_PLACEHOLDER_FILTER' | translate"
|
||||
placeholder="'SETTINGS_SESSIONS.FIELD_PLACEHOLDER_FILTER' | translate"
|
||||
properties="filteredWrapperProperties"></guac-filter>
|
||||
|
||||
<!-- List of current user sessions -->
|
||||
@@ -40,16 +40,16 @@
|
||||
<tr>
|
||||
<th class="select-session"></th>
|
||||
<th guac-sort-order="wrapperOrder" guac-sort-property="'activeConnection.username'">
|
||||
{{'MANAGE_SESSION.TABLE_HEADER_SESSION_USERNAME' | translate}}
|
||||
{{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_USERNAME' | translate}}
|
||||
</th>
|
||||
<th guac-sort-order="wrapperOrder" guac-sort-property="'startDate'">
|
||||
{{'MANAGE_SESSION.TABLE_HEADER_SESSION_STARTDATE' | translate}}
|
||||
{{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_STARTDATE' | translate}}
|
||||
</th>
|
||||
<th guac-sort-order="wrapperOrder" guac-sort-property="'activeConnection.remoteHost'">
|
||||
{{'MANAGE_SESSION.TABLE_HEADER_SESSION_REMOTEHOST' | translate}}
|
||||
{{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_REMOTEHOST' | translate}}
|
||||
</th>
|
||||
<th guac-sort-order="wrapperOrder" guac-sort-property="'name'">
|
||||
{{'MANAGE_SESSION.TABLE_HEADER_SESSION_CONNECTION_NAME' | translate}}
|
||||
{{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_CONNECTION_NAME' | translate}}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
<!-- Text displayed if no sessions exist -->
|
||||
<p class="placeholder" ng-hide="wrapperPage.length">
|
||||
{{'MANAGE_SESSION.INFO_NO_SESSIONS' | translate}}
|
||||
{{'SETTINGS_SESSIONS.INFO_NO_SESSIONS' | translate}}
|
||||
</p>
|
||||
|
||||
<!-- Pager for session list -->
|
@@ -22,12 +22,12 @@
|
||||
-->
|
||||
|
||||
<!-- User management -->
|
||||
<p>{{'MANAGE_USER.HELP_USERS' | translate}}</p>
|
||||
<p>{{'SETTINGS_USERS.HELP_USERS' | translate}}</p>
|
||||
|
||||
<!-- Form action buttons -->
|
||||
<div class="action-buttons" ng-show="canCreateUsers">
|
||||
<input type="text" ng-model="newUsername" class="name username" autocorrect="off" autocapitalize="off"/>
|
||||
<button class="add-user" ng-click="newUser()">{{'MANAGE_USER.ACTION_NEW_USER' | translate}}</button>
|
||||
<button class="add-user" ng-click="newUser()">{{'SETTINGS_USERS.ACTION_NEW_USER' | translate}}</button>
|
||||
</div>
|
||||
|
||||
<!-- List of users this user has access to -->
|
@@ -155,8 +155,6 @@
|
||||
"ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
|
||||
"ACTION_CLONE" : "@:APP.ACTION_CLONE",
|
||||
"ACTION_DELETE" : "@:APP.ACTION_DELETE",
|
||||
"ACTION_NEW_CONNECTION" : "New Connection",
|
||||
"ACTION_NEW_CONNECTION_GROUP" : "New Group",
|
||||
"ACTION_SAVE" : "@:APP.ACTION_SAVE",
|
||||
|
||||
"DIALOG_HEADER_CONFIRM_DELETE" : "Delete Connection",
|
||||
@@ -168,14 +166,10 @@
|
||||
|
||||
"FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE",
|
||||
|
||||
"HELP_CONNECTIONS" : "Click or tap on a connection below to manage that connection. Depending on your access level, connections can be added and deleted, and their properties (protocol, hostname, port, etc.) can be changed.",
|
||||
|
||||
"INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT",
|
||||
"INFO_CONNECTION_DURATION_UNKNOWN" : "--",
|
||||
"INFO_CONNECTION_ACTIVE_NOW" : "Active Now",
|
||||
"INFO_CONNECTION_NOT_USED" : "This connection has not yet been used.",
|
||||
|
||||
"SECTION_HEADER_CONNECTIONS" : "Manage Connections",
|
||||
"SECTION_HEADER_EDIT_CONNECTION" : "Edit Connection",
|
||||
"SECTION_HEADER_HISTORY" : "Usage History",
|
||||
"SECTION_HEADER_PARAMETERS" : "Parameters",
|
||||
@@ -217,7 +211,6 @@
|
||||
"ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
|
||||
"ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
|
||||
"ACTION_DELETE" : "@:APP.ACTION_DELETE",
|
||||
"ACTION_NEW_USER" : "New User",
|
||||
"ACTION_SAVE" : "@:APP.ACTION_SAVE",
|
||||
|
||||
"DIALOG_HEADER_CONFIRM_DELETE" : "Delete User",
|
||||
@@ -234,51 +227,14 @@
|
||||
"FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN",
|
||||
"FIELD_HEADER_USERNAME" : "Username:",
|
||||
|
||||
"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_CONNECTIONS" : "Connections",
|
||||
"SECTION_HEADER_EDIT_USER" : "Edit User",
|
||||
"SECTION_HEADER_PERMISSIONS" : "Permissions",
|
||||
"SECTION_HEADER_USERS" : "Users",
|
||||
|
||||
"TEXT_CONFIRM_DELETE" : "Users cannot be restored after they have been deleted. Are you sure you want to delete this user?"
|
||||
|
||||
},
|
||||
|
||||
"MANAGE_SESSION" : {
|
||||
|
||||
"ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
|
||||
"ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
|
||||
"ACTION_DELETE" : "Kill Sessions",
|
||||
|
||||
"DIALOG_HEADER_CONFIRM_DELETE" : "Kill Sessions",
|
||||
"DIALOG_HEADER_ERROR" : "Error",
|
||||
|
||||
"FIELD_PLACEHOLDER_FILTER" : "Filter",
|
||||
|
||||
"FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE",
|
||||
|
||||
"HELP_SESSIONS" : "All currently-active Guacamole sessions are listed here. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.",
|
||||
|
||||
"INFO_NO_SESSIONS" : "No active sessions",
|
||||
|
||||
"SECTION_HEADER_SESSIONS" : "Active Sessions",
|
||||
|
||||
"TABLE_HEADER_SESSION_USERNAME" : "Username",
|
||||
"TABLE_HEADER_SESSION_STARTDATE" : "Active since",
|
||||
"TABLE_HEADER_SESSION_REMOTEHOST" : "Remote host",
|
||||
"TABLE_HEADER_SESSION_CONNECTION_NAME" : "Connection name",
|
||||
|
||||
"TEXT_CONFIRM_DELETE" : "Are you sure you want to kill all selected sessions? The users using these sessions will be immediately disconnected."
|
||||
|
||||
},
|
||||
|
||||
"MANAGE_SETTINGS" : {
|
||||
|
||||
"SECTION_HEADER_MANAGE_SETTINGS" : "Settings"
|
||||
|
||||
},
|
||||
|
||||
"PROTOCOL_RDP" : {
|
||||
|
||||
"FIELD_HEADER_COLOR_DEPTH" : "Color depth:",
|
||||
@@ -421,6 +377,69 @@
|
||||
|
||||
},
|
||||
|
||||
"SETTINGS" : {
|
||||
|
||||
"SECTION_HEADER_SETTINGS" : "Settings"
|
||||
|
||||
},
|
||||
|
||||
"SETTINGS_CONNECTIONS" : {
|
||||
|
||||
"ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
|
||||
"ACTION_NEW_CONNECTION" : "New Connection",
|
||||
"ACTION_NEW_CONNECTION_GROUP" : "New Group",
|
||||
|
||||
"DIALOG_HEADER_ERROR" : "Error",
|
||||
|
||||
"HELP_CONNECTIONS" : "Click or tap on a connection below to manage that connection. Depending on your access level, connections can be added and deleted, and their properties (protocol, hostname, port, etc.) can be changed.",
|
||||
|
||||
"INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT",
|
||||
|
||||
"SECTION_HEADER_CONNECTIONS" : "Manage Connections"
|
||||
|
||||
},
|
||||
|
||||
"SETTINGS_USERS" : {
|
||||
|
||||
"ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
|
||||
"ACTION_NEW_USER" : "New User",
|
||||
|
||||
"DIALOG_HEADER_ERROR" : "Error",
|
||||
|
||||
"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"
|
||||
|
||||
},
|
||||
|
||||
"SETTINGS_SESSIONS" : {
|
||||
|
||||
"ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
|
||||
"ACTION_CANCEL" : "@:APP.ACTION_CANCEL",
|
||||
"ACTION_DELETE" : "Kill Sessions",
|
||||
|
||||
"DIALOG_HEADER_CONFIRM_DELETE" : "Kill Sessions",
|
||||
"DIALOG_HEADER_ERROR" : "Error",
|
||||
|
||||
"FIELD_PLACEHOLDER_FILTER" : "Filter",
|
||||
|
||||
"FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE",
|
||||
|
||||
"HELP_SESSIONS" : "All currently-active Guacamole sessions are listed here. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.",
|
||||
|
||||
"INFO_NO_SESSIONS" : "No active sessions",
|
||||
|
||||
"SECTION_HEADER_SESSIONS" : "Active Sessions",
|
||||
|
||||
"TABLE_HEADER_SESSION_USERNAME" : "Username",
|
||||
"TABLE_HEADER_SESSION_STARTDATE" : "Active since",
|
||||
"TABLE_HEADER_SESSION_REMOTEHOST" : "Remote host",
|
||||
"TABLE_HEADER_SESSION_CONNECTION_NAME" : "Connection name",
|
||||
|
||||
"TEXT_CONFIRM_DELETE" : "Are you sure you want to kill all selected sessions? The users using these sessions will be immediately disconnected."
|
||||
|
||||
},
|
||||
|
||||
"USER_MENU" : {
|
||||
|
||||
"ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
|
||||
|
Reference in New Issue
Block a user