mirror of
https://github.com/sismics/docs.git
synced 2024-11-22 14:07:55 +01:00
#111: translate templates
This commit is contained in:
parent
4822b8bf23
commit
e49d002941
@ -12,7 +12,7 @@ angular.module('docs').controller('SettingsSecurity', function($scope, User, $di
|
|||||||
* Enable TOTP.
|
* Enable TOTP.
|
||||||
*/
|
*/
|
||||||
$scope.enableTotp = function() {
|
$scope.enableTotp = function() {
|
||||||
var title = $translate.instant('settings.security.enable_totp_title');
|
var title = $translate.instant('settings.security.enable_totp');
|
||||||
var msg = $translate.instant('settings.security.enable_totp_message');
|
var msg = $translate.instant('settings.security.enable_totp_message');
|
||||||
var btns = [
|
var btns = [
|
||||||
{ result:'cancel', label: $translate.instant('cancel') },
|
{ result:'cancel', label: $translate.instant('cancel') },
|
||||||
|
@ -143,34 +143,117 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tag": {
|
"tag": {
|
||||||
|
"new_tag": "New tag",
|
||||||
|
"search": "Search",
|
||||||
|
"edit_tag": "Edit tag",
|
||||||
|
"default": {
|
||||||
|
"title": "Tags",
|
||||||
|
"message_1": "<strong>Tags</strong> are labels associated to documents.",
|
||||||
|
"message_2": "A document can be tagged by multiple tags, and a tag can be applied to multiple documents.",
|
||||||
|
"message_3": "Using the <span class=\"glyphicon glyphicon-pencil\"></span> button, you can edit permissions on a tag.",
|
||||||
|
"message_4": "If a tag can be read by another user or group, associated documents can also be read by those people.",
|
||||||
|
"message_5": "For example, tag your company documents with a tag <span class=\"label label-info\">MyCompany</span> and add the permission <strong>Read</strong> to a group <span class=\"btn btn-default\">employees</span>"
|
||||||
|
},
|
||||||
"edit": {
|
"edit": {
|
||||||
"delete_tag_title": "Delete tag",
|
"delete_tag_title": "Delete tag",
|
||||||
"delete_tag_message": "Do you really want to delete this tag?"
|
"delete_tag_message": "Do you really want to delete this tag?",
|
||||||
|
"name": "Name",
|
||||||
|
"color": "Color",
|
||||||
|
"parent": "Parent",
|
||||||
|
"info": "Permissions on this tag will also be applied to documents tagged <span class=\"label label-info\" ng-style=\"{ 'background': color }\">{{ name }}</span>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"group": {
|
"group": {
|
||||||
"rofile": {
|
"profile": {
|
||||||
"members": "Members",
|
"members": "Members",
|
||||||
"no_members": "No member",
|
"no_members": "No member",
|
||||||
"related_links": "Related links",
|
"related_links": "Related links",
|
||||||
"edit_group": "Edit {{ name }} group"
|
"edit_group": "Edit {{ name }} group"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"user": {
|
||||||
|
"profile": {
|
||||||
|
"groups": "Groups",
|
||||||
|
"quota_used": "Quota used",
|
||||||
|
"percent_used": "{{ percent | number: 0 }}% Used",
|
||||||
|
"related_links": "Related links",
|
||||||
|
"document_created": "Documents created by {{ username }}",
|
||||||
|
"edit_user": "Edit {{ username }} user"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"usergroup": {
|
||||||
|
"search_groups": "Search in groups",
|
||||||
|
"search_users": "Search in users",
|
||||||
|
"you": "It's you!",
|
||||||
|
"default": {
|
||||||
|
"title": "Users & Groups",
|
||||||
|
"message": "Here you can view informations about users and groups."
|
||||||
|
}
|
||||||
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
|
"menu_personal_settings": "Personal settings",
|
||||||
|
"menu_user_account": "User account",
|
||||||
|
"menu_two_factor_auth": "Two-factor authentication",
|
||||||
|
"menu_opened_sessions": "Opened sessions",
|
||||||
|
"menu_general_settings": "General settings",
|
||||||
|
"menu_users": "Users",
|
||||||
|
"menu_groups": "Groups",
|
||||||
|
"menu_vocabularies": "Vocabularies",
|
||||||
|
"menu_configuration": "Configuration",
|
||||||
|
"menu_server_logs": "Server logs",
|
||||||
"user": {
|
"user": {
|
||||||
|
"title": "Users <small>management</small>",
|
||||||
|
"add_user": "Add a user",
|
||||||
|
"username": "Username",
|
||||||
|
"create_date": "Create date",
|
||||||
"edit": {
|
"edit": {
|
||||||
"delete_user_title": "Delete user",
|
"delete_user_title": "Delete user",
|
||||||
"delete_user_message": "Do you really want to delete this user? All associated documents, files and tags will be deleted"
|
"delete_user_message": "Do you really want to delete this user? All associated documents, files and tags will be deleted",
|
||||||
|
"edit_user_title": "Edit <small>\"{{ username }}\"</small>",
|
||||||
|
"add_user_title": "Add <small>user</small>",
|
||||||
|
"username": "Username",
|
||||||
|
"email": "E-mail",
|
||||||
|
"groups": "Groups",
|
||||||
|
"storage_quota": "Storage quota",
|
||||||
|
"storage_quota_placeholder": "Storage quota (in MB)",
|
||||||
|
"password": "Password",
|
||||||
|
"password_confirm": "Password (confirm)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"enable_totp_title": "Enable two-factor authentication",
|
"enable_totp": "Enable two-factor authentication",
|
||||||
"enable_totp_message": "Make sure you have a TOTP-compatible application on your phone ready to add a new account"
|
"enable_totp_message": "Make sure you have a TOTP-compatible application on your phone ready to add a new account",
|
||||||
|
"title": "Two-factor <small>authentication</small>",
|
||||||
|
"message_1": "Two-factor authentication allows you to add a layer of security on your <strong>{{ appName }}</strong> account.<br/>Before activating this feature, make sure you have a TOTP-compatible app on your phone:",
|
||||||
|
"message_google_authenticator": "For Android, iOS, and Blackberry: <a href=\"https://support.google.com/accounts/answer/1066447\" target=\"_blank\">Google Authenticator</a>",
|
||||||
|
"message_duo_mobile": "For Android and iOS: <a href=\"https://guide.duo.com/third-party-accounts\" target=\"_blank\">Duo Mobile</a>",
|
||||||
|
"message_authenticator": "For Windows Phone: <a href=\"https://www.microsoft.com/en-US/store/apps/Authenticator/9WZDNCRFJ3RJ\" target=\"_blank\">Authenticator</a>",
|
||||||
|
"message_2": "Those applications automatically generate a validation code that changes after a certain period of time.<br/>You will be required to enter this validation code each time you login on <strong>{{ appName }}</strong>.",
|
||||||
|
"secret_key": "Your secret key is: <strong>{{ secret }}</strong>",
|
||||||
|
"secret_key_warning": "Configure your TOTP app on your phone with this secret key now, you will not be able to access it later.",
|
||||||
|
"totp_enabled_message": "Two-factor authentication is enabled on your account.<br/>Each time you login on <strong>{{ appName }}</strong>, you will be asked a validation code from your configured phone app.<br/>If you loose your phone, you will not be able to login into your account but active sessions will allow you to regenerate a secrey key.",
|
||||||
|
"disable_totp": {
|
||||||
|
"disable_totp": "Disable two-factor authentication",
|
||||||
|
"message": "Your account will not be protected by the two-factor authentication anymore.",
|
||||||
|
"confirm_password": "Confirm your password",
|
||||||
|
"submit": "Disable two-factor authentication"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"group": {
|
"group": {
|
||||||
|
"title": "Groups <small>management</small>",
|
||||||
|
"add_group": "Add a group",
|
||||||
|
"name": "Name",
|
||||||
"edit": {
|
"edit": {
|
||||||
"delete_group_title": "Delete group",
|
"delete_group_title": "Delete group",
|
||||||
"delete_group_message": "Do you really want to delete this group?"
|
"delete_group_message": "Do you really want to delete this group?",
|
||||||
|
"edit_group_title": "Edit <small>\"{{ name }}\"</small>",
|
||||||
|
"add_group_title": "Add <small>group</small>",
|
||||||
|
"name": "Name",
|
||||||
|
"parent_group": "Parent group",
|
||||||
|
"search_group": "Search a group",
|
||||||
|
"members": "Members",
|
||||||
|
"new_member": "New member",
|
||||||
|
"search_user": "Search a user"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"account": {
|
"account": {
|
||||||
@ -191,6 +274,31 @@
|
|||||||
"logo": "Logo (squared size)",
|
"logo": "Logo (squared size)",
|
||||||
"background_image": "Background image",
|
"background_image": "Background image",
|
||||||
"uploading_image": "Uploading the image..."
|
"uploading_image": "Uploading the image..."
|
||||||
|
},
|
||||||
|
"log": {
|
||||||
|
"title": "Server <small>logs</small>",
|
||||||
|
"date": "Date",
|
||||||
|
"tag": "Tag",
|
||||||
|
"message": "Message"
|
||||||
|
},
|
||||||
|
"session": {
|
||||||
|
"title": "Opened <small>sessions</small>",
|
||||||
|
"created_date": "Created date",
|
||||||
|
"last_connection_date": "Last connection date",
|
||||||
|
"user_agent": "From",
|
||||||
|
"current": "Current",
|
||||||
|
"current_session": "This is the current session",
|
||||||
|
"clear_message": "All other devices connected to this account will be disconnected",
|
||||||
|
"clear": "Clear all other sessions"
|
||||||
|
},
|
||||||
|
"vocabulary": {
|
||||||
|
"title": "Vocabulary <small>entries</small>",
|
||||||
|
"choose_vocabulary": "Choose a vocabulary to edit",
|
||||||
|
"type": "Type",
|
||||||
|
"coverage": "Coverage",
|
||||||
|
"rights": "Rights",
|
||||||
|
"value": "Value",
|
||||||
|
"order": "Order"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"directive": {
|
"directive": {
|
||||||
@ -230,7 +338,10 @@
|
|||||||
"required": "Required",
|
"required": "Required",
|
||||||
"too_short": "Too short",
|
"too_short": "Too short",
|
||||||
"too_long": "Too long",
|
"too_long": "Too long",
|
||||||
"password_confirm": "Password and password confirmation must match"
|
"email": "Must be a valid e-mail",
|
||||||
|
"password_confirm": "Password and password confirmation must match",
|
||||||
|
"number": "Number required",
|
||||||
|
"no_space": "Space are not allowed"
|
||||||
},
|
},
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<td><acl data="acl[0]"></acl></td>
|
<td><acl data="acl[0]"></acl></td>
|
||||||
<td>
|
<td>
|
||||||
<span class="label label-default" style="margin-right: 6px;" ng-repeat="a in acl | orderBy: 'perm'">
|
<span class="label label-default" style="margin-right: 6px;" ng-repeat="a in acl | orderBy: 'perm'">
|
||||||
{{ a.perm }}
|
{{ 'acl.' + a.perm | translate }}
|
||||||
<span ng-show="(creator != a.name && a.type == 'USER' || a.type != 'USER') && writable"
|
<span ng-show="(creator != a.name && a.type == 'USER' || a.type != 'USER') && writable"
|
||||||
class="glyphicon glyphicon-remove pointer"
|
class="glyphicon glyphicon-remove pointer"
|
||||||
ng-click="deleteAcl(a)"></span>
|
ng-click="deleteAcl(a)"></span>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<a ng-href="#/document/view/{{ log.message }}">{{ 'see' | translate }}</a>
|
<a ng-href="#/document/view/{{ log.message }}">{{ 'see' | translate }}</a>
|
||||||
</span>
|
</span>
|
||||||
<span ng-switch-when="Acl">
|
<span ng-switch-when="Acl">
|
||||||
{{ log.message }}
|
{{ 'acl.' + log.message | translate }}
|
||||||
</span>
|
</span>
|
||||||
<span ng-switch-when="Tag">
|
<span ng-switch-when="Tag">
|
||||||
<a href="#/tag">{{ log.message }}</a>
|
<a href="#/tag">{{ log.message }}</a>
|
||||||
|
@ -1,33 +1,29 @@
|
|||||||
<img src="img/loader.gif" ng-show="!group && isEdit()" />
|
<img src="img/loader.gif" ng-show="!group && isEdit()" />
|
||||||
|
|
||||||
<div ng-show="group || !isEdit()">
|
<div ng-show="group || !isEdit()">
|
||||||
<h2 ng-show="isEdit()">Edit
|
<h2 ng-show="isEdit()" translate="settings.group.edit.edit_group_title" translate-values="{ name: group.name }"></h2>
|
||||||
<small>"{{ group.name }}"</small>
|
<h2 ng-show="!isEdit()" translate="settings.group.edit.add_group_title"></h2>
|
||||||
</h2>
|
|
||||||
<h2 ng-show="!isEdit()">Add
|
|
||||||
<small>group</small>
|
|
||||||
</h2>
|
|
||||||
<form class="form-horizontal" name="editGroupForm" novalidate>
|
<form class="form-horizontal" name="editGroupForm" novalidate>
|
||||||
<div class="form-group" ng-class="{ 'has-error': !editGroupForm.name.$valid, success: editGroupForm.name.$valid }">
|
<div class="form-group" ng-class="{ 'has-error': !editGroupForm.name.$valid, success: editGroupForm.name.$valid }">
|
||||||
<label class="col-sm-2 control-label" for="inputName">Name</label>
|
<label class="col-sm-2 control-label" for="inputName">{{ 'settings.group.edit.name' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<input name="name" type="text" id="inputName" required class="form-control"
|
<input name="name" type="text" id="inputName" required class="form-control"
|
||||||
ng-minlength="3" ng-maxlength="50" placeholder="Name" ng-model="group.name"/>
|
ng-minlength="3" ng-maxlength="50" placeholder="{{ 'settings.group.edit.name' | translate }}" ng-model="group.name"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<span class="help-block" ng-show="editGroupForm.name.$error.required">Required</span>
|
<span class="help-block" ng-show="editGroupForm.name.$error.required">{{ 'validation.required' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editGroupForm.name.$error.minlength">Too short</span>
|
<span class="help-block" ng-show="editGroupForm.name.$error.minlength">{{ 'validation.too_short' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editGroupForm.name.$error.maxlength">Too long</span>
|
<span class="help-block" ng-show="editGroupForm.name.$error.maxlength">{{ 'validation.too_long' | translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-2 control-label" for="inputName">Parent group</label>
|
<label class="col-sm-2 control-label" for="inputName">{{ 'settings.group.edit.parent_group' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<input name="name" type="text" id="inputParent" class="form-control" autocomplete="off"
|
<input name="name" type="text" id="inputParent" class="form-control" autocomplete="off"
|
||||||
placeholder="Search a group" ng-model="group.parent"
|
placeholder="{{ 'settings.group.edit.search_group' | translate }}" ng-model="group.parent"
|
||||||
typeahead="group for group in getGroupTypeahead($viewValue)"
|
typeahead="group for group in getGroupTypeahead($viewValue)"
|
||||||
typeahead-wait-ms="200" typeahead-editable="false" />
|
typeahead-wait-ms="200" typeahead-editable="false" />
|
||||||
</div>
|
</div>
|
||||||
@ -35,29 +31,30 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
<button type="submit" class="btn btn-primary" ng-click="edit()" ng-disabled="!editGroupForm.$valid">
|
<button type="submit" class="btn btn-primary" ng-click="edit()" ng-disabled="!editGroupForm.$valid">
|
||||||
<span class="glyphicon glyphicon-pencil"></span> {{ isEdit() ? 'Edit' : 'Add' }}
|
<span class="glyphicon glyphicon-pencil"></span> {{ isEdit() ? 'edit' : 'add' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="btn btn-danger" ng-click="remove()" ng-show="isEdit()">
|
<button type="button" class="btn btn-danger" ng-click="remove()" ng-show="isEdit()">
|
||||||
<span class="glyphicon glyphicon-trash"></span> Delete
|
<span class="glyphicon glyphicon-trash"></span> {{ 'delete' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div ng-show="isEdit()">
|
<div ng-show="isEdit()">
|
||||||
<h3>Members</h3>
|
<h3>{{ 'settings.group.edit.members' | translate }}</h3>
|
||||||
<form class="form-horizontal" novalidate>
|
<form class="form-horizontal" novalidate>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-2 control-label" for="inputMember">New member</label>
|
<label class="col-sm-2 control-label" for="inputMember">{{ 'settings.group.edit.new_member' | translate }}</label>
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<input name="member" type="text" id="inputMember" class="form-control" ng-model="member" placeholder="Search a user"
|
<input name="member" type="text" id="inputMember" class="form-control" ng-model="member"
|
||||||
|
placeholder="{{ 'settings.group.edit.search_user' | translate }}"
|
||||||
typeahead="user for user in getUserTypeahead($viewValue)" typeahead-on-select="addMember($item)"
|
typeahead="user for user in getUserTypeahead($viewValue)" typeahead-on-select="addMember($item)"
|
||||||
typeahead-wait-ms="200" typeahead-editable="false" autocomplete="off" />
|
typeahead-wait-ms="200" typeahead-editable="false" autocomplete="off" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-2 control-label">Members</label>
|
<label class="col-sm-2 control-label">{{ 'settings.group.edit.members' | translate }}</label>
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<span ng-repeat="member in group.members">
|
<span ng-repeat="member in group.members">
|
||||||
<span class="btn btn-default"
|
<span class="btn btn-default"
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
<h1>Groups <small>management</small> <a class="btn btn-primary" href="#/settings/group/add">Add a group</a></h1>
|
<h1>
|
||||||
|
<span translate="settings.group.title"></span>
|
||||||
|
<a class="btn btn-primary" href="#/settings/group/add">{{ 'settings.group.add_group' | translate }}</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 well">
|
<div class="col-md-4 well">
|
||||||
<table class="table table-striped table-hover table-users">
|
<table class="table table-striped table-hover table-users">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Name</th>
|
<th>{{ 'settings.group.name' | translate }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading"><strong>Personal settings</strong></div>
|
<div class="panel-heading"><strong>{{ 'settings.menu_personal_settings' | translate }}</strong></div>
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/account" href="#/settings/account">User account</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/account" href="#/settings/account">{{ 'settings.menu_user_account' | translate }}</a>
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/security" href="#/settings/security">Two-factor authentication</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/security" href="#/settings/security">{{ 'settings.menu_two_factor_auth' | translate }}</a>
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/session" href="#/settings/session">Opened sessions</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/session" href="#/settings/session">{{ 'settings.menu_opened_sessions' | translate }}</a>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel panel-default" ng-show="isAdmin">
|
<div class="panel panel-default" ng-show="isAdmin">
|
||||||
<div class="panel-heading"><strong>General settings</strong></div>
|
<div class="panel-heading"><strong>{{ 'settings.menu_general_settings' | translate }}</strong></div>
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/user.*" href="#/settings/user">Users</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/user.*" href="#/settings/user">{{ 'settings.menu_users' | translate }}</a>
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/group.*" href="#/settings/group">Groups</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/group.*" href="#/settings/group">{{ 'settings.menu_groups' | translate }}</a>
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/vocabulary.*" href="#/settings/vocabulary">Vocabularies</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/vocabulary.*" href="#/settings/vocabulary">{{ 'settings.menu_vocabularies' | translate }}</a>
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/config" href="#/settings/config">Configuration</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/config" href="#/settings/config">{{ 'settings.menu_configuration' | translate }}</a>
|
||||||
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/log" href="#/settings/log">Server logs</a>
|
<a class="list-group-item" ng-class="{active: $uiRoute}" ui-route="/settings/log" href="#/settings/log">{{ 'settings.menu_server_logs' | translate }}</a>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<h1>Server <small>logs</small></h1>
|
<h1 translate="settings.log.title"></h1>
|
||||||
<table class="table table-striped table-hover table-logs">
|
<table class="table table-striped table-hover table-logs">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Date</th>
|
<th>{{ 'settings.log.date' | translate }}</th>
|
||||||
<th>Tag</th>
|
<th>{{ 'settings.log.tag' | translate }}</th>
|
||||||
<th>Message</th>
|
<th>{{ 'settings.log.message' | translate }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h3>Disable two-factor authentication</h3>
|
<h3>{{ 'settings.security.disable_totp' | translate }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p class="text-danger">
|
<p class="text-danger">
|
||||||
Your account will not be protected by the two-factor authentication anymore.
|
{{ 'settings.security.disable_totp.message' | translate }}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<label for="password">Confirm your password</label>
|
<label for="password">{{ 'settings.security.disable_totp.confirm_password' | translate }}</label>
|
||||||
<input class="form-control" type="password" id="password" ng-model="password" />
|
<input class="form-control" type="password" id="password" ng-model="password" />
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button ng-click="close(password)" class="btn btn-warning">
|
<button ng-click="close(password)" class="btn btn-warning">
|
||||||
Disable two-factor authentication
|
{{ 'settings.security.disable_totp.submit' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<button ng-click="close(null)" class="btn btn-default">Cancel</button>
|
<button ng-click="close(null)" class="btn btn-default">{{ 'cancel' | translate }}</button>
|
||||||
</div>
|
</div>
|
@ -1,43 +1,33 @@
|
|||||||
<h1>
|
<h1>
|
||||||
Two-factor <small>authentication</small>
|
<span translate="settings.security.title"></span>
|
||||||
<span class="label" ng-class="{ 'label-success': user.totp_enabled, 'label-danger': !user.totp_enabled }">
|
<span class="label" ng-class="{ 'label-success': user.totp_enabled, 'label-danger': !user.totp_enabled }">
|
||||||
{{ user.totp_enabled ? 'Enabled' : 'Disabled' }}
|
{{ user.totp_enabled ? 'Enabled' : 'Disabled' }}
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<div ng-if="!user.totp_enabled">
|
<div ng-if="!user.totp_enabled">
|
||||||
<p>
|
<p translate="settings.security.message_1" translate-values="{ appName: appName }"></p>
|
||||||
Two-factor authentication allows you to add a layer of security on your <strong>{{ appName }}</strong> account.<br/>
|
|
||||||
Before activating this feature, make sure you have a TOTP-compatible app on your phone:
|
|
||||||
</p>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>For Android, iOS, and Blackberry: <a href="https://support.google.com/accounts/answer/1066447" target="_blank">Google Authenticator</a></li>
|
<li translate="settings.security.message_google_authenticator"></li>
|
||||||
<li>For Android and iOS: <a href="https://guide.duo.com/third-party-accounts" target="_blank">Duo Mobile</a></li>
|
<li translate="settings.security.message_duo_mobile"></li>
|
||||||
<li>For Windows Phone: <a href="https://www.microsoft.com/en-US/store/apps/Authenticator/9WZDNCRFJ3RJ" target="_blank">Authenticator</a></li>
|
<li translate="settings.security.message_authenticator"></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<p translate="settings.security.message_2" translate-values="{ appName: appName }"></p>
|
||||||
<p>
|
<p>
|
||||||
Those applications automatically generate a validation code that changes after a certain period of time.<br/>
|
<button class="btn btn-primary" ng-click="enableTotp()">{{ 'settings.security.enable_totp' | translate }}</button>
|
||||||
You will be required to enter this validation code each time you login on <strong>{{ appName }}</strong>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<button class="btn btn-primary" ng-click="enableTotp()">Enable two-factor authentication</button>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-if="user.totp_enabled">
|
<div ng-if="user.totp_enabled">
|
||||||
<div ng-if="secret">
|
<div ng-if="secret">
|
||||||
<p>Your secret key is: <strong>{{ secret }}</strong></p>
|
<p translate="settings.security.secret_key" translate-values="{ secret: secret }"></p>
|
||||||
<qrcode data="otpauth://totp/Sismics%20Docs?secret={{ secret }}" size="200"></qrcode>
|
<qrcode data="otpauth://totp/Sismics%20Docs?secret={{ secret }}" size="200"></qrcode>
|
||||||
<p class="text-danger">
|
<p class="text-danger">
|
||||||
<strong>Configure your TOTP app on your phone with this secret key now, you will not be able to access it later.</strong>
|
<strong>{{ 'settings.security.secret_key_warning' | translate }}</strong>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
<p translate="settings.security.totp_enabled_message" translate-values="{ appName: appName }"></p>
|
||||||
<p>
|
<p>
|
||||||
Two-factor authentication is enabled on your account.<br/>
|
<button class="btn btn-warning" ng-click="disableTotp()">{{ 'settings.security.disable_totp' | translate }}</button>
|
||||||
Each time you login on <strong>{{ appName }}</strong>, you will be asked a validation code from your configured phone app.<br/>
|
|
||||||
If you loose your phone, you will not be able to login into your account but active sessions will allow you to regenerate a secrey key.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<button class="btn btn-warning" ng-click="disableTotp()">Disable two-factor authentication</button>
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
@ -1,11 +1,11 @@
|
|||||||
<h1>Opened <small>sessions</small></h1>
|
<h1 translate="settings.session.title"></h1>
|
||||||
<table class="table table-striped table-hover">
|
<table class="table table-striped table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Created date</th>
|
<th>{{ 'settings.session.created_date' | translate }}</th>
|
||||||
<th>Last connection date</th>
|
<th>{{ 'settings.session.last_connection_date' | translate }}</th>
|
||||||
<th>From</th>
|
<th>{{ 'settings.session.user_agent' | translate }}</th>
|
||||||
<th>Current</th>
|
<th>{{ 'settings.session.current' | translate }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@ -14,11 +14,14 @@
|
|||||||
<td>{{ session.last_connection_date | date: 'yyyy-MM-dd HH:mm' }}</td>
|
<td>{{ session.last_connection_date | date: 'yyyy-MM-dd HH:mm' }}</td>
|
||||||
<td title="{{ session.user_agent }}">{{ session.ip }}</td>
|
<td title="{{ session.user_agent }}">{{ session.ip }}</td>
|
||||||
<td>
|
<td>
|
||||||
<span ng-show="session.current" class="glyphicon glyphicon-ok" title="This is the current session"></span>
|
<span ng-show="session.current" class="glyphicon glyphicon-ok"
|
||||||
|
title="{{ 'settings.session.current_session' | translate }}"></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
<button type="submit" class="btn btn-warning" title="All other devices connected to this account will be disconnected" ng-click="deleteSession()">Clear all other sessions</button>
|
<button type="submit" class="btn btn-warning"
|
||||||
|
title="{{ 'settings.session.clear_message' | translate }}"
|
||||||
|
ng-click="deleteSession()">{{ 'settings.session.clear' | translate }}</button>
|
||||||
</div>
|
</div>
|
@ -1,45 +1,41 @@
|
|||||||
<img src="img/loader.gif" ng-show="!user && isEdit()" />
|
<img src="img/loader.gif" ng-show="!user && isEdit()" />
|
||||||
|
|
||||||
<div ng-show="user || !isEdit()">
|
<div ng-show="user || !isEdit()">
|
||||||
<h2 ng-show="isEdit()">Edit
|
<h2 ng-show="isEdit()" translate="settings.user.edit.edit_user_title" translate-values="{ username: user.username }"></h2>
|
||||||
<small>"{{ user.username }}"</small>
|
<h2 ng-show="!isEdit()" translate="settings.user.edit.add_user_title"></h2>
|
||||||
</h2>
|
|
||||||
<h2 ng-show="!isEdit()">Add
|
|
||||||
<small>user</small>
|
|
||||||
</h2>
|
|
||||||
<form class="form-horizontal" name="editUserForm" novalidate>
|
<form class="form-horizontal" name="editUserForm" novalidate>
|
||||||
<div class="form-group" ng-class="{ 'has-error': !editUserForm.username.$valid, success: editUserForm.username.$valid }">
|
<div class="form-group" ng-class="{ 'has-error': !editUserForm.username.$valid, success: editUserForm.username.$valid }">
|
||||||
<label class="col-sm-2 control-label" for="inputUsername">Username</label>
|
<label class="col-sm-2 control-label" for="inputUsername">{{ 'settings.user.edit.username' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<input name="username" type="text" id="inputUsername" required ng-disabled="isEdit()" class="form-control"
|
<input name="username" type="text" id="inputUsername" required ng-disabled="isEdit()" class="form-control"
|
||||||
ng-minlength="3" ng-maxlength="50" placeholder="Username" ng-model="user.username"/>
|
ng-minlength="3" ng-maxlength="50" placeholder="{{ 'settings.user.edit.username' | translate }}" ng-model="user.username"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<span class="help-block" ng-show="editUserForm.username.$error.required">Required</span>
|
<span class="help-block" ng-show="editUserForm.username.$error.required">{{ 'validation.required' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editUserForm.username.$error.minlength">Too short</span>
|
<span class="help-block" ng-show="editUserForm.username.$error.minlength">{{ 'validation.too_short' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editUserForm.username.$error.maxlength">Too long</span>
|
<span class="help-block" ng-show="editUserForm.username.$error.maxlength">{{ 'validation.too_long' | translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group" ng-class="{ 'has-error': !editUserForm.email.$valid, success: editUserForm.email.$valid }">
|
<div class="form-group" ng-class="{ 'has-error': !editUserForm.email.$valid, success: editUserForm.email.$valid }">
|
||||||
<label class="col-sm-2 control-label" for="inputEmail">E-mail</label>
|
<label class="col-sm-2 control-label" for="inputEmail">{{ 'settings.user.edit.email' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<input name="email" type="email" id="inputEmail" required class="form-control"
|
<input name="email" type="email" id="inputEmail" required class="form-control"
|
||||||
ng-minlength="1" ng-maxlength="100" placeholder="E-mail" ng-model="user.email"/>
|
ng-minlength="1" ng-maxlength="100" placeholder="{{ 'settings.user.edit.username' | translate }}" ng-model="user.email"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<span class="help-block" ng-show="editUserForm.email.$error.required">Required</span>
|
<span class="help-block" ng-show="editUserForm.email.$error.required">{{ 'validation.required' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editUserForm.email.$error.email">Must be a valid e-mail</span>
|
<span class="help-block" ng-show="editUserForm.email.$error.email">{{ 'validation.email' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editUserForm.email.$error.minlength">Too short</span>
|
<span class="help-block" ng-show="editUserForm.email.$error.minlength">{{ 'validation.too_short' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editUserForm.email.$error.maxlength">Too long</span>
|
<span class="help-block" ng-show="editUserForm.email.$error.maxlength">{{ 'validation.too_long' | translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" ng-if="user.groups.length > 0">
|
|
||||||
<label class="col-sm-2 control-label">Groups</label>
|
|
||||||
|
|
||||||
|
<div class="form-group" ng-if="user.groups.length > 0">
|
||||||
|
<label class="col-sm-2 control-label">{{ 'settings.user.edit.groups' | translate }}</label>
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<span ng-repeat="group in user.groups">
|
<span ng-repeat="group in user.groups">
|
||||||
<a class="btn btn-default"
|
<a class="btn btn-default"
|
||||||
@ -47,55 +43,56 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" ng-class="{ 'has-error': !editUserForm.storage_quota.$valid, success: editUserForm.storage_quota.$valid }">
|
|
||||||
<label class="col-sm-2 control-label" for="inputQuota">Storage quota</label>
|
|
||||||
|
|
||||||
|
<div class="form-group" ng-class="{ 'has-error': !editUserForm.storage_quota.$valid, success: editUserForm.storage_quota.$valid }">
|
||||||
|
<label class="col-sm-2 control-label" for="inputQuota">{{ 'settings.user.edit.storage_quota' | translate }}</label>
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input name="storage_quota" type="number" id="inputQuota" required class="form-control"
|
<input name="storage_quota" type="number" id="inputQuota" required class="form-control"
|
||||||
ng-pattern="/[0-9]*/" placeholder="Storage quota (in MB)" ng-model="user.storage_quota"/>
|
ng-pattern="/[0-9]*/" placeholder="{{ 'settings.user.edit.storage_quota_placeholder' | translate }}" ng-model="user.storage_quota"/>
|
||||||
<div class="input-group-addon">MB</div>
|
<div class="input-group-addon">{{ 'filter.filesize.mb' | translate }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<span class="help-block" ng-show="editUserForm.storage_quota.$error.pattern">Number required</span>
|
<span class="help-block" ng-show="editUserForm.storage_quota.$error.pattern">{{ 'validation.number' | translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group" ng-if="user.username != 'guest'" ng-class="{ 'has-error': !editUserForm.password.$valid, success: editUserForm.password.$valid }">
|
<div class="form-group" ng-if="user.username != 'guest'" ng-class="{ 'has-error': !editUserForm.password.$valid, success: editUserForm.password.$valid }">
|
||||||
<label class="col-sm-2 control-label" for="inputPassword">Password</label>
|
<label class="col-sm-2 control-label" for="inputPassword">{{ 'settings.user.edit.password' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<input name="password" type="password" id="inputPassword" ng-required="!isEdit()" class="form-control"
|
<input name="password" type="password" id="inputPassword" ng-required="!isEdit()" class="form-control"
|
||||||
ng-minlength="8" ng-maxlength="50" placeholder="Password" ng-model="user.password"/>
|
ng-minlength="8" ng-maxlength="50" placeholder="{{ 'settings.user.edit.password' | translate }}" ng-model="user.password"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<span class="help-block" ng-show="editUserForm.password.$error.required">Required</span>
|
<span class="help-block" ng-show="editUserForm.password.$error.required">{{ 'validation.required' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editUserForm.password.$error.minlength">Too short</span>
|
<span class="help-block" ng-show="editUserForm.password.$error.minlength">{{ 'validation.too_short' | translate }}</span>
|
||||||
<span class="help-block" ng-show="editUserForm.password.$error.maxlength">Too long</span>
|
<span class="help-block" ng-show="editUserForm.password.$error.maxlength">{{ 'validation.too_long' | translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group" ng-if="user.username != 'guest'" ng-class="{ 'has-error': !editUserForm.passwordconfirm.$valid, success: editUserForm.passwordconfirm.$valid }">
|
<div class="form-group" ng-if="user.username != 'guest'" ng-class="{ 'has-error': !editUserForm.passwordconfirm.$valid, success: editUserForm.passwordconfirm.$valid }">
|
||||||
<label class="col-sm-2 -label" for="inputPasswordConfirm">Password (confirm)</label>
|
<label class="col-sm-2 -label" for="inputPasswordConfirm">{{ 'settings.user.edit.password_confirm' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<input name="passwordconfirm" type="password" id="inputPasswordConfirm" ng-required="!isEdit()" class="form-control"
|
<input name="passwordconfirm" type="password" id="inputPasswordConfirm" ng-required="!isEdit()" class="form-control"
|
||||||
ui-validate="'$value == user.password'" ui-validate-watch="'user.password'"
|
ui-validate="'$value == user.password'" ui-validate-watch="'user.password'"
|
||||||
placeholder="Password (confirm)" ng-model="user.passwordconfirm"/>
|
placeholder="{{ 'settings.user.edit.password_confirm' | translate }}" ng-model="user.passwordconfirm"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<span class="help-block" ng-show="editUserForm.passwordconfirm.$error.validator">Password and password confirmation must match</span>
|
<span class="help-block" ng-show="editUserForm.passwordconfirm.$error.validator">{{ 'validation.password_confirm' | translate }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
<button type="submit" class="btn btn-primary" ng-click="edit()" ng-disabled="!editUserForm.$valid">
|
<button type="submit" class="btn btn-primary" ng-click="edit()" ng-disabled="!editUserForm.$valid">
|
||||||
<span class="glyphicon glyphicon-pencil"></span> {{ isEdit() ? 'Edit' : 'Add' }}
|
<span class="glyphicon glyphicon-pencil"></span> {{ isEdit() ? 'edit' : 'add' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="btn btn-danger" ng-click="remove()" ng-show="isEdit() && user.username != 'guest'">
|
<button type="button" class="btn btn-danger" ng-click="remove()" ng-show="isEdit() && user.username != 'guest'">
|
||||||
<span class="glyphicon glyphicon-trash"></span> Delete
|
<span class="glyphicon glyphicon-trash"></span> {{ 'delete' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
<h1>Users <small>management</small> <a class="btn btn-primary" href="#/settings/user/add">Add a user</a></h1>
|
<h1>
|
||||||
|
<span translate="settings.user.title"></span>
|
||||||
|
<a class="btn btn-primary" href="#/settings/user/add">{{ 'settings.user.add_user' | translate }}</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 well">
|
<div class="col-md-4 well">
|
||||||
<table class="table table-striped table-hover table-users">
|
<table class="table table-striped table-hover table-users">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Username</th>
|
<th>{{ 'settings.user.username' | translate }}</th>
|
||||||
<th>Create date</th>
|
<th>{{ 'settings.user.create_date' | translate }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
<h1>Vocabulary <small>entries</small></h1>
|
<h1 translate="settings.vocabulary.title"></h1>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form class="form-inline">
|
<form class="form-inline">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="inputVocabulary">Choose a vocabulary to edit</label>
|
<label for="inputVocabulary">{{ 'settings.vocabulary.choose_vocabulary' | translate }}</label>
|
||||||
<select class="form-control" id="inputVocabulary" ng-model="vocabulary" ng-init="vocabulary = 'type'">
|
<select class="form-control" id="inputVocabulary" ng-model="vocabulary" ng-init="vocabulary = 'type'">
|
||||||
<option value="type">Type</option>
|
<option value="type">{{ 'settings.vocabulary.type' | translate }}</option>
|
||||||
<option value="coverage">Coverage</option>
|
<option value="coverage">{{ 'settings.vocabulary.coverage' | translate }}</option>
|
||||||
<option value="rights">Rights</option>
|
<option value="rights">{{ 'settings.vocabulary.rights' | translate }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@ -15,8 +15,8 @@
|
|||||||
<table class="table table-striped" ng-show="entries">
|
<table class="table table-striped" ng-show="entries">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th width="70%">Value</th>
|
<th width="70%">{{ 'settings.vocabulary.value' | translate }}</th>
|
||||||
<th width="20%">Order</th>
|
<th width="20%">{{ 'settings.vocabulary.order' | translate }}</th>
|
||||||
<th width="10%"></th>
|
<th width="10%"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<h1>Tags</h1>
|
<h1>{{ 'tag.default.title' | translate }}</h1>
|
||||||
<p><strong>Tags</strong> are labels associated to documents.</p>
|
<p translate="tag.default.message_1"></p>
|
||||||
<p>A document can be tagged by multiple tags, and a tag can be applied to multiple documents.</p>
|
<p translate="tag.default.message_2"></p>
|
||||||
<p>Using the <span class="glyphicon glyphicon-pencil"></span> button, you can edit permissions on a tag.</p>
|
<p translate="tag.default.message_3"></p>
|
||||||
<p>If a tag can be read by another user or group, associated documents can also be read by those people.</p>
|
<p translate="tag.default.message_4"></p>
|
||||||
<p>For example, tag your company documents with a tag <span class="label label-info">MyCompany</span> and add the permission <strong>Read</strong> to a group <span class="btn btn-default">employees</span></p>
|
<p translate="tag.default.message_5"></p>
|
@ -1,5 +1,5 @@
|
|||||||
<div class="pull-right" ng-show="tag.writable">
|
<div class="pull-right" ng-show="tag.writable">
|
||||||
<button class="btn btn-danger" ng-click="deleteTag(tag)"><span class="glyphicon glyphicon-trash"></span> Delete</button>
|
<button class="btn btn-danger" ng-click="deleteTag(tag)"><span class="glyphicon glyphicon-trash"></span> {{ 'delete' | translate }}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
@ -9,7 +9,7 @@
|
|||||||
<div class="well col-lg-8" ng-show="tag.writable">
|
<div class="well col-lg-8" ng-show="tag.writable">
|
||||||
<form class="form-horizontal" name="editTagForm" novalidate>
|
<form class="form-horizontal" name="editTagForm" novalidate>
|
||||||
<div class="form-group" ng-class="{ 'has-error': !editTagForm.name.$valid, success: editTagForm.name.$valid }">
|
<div class="form-group" ng-class="{ 'has-error': !editTagForm.name.$valid, success: editTagForm.name.$valid }">
|
||||||
<label class="col-sm-2 control-label" for="inputName">Name</label>
|
<label class="col-sm-2 control-label" for="inputName">{{ 'tag.edit.name' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<input type="text" name="name" class="form-control" id="inputName"
|
<input type="text" name="name" class="form-control" id="inputName"
|
||||||
@ -18,7 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-2 control-label" for="inputColor">Color</label>
|
<label class="col-sm-2 control-label" for="inputColor">{{ 'tag.edit.color' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
<span colorpicker class="btn" data-color="" id="inputColor"
|
<span colorpicker class="btn" data-color="" id="inputColor"
|
||||||
@ -27,7 +27,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-2 control-label" for="inputParent">Parent</label>
|
<label class="col-sm-2 control-label" for="inputParent">{{ 'tag.edit.parent' | translate }}</label>
|
||||||
|
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<select class="form-control" ng-model="tag.parent" id="inputParent">
|
<select class="form-control" ng-model="tag.parent" id="inputParent">
|
||||||
@ -43,7 +43,7 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
<button type="submit" class="btn btn-primary" ng-click="edit()" ng-disabled="!editTagForm.$valid">
|
<button type="submit" class="btn btn-primary" ng-click="edit()" ng-disabled="!editTagForm.$valid">
|
||||||
<span class="glyphicon glyphicon-pencil"></span> Save
|
<span class="glyphicon glyphicon-pencil"></span> {{ 'save' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -51,7 +51,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="well col-lg-8">
|
<div class="well col-lg-8">
|
||||||
<p>Permissions on this tag will also be applied to documents tagged <span class="label label-info" ng-style="{ 'background': tag.color }">{{ tag.name }}</span></p>
|
<p translate="tag.edit.info" translate-values="{ name: tag.name, color: tag.color }"></p>
|
||||||
|
|
||||||
<acl-edit source="tag.id"
|
<acl-edit source="tag.id"
|
||||||
acls="tag.acls"
|
acls="tag.acls"
|
||||||
|
@ -4,16 +4,16 @@
|
|||||||
<form name="tagForm" novalidate>
|
<form name="tagForm" novalidate>
|
||||||
<p class="input-group" ng-class="{ 'has-error': !tagForm.name.$valid }">
|
<p class="input-group" ng-class="{ 'has-error': !tagForm.name.$valid }">
|
||||||
<span colorpicker class="input-group-addon btn btn-default" data-color="#3a87ad" ng-model="tag.color" ng-style="{ 'background': tag.color }"> </span>
|
<span colorpicker class="input-group-addon btn btn-default" data-color="#3a87ad" ng-model="tag.color" ng-style="{ 'background': tag.color }"> </span>
|
||||||
<input type="text" name="name" placeholder="New tag" class="form-control"
|
<input type="text" name="name" placeholder="{{ 'tag.new_tag' | translate }}" class="form-control"
|
||||||
ng-maxlength="36" required ng-model="tag.name" ui-validate="{ space: '!$value || $value.indexOf(\' \') == -1' }">
|
ng-maxlength="36" required ng-model="tag.name" ui-validate="{ space: '!$value || $value.indexOf(\' \') == -1' }">
|
||||||
<span class="input-group-addon btn btn-primary" ng-disabled="!tagForm.$valid" ng-click="addTag()">Add</span>
|
<span class="input-group-addon btn btn-primary" ng-disabled="!tagForm.$valid" ng-click="addTag()">{{ 'add' | translate }}</span>
|
||||||
</p>
|
</p>
|
||||||
<span class="help-block" ng-show="tagForm.name.$error.space">Space are not allowed</span>
|
<span class="help-block" ng-show="tagForm.name.$error.space">{{ 'validation.no_space' | translate }}</span>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<p class="input-group">
|
<p class="input-group">
|
||||||
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
|
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
|
||||||
<input type="search" class="form-control" placeholder="Search" ng-model="search.name">
|
<input type="search" class="form-control" placeholder="{{ 'tag.search' | translate }}" ng-model="search.name">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<table class="row table table-striped table-hover table-tags">
|
<table class="row table table-striped table-hover table-tags">
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<span class="label label-info" ng-style="{ 'background': tag.color }">{{ tag.name }}</span>
|
<span class="label label-info" ng-style="{ 'background': tag.color }">{{ tag.name }}</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="col-xs-1">
|
<td class="col-xs-1">
|
||||||
<a href="#/tag/{{ tag.id }}" class="btn btn-primary pull-right" title="Edit tag">
|
<a href="#/tag/{{ tag.id }}" class="btn btn-primary pull-right" title="{{ 'tag.edit_tag' | translate }}">
|
||||||
<span class="glyphicon glyphicon-pencil"></span>
|
<span class="glyphicon glyphicon-pencil"></span>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
@ -2,34 +2,34 @@
|
|||||||
<h1>{{ user.username }} <small>{{ user.email }}</small></h1>
|
<h1>{{ user.username }} <small>{{ user.email }}</small></h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4 ng-if="user.groups.length > 0">Groups</h4>
|
<h4 ng-if="user.groups.length > 0">{{ 'user.profile.groups' | translate }}</h4>
|
||||||
<ul ng-if="user.groups.length > 0">
|
<ul ng-if="user.groups.length > 0">
|
||||||
<li ng-repeat="group in user.groups">
|
<li ng-repeat="group in user.groups">
|
||||||
<a href="#/group/{{ group }}">{{ group }}</a>
|
<a href="#/group/{{ group }}">{{ group }}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h4>Quota used</h4>
|
<h4>{{ 'user.profile.quota_used' | translate }}</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="progress" title="{{(user.storage_current / user.storage_quota * 100) | number: 0}}% Used">
|
<div class="progress" title="{{ 'user.profile.percent_used' | translate: '{ percent: user.storage_current / user.storage_quota * 100 }' }}">
|
||||||
<div class="progress-bar" ng-style="{ 'width': (user.storage_current / user.storage_quota * 100) + '%' }">
|
<div class="progress-bar" ng-style="{ 'width': (user.storage_current / user.storage_quota * 100) + '%' }">
|
||||||
<span class="sr-only">{{ (user.storage_current / user.storage_quota * 100) }}% Used</span>
|
<span class="sr-only">{{ 'user.profile.percent_used' | translate: '{ percent: user.storage_current / user.storage_quota * 100 }' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4>Related links</h4>
|
<h4>{{ 'user.profile.related_links' | translate }}</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a ng-href="#/document/search/by:{{ user.username }}">
|
<a ng-href="#/document/search/by:{{ user.username }}">
|
||||||
Documents created by {{ user.username }}
|
{{ 'user.profile.document_created' | translate: '{ username: user.username }' }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li ng-if="userInfo.base_functions.indexOf('ADMIN') != -1">
|
<li ng-if="userInfo.base_functions.indexOf('ADMIN') != -1">
|
||||||
<a ng-href="#/settings/user/edit/{{ user.username }}">
|
<a ng-href="#/settings/user/edit/{{ user.username }}">
|
||||||
Edit {{ user.username }} user
|
{{ 'user.profile.edit_user' | translate: '{ username: user.username }' }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
@ -1,2 +1,2 @@
|
|||||||
<h1>Users & Groups</h1>
|
<h1>{{ 'usergroup.default.title' | translate }}</h1>
|
||||||
<p>Here you can view informations about users and groups.</p>
|
<p>{{ 'usergroup.default.message' | translate }}</p>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<div class="well">
|
<div class="well">
|
||||||
<p class="input-group">
|
<p class="input-group">
|
||||||
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
|
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
|
||||||
<input type="search" class="form-control" placeholder="Search in groups" ng-model="searchGroup">
|
<input type="search" class="form-control" placeholder="{{ 'usergroup.search_groups' | translate }}" ng-model="searchGroup">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<table class="row table table-striped table-hover">
|
<table class="row table table-striped table-hover">
|
||||||
@ -21,7 +21,7 @@
|
|||||||
<div class="well">
|
<div class="well">
|
||||||
<p class="input-group">
|
<p class="input-group">
|
||||||
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
|
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
|
||||||
<input type="search" class="form-control" placeholder="Search in users" ng-model="searchUser">
|
<input type="search" class="form-control" placeholder="{{ 'usergroup.search_users' | translate }}" ng-model="searchUser">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<table class="row table table-striped table-hover">
|
<table class="row table table-striped table-hover">
|
||||||
@ -31,7 +31,7 @@
|
|||||||
<td class="col-xs-4">
|
<td class="col-xs-4">
|
||||||
<span class="glyphicon glyphicon-user"></span>
|
<span class="glyphicon glyphicon-user"></span>
|
||||||
{{ user.username }}
|
{{ user.username }}
|
||||||
<span class="text-muted" ng-if="userInfo.username == user.username">It's you!</span>
|
<span class="text-muted" ng-if="userInfo.username == user.username">{{ 'usergroup.you' | translate }}</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -35,11 +35,12 @@
|
|||||||
// Documents list
|
// Documents list
|
||||||
.table-documents {
|
.table-documents {
|
||||||
thead th {
|
thead th {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
tbody tr {
|
tbody tr {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cell-tags {
|
.cell-tags {
|
||||||
|
Loading…
Reference in New Issue
Block a user