diff --git a/.gitignore b/.gitignore index 9a90a4c..23474e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.python-version *.egg-info *.pyc *.pyo diff --git a/CHANGES.rst b/CHANGES.rst index fd7b0f6..4441a4b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,17 @@ Changes ======= +2.0.0 (unreleased) +------------------ + +- Users and Groups entry nodes are no longer displayed in main menu. + [rnix] + +- Remove no longer used ``content_grid_width`` and ``sidebar_left_grid_width`` + properties from ``UGMLayoutConfig``. + [rnix] + + 1.1.0 (unreleased) ------------------ diff --git a/Makefile b/Makefile index 2439942..f0c9699 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ #: i18n.lingua #: js.nodejs #: js.rollup +#: js.scss #: js.wtr #: qa.coverage #: qa.test @@ -27,11 +28,11 @@ DEPLOY_TARGETS?= # target to be executed when calling `make run` # No default value. -RUN_TARGET?= +RUN_TARGET?=run-ugm # Additional files and folders to remove when running clean target # No default value. -CLEAN_FS?= +CLEAN_FS?=pnpm-lock.yaml # Optional makefile to include before default targets. This can # be used to provide custom targets or hook up to existing targets. @@ -93,6 +94,24 @@ WTR_CONFIG?=js/wtr.config.mjs # Default: --coverage WTR_OPTIONS?=--coverage +## js.scss + +# The SCSS root source file. +# Default: scss/styles.scss +SCSS_SOURCE?=scss/ugm.scss + +# The target file for the compiles Stylesheet. +# Default: scss/styles.css +SCSS_TARGET?=src/cone/ugm/browser/static/cone.ugm.css + +# The target file for the compressed Stylesheet. +# Default: scss/styles.min.css +SCSS_MIN_TARGET?=src/cone/ugm/browser/static/cone.ugm.min.css + +# Additional options to be passed to SCSS compiler. +# Default: --no-source-map=none +SCSS_OPTIONS?=--no-source-map=none + ## js.rollup # Rollup config file. @@ -336,6 +355,17 @@ NODEJS_DEV_PACKAGES+=\ wtr: $(NODEJS_TARGET) @web-test-runner $(WTR_OPTIONS) --config $(WTR_CONFIG) +############################################################################## +# scss +############################################################################## + +NODEJS_DEV_PACKAGES+=sass + +.PHONY: scss +scss: $(NODEJS_TARGET) + @sass $(SCSS_OPTIONS) $(SCSS_SOURCE) $(SCSS_TARGET) + @sass $(SCSS_OPTIONS) --style compressed $(SCSS_SOURCE) $(SCSS_MIN_TARGET) + ############################################################################## # rollup ############################################################################## diff --git a/cfg/ugm.ini b/cfg/ugm.ini index ac6ba13..87ff98e 100644 --- a/cfg/ugm.ini +++ b/cfg/ugm.ini @@ -34,10 +34,10 @@ ugm.backend = file ugm.config = %(here)s/ugm.xml ugm.localmanager_config = %(here)s/localmanager.xml -ugm.users_file = %(here)s/../parts/ugm/users -ugm.groups_file = %(here)s/../parts/ugm/groups -ugm.roles_file = %(here)s/../parts/ugm/roles -ugm.datadir = %(here)s/../parts/ugm/data +ugm.users_file = %(here)s/../var/ugm/users +ugm.groups_file = %(here)s/../var/ugm/groups +ugm.roles_file = %(here)s/../var/ugm/roles +ugm.datadir = %(here)s/../var/ugm/data [pipeline:main] pipeline = diff --git a/cfg/ugm.xml b/cfg/ugm.xml index 76052d3..f717730 100644 --- a/cfg/ugm.xml +++ b/cfg/ugm.xml @@ -1,9 +1,9 @@ - + False - False + True - + 0 True portrait image/jpeg diff --git a/include.mk b/include.mk new file mode 100644 index 0000000..11fdc80 --- /dev/null +++ b/include.mk @@ -0,0 +1,3 @@ +.PHONY: run-ugm +run-ugm: $(INSTALL_TARGETS) + @$(VENV_FOLDER)/bin/pserve cfg/ugm.ini diff --git a/mx.ini b/mx.ini index 5503d9e..4aa3573 100644 --- a/mx.ini +++ b/mx.ini @@ -8,11 +8,8 @@ cs_push = git@github.com:conestack # checkout source packages checkout_packages = true -# feature branch to checkout -feature_branch = master - # main package -main-package = -e .[test] +main-package = -e .[dev,test] # fixed dependency package versions version-overrides = @@ -42,7 +39,7 @@ environment = env use = ${settings:checkout_packages} url = ${settings:cs}/odict.git pushurl = ${settings:cs_push}/odict.git -branch = ${settings:feature_branch} +branch = master mxmake-test-path = tests mxmake-source-path = src/odict @@ -50,7 +47,7 @@ mxmake-source-path = src/odict use = ${settings:checkout_packages} url = ${settings:cs}/plumber.git pushurl = ${settings:cs_push}/plumber.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = tests mxmake-source-path = src/plumber @@ -63,7 +60,7 @@ mxmake-source-path = src/plumber use = ${settings:checkout_packages} url = ${settings:cs}/node.git pushurl = ${settings:cs_push}/node.git -branch = ${settings:feature_branch} +branch = master mxmake-test-path = src mxmake-source-path = src/node @@ -71,7 +68,7 @@ mxmake-source-path = src/node use = ${settings:checkout_packages} url = ${settings:cs}/node.ext.ugm.git pushurl = ${settings:cs_push}/node.ext.ugm.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/node/ext/ugm @@ -84,7 +81,7 @@ mxmake-source-path = src/node/ext/ugm use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.git pushurl = ${settings:cs_push}/yafowil.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/yafowil @@ -93,7 +90,7 @@ mxmake-source-path = src/yafowil use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.yaml.git pushurl = ${settings:cs_push}/yafowil.yaml.git -branch = ${settings:feature_branch} +branch = master mxmake-test-path = src mxmake-source-path = src/yafowil/yaml @@ -101,7 +98,7 @@ mxmake-source-path = src/yafowil/yaml use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.lingua.git pushurl = ${settings:cs_push}/yafowil.lingua.git -branch = ${settings:feature_branch} +branch = master mxmake-test-path = src mxmake-source-path = src/yafowil/lingua @@ -109,7 +106,7 @@ mxmake-source-path = src/yafowil/lingua use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.webob.git pushurl = ${settings:cs_push}/yafowil.webob.git -branch = ${settings:feature_branch} +branch = master mxmake-test-path = src mxmake-source-path = src/yafowil/webob @@ -117,7 +114,7 @@ mxmake-source-path = src/yafowil/webob use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.bootstrap.git pushurl = ${settings:cs_push}/yafowil.bootstrap.git -branch = ${settings:feature_branch} +branch = master mxmake-test-path = src mxmake-source-path = src/yafowil/bootstrap @@ -125,7 +122,7 @@ mxmake-source-path = src/yafowil/bootstrap use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.widget.array.git pushurl = ${settings:cs_push}/yafowil.widget.array.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/yafowil/widget/array @@ -135,7 +132,7 @@ mxmake-omit-path = src/yafowil/widget/array/example.py use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.widget.autocomplete.git pushurl = ${settings:cs_push}/yafowil.widget.autocomplete.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/yafowil/widget/autocomplete @@ -145,7 +142,7 @@ mxmake-omit-path = src/yafowil/widget/autocomplete/example.py use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.widget.datetime.git pushurl = ${settings:cs_push}/yafowil.widget.datetime.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/yafowil/widget/datetime @@ -155,7 +152,7 @@ mxmake-omit-path = src/yafowil/widget/datetime/example.py use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.widget.dict.git pushurl = ${settings:cs_push}/yafowil.widget.dict.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/yafowil/widget/dict @@ -165,7 +162,7 @@ mxmake-omit-path = src/yafowil/widget/dict/example.py use = ${settings:checkout_packages} url = ${settings:cs}/yafowil.widget.image.git pushurl = ${settings:cs_push}/yafowil.widget.image.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/yafowil/widget/image @@ -179,7 +176,7 @@ mxmake-omit-path = src/yafowil/widget/image/example.py use = ${settings:checkout_packages} url = ${settings:cs}/treibstoff.git pushurl = ${settings:cs_push}/treibstoff.git -branch = ${settings:feature_branch} +branch = 2.0 [webresource] use = ${settings:checkout_packages} @@ -194,7 +191,7 @@ mxmake-source-path = webresource use = ${settings:checkout_packages} url = ${settings:cs}/cone.tile.git pushurl = ${settings:cs_push}/cone.tile.git -branch = ${settings:feature_branch} +branch = master extras = test mxmake-test-path = src mxmake-source-path = src/cone/tile @@ -203,7 +200,6 @@ mxmake-source-path = src/cone/tile use = ${settings:checkout_packages} url = ${settings:cs}/cone.app.git pushurl = ${settings:cs_push}/cone.app.git -branch = ${settings:feature_branch} -extras = test +branch = 2.0 mxmake-test-path = src mxmake-source-path = src/cone/app diff --git a/package.json b/package.json index 8280d67..644ec0e 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "cone.ugm", - "version": "1.1.0-dev", + "version": "2.0.0-dev", "devDependencies": { "@rollup/plugin-terser": "^0.4.4", "@web/dev-server-import-maps": "^0.2.1", - "@web/test-runner-core": "^0.13.4", "@web/test-runner": "^0.18.3", + "@web/test-runner-core": "^0.13.4", "install": "^0.13.0", "jquery": "^4.0.0-rc.1", "qunit": "^2.20.1", - "rollup-plugin-cleanup": "^3.2.1", "rollup": "^2.79.2", - "sass": "^1.80.6", + "rollup-plugin-cleanup": "^3.2.1", + "sass": "^1.96.0", "web-test-runner-qunit": "^2.0.0" }, "packageManager": "pnpm@9.3.0+sha512.ee7b93e0c2bd11409c6424f92b866f31d3ea1bef5fbe47d3c7500cdc3c9668833d2e55681ad66df5b640c61fa9dc25d546efa54d76d7f8bf54b13614ac293631" diff --git a/pyproject.toml b/pyproject.toml index 254eb3c..f47d486 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "cone.ugm" -version = "1.1.0.dev0" +version = "2.0.0.dev0" description = "User and group management" dynamic = ["readme"] requires-python = ">=3.10" @@ -22,7 +22,7 @@ classifiers = [ "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", ] dependencies = [ - "cone.app[lxml]>1.0.99,<2.0.0", + "cone.app[lxml]>1.99", "natsort", "pillow>=10.0.0", "yafowil.widget.array>1.99", diff --git a/scss/ugm.scss b/scss/ugm.scss new file mode 100644 index 0000000..65e7b0b --- /dev/null +++ b/scss/ugm.scss @@ -0,0 +1,205 @@ +.hidden { + display: none; +} + +/* columns */ +div.columns { + gap: 20px; + + div.left_column, div.right_column { + flex: 1; + flex-basis: 500px; + } + + .card { + .card-header { + min-height: 55px; /* to provide static height without button */ + } + .card { + border: none; + background: none; + margin-top: 0!important; + + .card-body { + padding: 0; + } + } + } +} + +/* action icons */ +a.action { + line-height:16px; + font-size:16px; + text-decoration:none; + float:right; + margin-top:2px; + + &:hover { + text-decoration:none; + } +} +a.add_item::before, +a.add_item_disabled::before { + font-family:"bootstrap-icons"; + content: "\F4FA"; +} +a.add_item, +a.add_item:hover { + color:#00ff00; +} +a.remove_item, +a.remove_item:hover, +a.delete_item, +a.delete_item:hover { + color:#ff0000; +} +a.delete_item::before, +a.delete_item_disabled::before { + font-family:"bootstrap-icons"; + content: "\F623"; +} +a.remove_item::before, +a.remove_item_disabled::before { + font-family:"bootstrap-icons"; + content: "\F2E6"; +} +a.add_item_disabled, +a.add_item_disable:hover, +a.remove_item_disabled, +a.remove_item_disable:hover, +a.delete_item_disabled, +a.delete_item_disable:hover { + cursor:default; + color:#ccc !important; +} + +/* column listing */ +div.columnlisting div.column_filter { + flex-grow: 1; + flex-shrink: 1; + flex-basis: 150px; + max-width: 300px; +} +div.columnsorting { + flex-shrink: 0; + + @media(max-width: 400px) { + flex-direction: column; + width: 100%; + } + + .columnsorticon::before { + font-family:"bootstrap-icons"; + content:"\F5D4"; + } + + .btn.asc .columnsorticon::before { + font-family:"bootstrap-icons"; + content:"\F229"; + } + .btn.desc .columnsorticon::before { + font-family:"bootstrap-icons"; + content:"\F235"; + } +} +div.columnitems { + &.users { + .sort_col_1 { + width: 100%!important; + } + .sort_col_2 { + display: none!important; + width: 0!important; + } + } + li { + cursor:pointer; + + &.hidden { + display:none; + } + } + div.cols { + flex: 1; + + .sort_col_1 { + width: 30%; + } + .sort_col_2 { + width: 70%; + } + } +} +[data-bs-theme="light"] div.columnitems li.selected { + background-color: var(--primary-100)!important; +} +[data-bs-theme="dark"] div.columnitems li.selected { + background-color: var(--primary-100-dark)!important; +} + +/* principal forms */ +div.principal_form { + position: relative; + + div.display-form-control { + background: none; + height: 38px; + border-radius: 3px; + border: 1px solid #b1c7e5; + padding: 5px 12px; + } + + > .btn > * { + vertical-align: middle; + } +} +#form-groupform .display-text.form-control, +#form-userform .display-text.form-control { + border:none; + box-shadow:none; + padding-left:0; +} +#field-userform-active label { + display: block; + clear: both; +} +#image-preview-userform-portrait { + border-radius:3px 3px 3px 3px; + box-shadow:0px 0px 4px #666666; +} +#input-userform-portrait { + margin-top:12px; + margin-bottom:6px; +} +#checkbox-groupform-principal_roles-wrapper, +#checkbox-userform-principal_roles-wrapper { + padding-left:0; +} + +/* settings form */ +#form-ugm_settings { + .field { + padding-left: 1rem; + padding-right: 1rem; + + &:not(:last-child) { + padding-bottom: 1rem; + } + } + label.form-label { + font-size: 18px; + } + .scrollable-content { + min-width: 400px; + } +} + +#form-localmanager_settings { + #array-localmanager_settings-rules { + table td.widget { + display: flex; + flex-wrap: wrap; + } + } +} diff --git a/src/cone/ugm/__init__.py b/src/cone/ugm/__init__.py index 1c1175d..a010866 100644 --- a/src/cone/ugm/__init__.py +++ b/src/cone/ugm/__init__.py @@ -77,9 +77,7 @@ def __init__(self, model=None, request=None): self.personaltools = True self.columns_fluid = True self.pathbar = False - self.sidebar_left = [] - self.sidebar_left_grid_width = 0 - self.content_grid_width = 12 + self.sidebar_left = ['navtree'] def register_config(key, factory): diff --git a/src/cone/ugm/browser/__init__.py b/src/cone/ugm/browser/__init__.py index 70a27d4..190a061 100644 --- a/src/cone/ugm/browser/__init__.py +++ b/src/cone/ugm/browser/__init__.py @@ -10,13 +10,14 @@ ) cone_ugm_resources.add(wr.ScriptResource( name='cone-ugm-js', - depends='cone-app-protected-js', + depends='cone-app-js', resource='cone.ugm.js', compressed='cone.ugm.min.js' )) cone_ugm_resources.add(wr.StyleResource( name='cone-ugm-css', - resource='cone.ugm.css' + resource='cone.ugm.css', + compressed='cone.ugm.min.css' )) diff --git a/src/cone/ugm/browser/authoring.py b/src/cone/ugm/browser/authoring.py index 5b94c6f..a07304a 100644 --- a/src/cone/ugm/browser/authoring.py +++ b/src/cone/ugm/browser/authoring.py @@ -9,7 +9,7 @@ class AddFormFiddle(Behavior): @plumb def __call__(_next, self, model, request): - ajax_form_fiddle(request, '.right_column', 'inner') + ajax_form_fiddle(request, '.principal_form', 'inner') return _next(self, model, request) diff --git a/src/cone/ugm/browser/forms/general_settings.yaml b/src/cone/ugm/browser/forms/general_settings.yaml index f78c42d..5a0fd47 100644 --- a/src/cone/ugm/browser/forms/general_settings.yaml +++ b/src/cone/ugm/browser/forms/general_settings.yaml @@ -2,185 +2,220 @@ factory: form name: ugm_settings props: action: context.form_action - class: ajax + class: ajax mt-4 widgets: -- users_heading: - factory: tag +- users_settings: + factory: fieldset props: - tag: h3 - text: i18n:users_heading:User settings -- users_account_expiration: - factory: field:label:help:checkbox - value: expr:context.model.attrs.users_account_expiration == 'True' - props: - label: i18n:users_account_expiration:User Accounts expires? - help: i18n:users_account_expiration_help:Flag whether to consider user expiration -- user_id_autoincrement: - factory: field:label:help:checkbox - value: expr:context.model.attrs.user_id_autoincrement == 'True' - props: - label: i18n:user_id_autoincrement:Autoincrement user ID - help: i18n:user_id_autoincrement_help:Flag whether to autoincrement user - IDs at user creation time. This feature only works for systems using - numeric user IDs -- user_id_autoincrement_prefix: - factory: field:label:help:text - value: expr:context.model.attrs.user_id_autoincrement_prefix - props: - label: i18n:user_id_autoincrement_prefix:Autoincrement user ID prefix - help: i18n:user_id_autoincrement_prefix_help:Prefix for autogenerated user ID's -- user_id_autoincrement_start: - factory: field:label:help:error:number - value: expr:int( - context.model.attrs.user_id_autoincrement_start - if context.model.attrs.user_id_autoincrement_start else 0 - ) - props: - label: i18n:user_id_autoincrement_start:Autoincrement initial user number - help: i18n:user_id_autoincrement_start_help:User number to start from - datatype: python:int -- users_portrait: - factory: field:label:help:checkbox - value: expr:context.model.attrs.users_portrait == 'True' - props: - label: i18n:users_portrait:Portrait Support - help: i18n:users_portrait_help:Flag whether users can have a portrait -- users_portrait_attr: - factory: field:label:help:error:*portrait:text - value: expr:context.model.attrs.users_portrait_attr - props: - label: i18n:users_portrait_attr:Attribute containing portrait image - help: i18n:users_portrait_attr_help:Attribute name containing portrait image - custom: - portrait: - extractors: - - context.required_if_users_portrait -- users_portrait_accept: - factory: field:label:help:error:*portrait:text - value: expr:context.model.attrs.users_portrait_accept - props: - label: i18n:users_portrait_accept:Portrait mimetype - help: i18n:users_portrait_accept_help:Accepted Image mimetype for portrait property - custom: - portrait: - extractors: - - context.required_if_users_portrait -- users_portrait_width: - factory: field:label:help:error:*portrait:text - value: expr:int(context.model.attrs.users_portrait_width) - props: - label: i18n:users_portrait_width:Portrait width - help: i18n:users_portrait_width_help:Width in pixel portrait gets scaled to - datatype: python:int - custom: - portrait: - extractors: - - yafowil.common.number_extractor - - context.required_if_users_portrait -- users_portrait_height: - factory: field:label:help:error:*portrait:text - value: expr:int(context.model.attrs.users_portrait_height) - props: - label: i18n:users_portrait_height:Portrait height - help: i18n:users_portrait_height_help:Height in pixel portrait gets scaled to - datatype: python:int - custom: - portrait: - extractors: - - yafowil.common.number_extractor - - context.required_if_users_portrait -- users_local_management_enabled: - factory: field:label:help:checkbox - value: expr:context.model.attrs.users_local_management_enabled == 'True' - props: - label: i18n:users_local_management_enabled:Local User Management - help: i18n:users_local_management_enabled_help:Enable local User Management -- users_login_name_attr: - factory: field:label:help:text - value: expr:context.model.attrs.users_login_name_attr - props: - label: i18n:users_login_name_attr:Login name attribute - help: i18n:users_login_name_attr_help:Attribute used for optional login name -- users_exposed_attributes: - factory: field:label:help:array - value: expr:context.model.attrs.users_exposed_attributes - props: - label.label: i18n:users_exposed_attributes_label:Exposed user attributes - array.label: i18n:users_exposed_attributes_array:Click '+' to add attributes - help: i18n:users_exposed_attributes_help:Attributes which can be set via remote API - sort: False + structural: True + class: card card-body mb-3 px-0 widgets: - - exposed: - factory: error:text - props: - label: i18n:users_exposed_attributes_attribute:Attribute - required: i18n:users_exposed_attributes_attribute_required:No attribute given -- users_form_attrmap: - factory: field:label:help:error:dict - value: expr:context.model.attrs.users_form_attrmap - props: - label: i18n:users_form_attrmap:User form attributes - help: i18n:users_form_attrmap_help:Attributes exposed in user form - key_label: i18n:principal_attr_name:Attribute name - value_label: i18n:form_label:Form label -- users_listing_columns: - factory: field:label:help:error:dict - value: expr:context.model.attrs.users_listing_columns - props: - label: i18n:users_listing_columns:Column configuration for user listings - help: i18n:users_listing_columns_help:Attributes shown in user listing - required: i18n:users_listing_columns_required:User listing columns must not be empty - key_label: i18n:principal_attr_name:Attribute name - value_label: i18n:display_name:Display name -- users_listing_default_column: - factory: field:label:help:error:text - value: expr:context.model.attrs.users_listing_default_column - props: - label: i18n:users_listing_default_column:Users listing default column - help: i18n:users_listing_default_column_help:Default sort column in user listing - required: i18n:users_listing_default_column_required:Default sort column in - user listing is required -- groups_heading: - factory: tag - props: - tag: h3 - text: i18n:groups_heading:Group Settings -- groups_form_attrmap: - factory: field:label:help:error:dict - value: expr:context.model.attrs.groups_form_attrmap - props: - label: i18n:groups_form_attrmap:Group form attributes - help: i18n:groups_form_attrmap_help:Attributes exposed in group form - key_label: i18n:principal_attr_name:Attribute name - value_label: i18n:form_label:Form label -- groups_listing_columns: - factory: field:label:help:error:dict - value: expr:context.model.attrs.groups_listing_columns - props: - label: i18n:groups_listing_columns:Column configuration for groups listings - help: i18n:groups_listing_columns_help:Attributes shown in group listing - required: i18n:groups_listing_columns_required:Group listing columns must not be empty - key_label: i18n:principal_attr_name:Attribute name - value_label: i18n:display_name:Display name -- groups_listing_default_column: - factory: field:label:help:error:text - value: expr:context.model.attrs.groups_listing_default_column - props: - label: i18n:groups_listing_default_column:Groups listing default column - help: i18n:groups_listing_default_column_help:Default sort column in group listing - required: i18n:groups_listing_default_column_required:Default sort column in - groups listing is required -- roles_heading: - factory: tag - props: - tag: h3 - text: i18n:roles_heading:Roles settings -- roles_principal_roles_enabled: - factory: field:label:help:checkbox - value: expr:context.model.attrs.roles_principal_roles_enabled == 'True' - props: - label: i18n:roles_principal_roles_enabled:Principal roles - help: i18n:roles_principal_roles_enabled_help:Enable roles on principals + - users_heading: + factory: tag + props: + tag: h3 + class: mb-4 px-3 text-primary + text: i18n:users_heading:User settings + - users_account_expiration: + factory: field:label:help:checkbox + value: expr:context.model.attrs.users_account_expiration == 'True' + props: + label: i18n:users_account_expiration:User Accounts expires? + help: i18n:users_account_expiration_help:Flag whether to consider user expiration + field.class_add: form-check ms-4 + label.class: form-check-label + - user_id_autoincrement: + factory: field:label:help:checkbox + value: expr:context.model.attrs.user_id_autoincrement == 'True' + props: + label: i18n:user_id_autoincrement:Autoincrement user ID + help: i18n:user_id_autoincrement_help:Flag whether to autoincrement user + IDs at user creation time. This feature only works for systems using + numeric user IDs + field.class_add: form-check ms-4 + label.class: form-check-label + - user_id_autoincrement_prefix: + factory: field:label:help:text + value: expr:context.model.attrs.user_id_autoincrement_prefix + props: + label: i18n:user_id_autoincrement_prefix:Autoincrement user ID prefix + help: i18n:user_id_autoincrement_prefix_help:Prefix for autogenerated user ID's + - user_id_autoincrement_start: + factory: field:label:help:error:number + value: expr:int( + context.model.attrs.user_id_autoincrement_start + if context.model.attrs.user_id_autoincrement_start else 0 + ) + props: + label: i18n:user_id_autoincrement_start:Autoincrement initial user number + help: i18n:user_id_autoincrement_start_help:User number to start from + datatype: python:int + - users_portrait: + factory: field:label:help:checkbox + value: expr:context.model.attrs.users_portrait == 'True' + props: + label: i18n:users_portrait:Portrait Support + help: i18n:users_portrait_help:Flag whether users can have a portrait + field.class_add: form-check ms-4 + label.class: form-check-label + - users_portrait_attr: + factory: field:label:help:error:*portrait:text + value: expr:context.model.attrs.users_portrait_attr + props: + label: i18n:users_portrait_attr:Attribute containing portrait image + help: i18n:users_portrait_attr_help:Attribute name containing portrait image + custom: + portrait: + extractors: + - context.required_if_users_portrait + - users_portrait_accept: + factory: field:label:help:error:*portrait:text + value: expr:context.model.attrs.users_portrait_accept + props: + label: i18n:users_portrait_accept:Portrait mimetype + help: i18n:users_portrait_accept_help:Accepted Image mimetype for portrait property + custom: + portrait: + extractors: + - context.required_if_users_portrait + - users_portrait_width: + factory: field:label:help:error:*portrait:text + value: expr:int(context.model.attrs.users_portrait_width) + props: + label: i18n:users_portrait_width:Portrait width + help: i18n:users_portrait_width_help:Width in pixel portrait gets scaled to + datatype: python:int + custom: + portrait: + extractors: + - yafowil.common.number_extractor + - context.required_if_users_portrait + - users_portrait_height: + factory: field:label:help:error:*portrait:text + value: expr:int(context.model.attrs.users_portrait_height) + props: + label: i18n:users_portrait_height:Portrait height + help: i18n:users_portrait_height_help:Height in pixel portrait gets scaled to + datatype: python:int + custom: + portrait: + extractors: + - yafowil.common.number_extractor + - context.required_if_users_portrait + - users_local_management_enabled: + factory: field:label:help:checkbox + value: expr:context.model.attrs.users_local_management_enabled == 'True' + props: + label: i18n:users_local_management_enabled:Local User Management + help: i18n:users_local_management_enabled_help:Enable local User Management + field.class_add: form-check ms-4 + label.class: form-check-label + - users_login_name_attr: + factory: field:label:help:text + value: expr:context.model.attrs.users_login_name_attr + props: + label: i18n:users_login_name_attr:Login name attribute + help: i18n:users_login_name_attr_help:Attribute used for optional login name + - users_exposed_attributes: + factory: field:label:help:array + value: expr:context.model.attrs.users_exposed_attributes + props: + label.label: i18n:users_exposed_attributes_label:Exposed user attributes + array.label: i18n:users_exposed_attributes_array:Click '+' to add attributes + help: i18n:users_exposed_attributes_help:Attributes which can be set via remote API + sort: False + widgets: + - exposed: + factory: error:text + props: + label: i18n:users_exposed_attributes_attribute:Attribute + required: i18n:users_exposed_attributes_attribute_required:No attribute given + - users_form_attrmap: + factory: field:label:help:error:dict + value: expr:context.model.attrs.users_form_attrmap + props: + label: i18n:users_form_attrmap:User form attributes + help: i18n:users_form_attrmap_help:Attributes exposed in user form + key_label: i18n:principal_attr_name:Attribute name + value_label: i18n:form_label:Form label + scrollable: True + - users_listing_columns: + factory: field:label:help:error:dict + value: expr:context.model.attrs.users_listing_columns + props: + label: i18n:users_listing_columns:Column configuration for user listings + help: i18n:users_listing_columns_help:Attributes shown in user listing + required: i18n:users_listing_columns_required:User listing columns must not be empty + key_label: i18n:principal_attr_name:Attribute name + value_label: i18n:display_name:Display name + scrollable: True + - users_listing_default_column: + factory: field:label:help:error:text + value: expr:context.model.attrs.users_listing_default_column + props: + label: i18n:users_listing_default_column:Users listing default column + help: i18n:users_listing_default_column_help:Default sort column in user listing + required: i18n:users_listing_default_column_required:Default sort column in + user listing is required +- groups_settings: + factory: fieldset + props: + structural: True + class: card card-body mb-3 px-0 + widgets: + - groups_heading: + factory: tag + props: + tag: h3 + text: i18n:groups_heading:Group Settings + class: mb-4 px-3 text-primary + - groups_form_attrmap: + factory: field:label:help:error:dict + value: expr:context.model.attrs.groups_form_attrmap + props: + label: i18n:groups_form_attrmap:Group form attributes + help: i18n:groups_form_attrmap_help:Attributes exposed in group form + key_label: i18n:principal_attr_name:Attribute name + value_label: i18n:form_label:Form label + scrollable: True + - groups_listing_columns: + factory: field:label:help:error:dict + value: expr:context.model.attrs.groups_listing_columns + props: + label: i18n:groups_listing_columns:Column configuration for groups listings + help: i18n:groups_listing_columns_help:Attributes shown in group listing + required: i18n:groups_listing_columns_required:Group listing columns must not be empty + key_label: i18n:principal_attr_name:Attribute name + value_label: i18n:display_name:Display name + scrollable: True + - groups_listing_default_column: + factory: field:label:help:error:text + value: expr:context.model.attrs.groups_listing_default_column + props: + label: i18n:groups_listing_default_column:Groups listing default column + help: i18n:groups_listing_default_column_help:Default sort column in group listing + required: i18n:groups_listing_default_column_required:Default sort column in + groups listing is required +- roles_settings: + factory: fieldset + props: + structural: True + class: card card-body mb-3 px-0 + widgets: + - roles_heading: + factory: tag + props: + tag: h3 + text: i18n:roles_heading:Roles settings + class: mb-4 px-3 text-primary + - roles_principal_roles_enabled: + factory: field:label:help:checkbox + value: expr:context.model.attrs.roles_principal_roles_enabled == 'True' + props: + label: i18n:roles_principal_roles_enabled:Principal roles + help: i18n:roles_principal_roles_enabled_help:Enable roles on principals + field.class_add: form-check ms-4 + label.class: form-check-label - save: factory: submit props: diff --git a/src/cone/ugm/browser/forms/localmanager_settings.yaml b/src/cone/ugm/browser/forms/localmanager_settings.yaml index c441397..cb26a46 100644 --- a/src/cone/ugm/browser/forms/localmanager_settings.yaml +++ b/src/cone/ugm/browser/forms/localmanager_settings.yaml @@ -2,7 +2,7 @@ factory: form name: localmanager_settings props: action: context.form_action - class: ajax + class: ajax mt-4 widgets: - rules: factory: field:array @@ -10,7 +10,7 @@ widgets: props: label: i18n:localmanager_rules sort: False - table_class: rules_array + class_add: mb-3 widgets: - rule: factory: error:*duplicate_rule:compound @@ -27,16 +27,16 @@ widgets: source: javascript:ugm.lm_autocomplete_gid minLength: 1 delay: 300 - field.class: source_field + field.class_add: col-12 col-md-6 p-0 - targets: - factory: error:array + factory: field:error:array props: label: i18n:localmanager_rule_target required: i18n:localmanager_no_targets_for_source error.position: after sort: False - array.class: targets_field - table_class: targets_array + field.class_add: col-12 col-md-6 mt-md-4 p-0 + array.class_add: mt-md-2 ms-md-3 widgets: - target: factory: compound @@ -55,7 +55,7 @@ widgets: - default: factory: checkbox props: - class: target_default + class: form-check target_default - save: factory: submit props: diff --git a/src/cone/ugm/browser/group.py b/src/cone/ugm/browser/group.py index f81e97e..2da95d9 100644 --- a/src/cone/ugm/browser/group.py +++ b/src/cone/ugm/browser/group.py @@ -35,6 +35,8 @@ interface=Group, permission='view') class GroupLeftColumn(Tile): + title = _('group_data', default='Group Data') + to_principal = _('groups', default='Groups') @property def principals_target(self): @@ -48,7 +50,7 @@ def principals_target(self): interface=Group, permission='view') class GroupRightColumn(Tile): - pass + title = _('group_users', default='Group Users') class UsersListing(ColumnListing): @@ -180,6 +182,8 @@ def ajax_action(self): class GroupForm(PrincipalForm): form_name = 'groupform' field_factory_registry = group_field + to_principal = _('group_members', default='Group Members') + to_principals = _('groups', default='Groups') @property def reserved_attrs(self): @@ -192,11 +196,13 @@ def form_attrmap(self): return general_settings(self.model).attrs.groups_form_attrmap -@tile(name='addform', interface=Group, permission="add_group") +@tile(name='addform', interface=Group, permission="add_group", path='templates/principal_form.pt') @plumbing(ContentAddForm, PrincipalRolesForm, AddFormFiddle) class GroupAddForm(GroupForm, Form): show_heading = False show_contextmenu = False + header_title = _('new_group', default='New Group') + principal_id = None def save(self, widget, data): extracted = dict() @@ -228,11 +234,16 @@ def next(self, request): return HTTPFound(location=url) -@tile(name='editform', interface=Group, permission="edit_group", strict=False) +@tile(name='editform', interface=Group, permission="edit_group", strict=False, path='templates/principal_form.pt') @plumbing(ContentEditForm, PrincipalRolesForm, EditFormFiddle) class GroupEditForm(GroupForm, Form): show_heading = False show_contextmenu = False + header_title = _('group_data', default='Group Data') + + @property + def principal_id(self): + return self.model.name def save(self, widget, data): attrs = self.model.attrs diff --git a/src/cone/ugm/browser/groups.py b/src/cone/ugm/browser/groups.py index fa323d3..eb58dfc 100644 --- a/src/cone/ugm/browser/groups.py +++ b/src/cone/ugm/browser/groups.py @@ -20,6 +20,7 @@ permission='view') class GroupsLeftColumn(Tile): add_label = _('add_group', default='Add Group') + title = _('groups', default='Groups') @property def add_target(self): @@ -40,6 +41,8 @@ def can_add(self): interface=Groups, permission='view') class GroupsRightColumn(Column): + no_principal = _('no_group_selected', default='No Group selected.') + header_title = _('group_data', default='Group Data') @property def principal_id(self): @@ -47,13 +50,9 @@ def principal_id(self): @property def principal_form(self): + self.request.environ['cone.ugm.column'] = 'right' return self._render(self.model[self.principal_id], 'editform') - @property - def principal_target(self): - return make_url(self.request, node=self.model[self.principal_id]) - - @tile( name='columnlisting', path='templates/column_listing.pt', diff --git a/src/cone/ugm/browser/principal.py b/src/cone/ugm/browser/principal.py index 75ba841..9c3c88a 100644 --- a/src/cone/ugm/browser/principal.py +++ b/src/cone/ugm/browser/principal.py @@ -1,3 +1,4 @@ +from cone.app.browser.utils import make_query from cone.app.browser.utils import make_url from cone.app.ugm import ugm_backend from cone.ugm.utils import general_settings @@ -6,8 +7,8 @@ from pyramid.i18n import TranslationStringFactory from yafowil.base import ExtractionError from yafowil.base import factory -from yafowil.password import ascii_extractor from yafowil.common import generic_extractor +from yafowil.password import ascii_extractor import itertools @@ -335,9 +336,23 @@ def email_field_factory(form, label, value): # Principal form ############################################################################### -class PrincipalForm(object): +class PrincipalForm: form_name = None + @property + def link_target(self): + env = self.request.environ + if 'cone.ugm.column' in env and env['cone.ugm.column'] == 'right': + title = self.to_principal + icon = 'bi-caret-right' + target = make_url(self.request, node=self.model) + else: + title = self.to_principals + icon = 'bi-caret-left' + query = make_query(pid=self.model.name) + target = make_url(self.request, node=self.model.parent, query=query) + return dict(title=title, icon=icon, target=target) + @property def reserved_attrs(self): raise NotImplementedError( @@ -382,6 +397,7 @@ def prepare(self): props={ 'action': 'save', 'expression': True, + 'class_add': 'me-2', 'handler': self.save, 'next': self.next, 'label': _('save', default='Save') diff --git a/src/cone/ugm/browser/static/cone.ugm.css b/src/cone/ugm/browser/static/cone.ugm.css index 4ec9135..217a193 100644 --- a/src/cone/ugm/browser/static/cone.ugm.css +++ b/src/cone/ugm/browser/static/cone.ugm.css @@ -1,277 +1,198 @@ .hidden { - display:none; + display: none; } /* columns */ -div.left_column { - padding-left:0px; - padding-right:0px; -} -div.right_column { - padding-left:0px; - padding-right:0px; -} -@media (min-width: 992px) { - div.left_column { - padding-left:0px; - padding-right:6px; - } - div.right_column { - padding-left:6px; - padding-right:0px; - } +div.columns { + gap: 20px; } - -/* add button */ -div.add_button { - float:left; - margin-bottom:6px; +div.columns div.left_column, div.columns div.right_column { + flex: 1; + flex-basis: 500px; +} +div.columns .card .card-header { + min-height: 55px; /* to provide static height without button */ +} +div.columns .card .card { + border: none; + background: none; + margin-top: 0 !important; +} +div.columns .card .card .card-body { + padding: 0; } /* action icons */ a.action { - line-height:16px; - font-size:16px; - text-decoration:none; - float:right; - margin-top:2px; + line-height: 16px; + font-size: 16px; + text-decoration: none; + float: right; + margin-top: 2px; } a.action:hover { - text-decoration:none; + text-decoration: none; } + a.add_item::before, a.add_item_disabled::before { - font-family:"Ionicons"; - content: "\f218"; + font-family: "bootstrap-icons"; + content: "\f4fa"; } + a.add_item, a.add_item:hover { - color:#00ff00; -} -a.add_item_disabled, -a.add_item_disable:hover { - cursor:default; - color:#ccc !important; -} -a.remove_item::before, -a.remove_item_disabled::before { - font-family:"Ionicons"; - content: "\f209"; + color: #00ff00; } + a.remove_item, -a.remove_item:hover { - color:#ff0000; -} -a.remove_item_disabled, -a.remove_item_disable:hover { - cursor:default; - color:#ccc !important; +a.remove_item:hover, +a.delete_item, +a.delete_item:hover { + color: #ff0000; } + a.delete_item::before, a.delete_item_disabled::before { - font-family:"Ionicons"; - content: "\f12a"; + font-family: "bootstrap-icons"; + content: "\f623"; } -a.delete_item, -a.delete_item:hover { - color:#ff0000; + +a.remove_item::before, +a.remove_item_disabled::before { + font-family: "bootstrap-icons"; + content: "\f2e6"; } + +a.add_item_disabled, +a.add_item_disable:hover, +a.remove_item_disabled, +a.remove_item_disable:hover, a.delete_item_disabled, a.delete_item_disable:hover { - cursor:default; - color:#ccc !important; + cursor: default; + color: #ccc !important; } /* column listing */ -div.columnlisting .pagination { - margin-top:-12px; -} -div.columnlisting .pagination > li > a, -div.columnlisting .pagination > li > span { - padding:10px 10px; -} div.columnlisting div.column_filter { - float:right; -} -div.columnlisting div.column_limit { - float:right; - margin-right:12px; -} -div.columnlisting div.column_limit label { - display:inline-block; - padding-top:2px; -} -div.columnlisting div.column_limit input { - display:inline-block; - position:relative; - top:4px; + flex-grow: 1; + flex-shrink: 1; + flex-basis: 150px; + max-width: 300px; } + div.columnsorting { - margin-bottom:6px; + flex-shrink: 0; } -div.columnsorting div { - color:#000; +@media (max-width: 400px) { + div.columnsorting { + flex-direction: column; + width: 100%; + } } div.columnsorting .columnsorticon::before { - font-family:"Ionicons"; - content:"\f20b"; + font-family: "bootstrap-icons"; + content: "\f5d4"; } div.columnsorting .btn.asc .columnsorticon::before { - font-family:"Ionicons"; - content:"\f10d"; + font-family: "bootstrap-icons"; + content: "\f229"; } div.columnsorting .btn.desc .columnsorticon::before { - font-family:"Ionicons"; - content:"\f104"; + font-family: "bootstrap-icons"; + content: "\f235"; +} + +div.columnitems.users .sort_col_1 { + width: 100% !important; +} +div.columnitems.users .sort_col_2 { + display: none !important; + width: 0 !important; } div.columnitems li { - cursor:pointer; + cursor: pointer; } div.columnitems li.hidden { - display:none; -} -div.columnitems li.selected { - color:#fff; - background-color:#49539f !important; + display: none; } div.columnitems div.cols { - float:left; - width:90%; + flex: 1; } -div.columnitems div.cols div { - float:left; - overflow:hidden; +div.columnitems div.cols .sort_col_1 { + width: 30%; } -div.columnitems div.cols div.sort_col_1 { - width:30%; +div.columnitems div.cols .sort_col_2 { + width: 70%; } -div.columnitems div.cols div.sort_col_2 { - width:70%; + +[data-bs-theme=light] div.columnitems li.selected { + background-color: var(--primary-100) !important; } -div.columnitems div.actions { - float:right; + +[data-bs-theme=dark] div.columnitems li.selected { + background-color: var(--primary-100-dark) !important; } /* principal forms */ -span.go_to_principal, -span.go_to_principals { - float:right; - font-size:220%; - margin-right:12px; - margin-top:2px; - cursor:pointer; +div.principal_form { + position: relative; +} +div.principal_form div.display-form-control { + background: none; + height: 38px; + border-radius: 3px; + border: 1px solid #b1c7e5; + padding: 5px 12px; +} +div.principal_form > .btn > * { + vertical-align: middle; } + #form-groupform .display-text.form-control, #form-userform .display-text.form-control { - border:none; - box-shadow:none; - padding-left:0; + border: none; + box-shadow: none; + padding-left: 0; } + #field-userform-active label { - display: block; - clear: both; + display: block; + clear: both; } + #image-preview-userform-portrait { - border-radius:3px 3px 3px 3px; - box-shadow:0px 0px 4px #666666; + border-radius: 3px 3px 3px 3px; + box-shadow: 0px 0px 4px #666666; } + #input-userform-portrait { - margin-top:12px; - margin-bottom:6px; + margin-top: 12px; + margin-bottom: 6px; } + #checkbox-groupform-principal_roles-wrapper, #checkbox-userform-principal_roles-wrapper { - padding-left:0; + padding-left: 0; } -#checkbox-groupform-principal_roles-wrapper li, -#checkbox-userform-principal_roles-wrapper li { - margin-top:0; - margin-bottom:0; - padding-bottom:4px; + +/* settings form */ +#form-ugm_settings .field { + padding-left: 1rem; + padding-right: 1rem; } -#checkbox-groupform-principal_roles-wrapper input[type="checkbox"], -#checkbox-userform-principal_roles-wrapper input[type="checkbox"] { - margin-left:0; +#form-ugm_settings .field:not(:last-child) { + padding-bottom: 1rem; } - -/* general settings */ -#form-ugm_settings .dictwidget th.actions, -#form-ugm_settings .dictwidget td.actions { - width:7em; - padding:5px 0 0 0; -} -#form-ugm_settings .dict_actions { - margin-top:8px; - padding-right:0; - width:7em; -} -#form-ugm_settings tr th:first-child, -#form-ugm_settings tr td:first-child { - padding-left:0; -} -#array-ugm_settings-users_exposed_attributes td.widget { - padding-bottom:4px; -} -#array-ugm_settings-users_exposed_attributes td.widget input { - margin-top:4px; -} -#field-ugm_settings-users_form_attrmap label, -#field-ugm_settings-users_listing_columns label, -#field-ugm_settings-users_exposed_attributes label, -#field-ugm_settings-groups_form_attrmap label, -#field-ugm_settings-groups_listing_columns label { - font-size:130%; - text-decoration:underline; - margin-top:12px; +#form-ugm_settings label.form-label { + font-size: 18px; +} +#form-ugm_settings .scrollable-content { + min-width: 400px; } -/* localmanager settings */ -#array-localmanager_settings-rules table td.actions { - vertical-align:top; -} -#array-localmanager_settings-rules th.head_actions, -#array-localmanager_settings-rules td.actions, -#array-localmanager_settings-rules div.array_actions { - width:4em; -} -#array-localmanager_settings-rules div.array_actions { - margin-top:8px; -} -#array-localmanager_settings-rules table.rules_array { - width:100%; -} -#array-localmanager_settings-rules table.rules_array > thead th:first-child { - font-size:130%; - text-decoration:underline; -} -#array-localmanager_settings-rules table.rules_array > tbody > tr { - border-top:#ccc 1px solid; -} -#array-localmanager_settings-rules table.targets_array { - margin-top:0; - width:100%; -} -#array-localmanager_settings-rules div.source_field { - float:left; - width:45%; - padding-right:6px; - padding-top:6px; -} -#array-localmanager_settings-rules div.source_field label { - margin-bottom:7px; -} -#array-localmanager_settings-rules div.targets_field { - float:right; - width:55%; - padding-left:6px; -} -#array-localmanager_settings-rules div.targets_field input[type="text"] { - float:left; - width:90%; -} -#array-localmanager_settings-rules div.targets_field input[type="checkbox"] { - float:left; - position:relative; - top:5px; - margin-left:6px; +#form-localmanager_settings #array-localmanager_settings-rules table td.widget { + display: flex; + flex-wrap: wrap; } diff --git a/src/cone/ugm/browser/static/cone.ugm.js.map b/src/cone/ugm/browser/static/cone.ugm.js.map deleted file mode 100644 index 3843ff1..0000000 --- a/src/cone/ugm/browser/static/cone.ugm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cone.ugm.js","sources":["../../../../../js/src/actions.js","../../../../../js/src/listing.js","../../../../../js/src/localmanager.js","../../../../../js/src/bundle.js"],"sourcesContent":null,"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/cone/ugm/browser/static/cone.ugm.min.css b/src/cone/ugm/browser/static/cone.ugm.min.css new file mode 100644 index 0000000..1594119 --- /dev/null +++ b/src/cone/ugm/browser/static/cone.ugm.min.css @@ -0,0 +1 @@ +.hidden{display:none}div.columns{gap:20px}div.columns div.left_column,div.columns div.right_column{flex:1;flex-basis:500px}div.columns .card .card-header{min-height:55px}div.columns .card .card{border:none;background:none;margin-top:0 !important}div.columns .card .card .card-body{padding:0}a.action{line-height:16px;font-size:16px;text-decoration:none;float:right;margin-top:2px}a.action:hover{text-decoration:none}a.add_item::before,a.add_item_disabled::before{font-family:"bootstrap-icons";content:""}a.add_item,a.add_item:hover{color:lime}a.remove_item,a.remove_item:hover,a.delete_item,a.delete_item:hover{color:red}a.delete_item::before,a.delete_item_disabled::before{font-family:"bootstrap-icons";content:""}a.remove_item::before,a.remove_item_disabled::before{font-family:"bootstrap-icons";content:""}a.add_item_disabled,a.add_item_disable:hover,a.remove_item_disabled,a.remove_item_disable:hover,a.delete_item_disabled,a.delete_item_disable:hover{cursor:default;color:#ccc !important}div.columnlisting div.column_filter{flex-grow:1;flex-shrink:1;flex-basis:150px;max-width:300px}div.columnsorting{flex-shrink:0}@media(max-width: 400px){div.columnsorting{flex-direction:column;width:100%}}div.columnsorting .columnsorticon::before{font-family:"bootstrap-icons";content:""}div.columnsorting .btn.asc .columnsorticon::before{font-family:"bootstrap-icons";content:""}div.columnsorting .btn.desc .columnsorticon::before{font-family:"bootstrap-icons";content:""}div.columnitems.users .sort_col_1{width:100% !important}div.columnitems.users .sort_col_2{display:none !important;width:0 !important}div.columnitems li{cursor:pointer}div.columnitems li.hidden{display:none}div.columnitems div.cols{flex:1}div.columnitems div.cols .sort_col_1{width:30%}div.columnitems div.cols .sort_col_2{width:70%}[data-bs-theme=light] div.columnitems li.selected{background-color:var(--primary-100) !important}[data-bs-theme=dark] div.columnitems li.selected{background-color:var(--primary-100-dark) !important}div.principal_form{position:relative}div.principal_form div.display-form-control{background:none;height:38px;border-radius:3px;border:1px solid #b1c7e5;padding:5px 12px}div.principal_form>.btn>*{vertical-align:middle}#form-groupform .display-text.form-control,#form-userform .display-text.form-control{border:none;box-shadow:none;padding-left:0}#field-userform-active label{display:block;clear:both}#image-preview-userform-portrait{border-radius:3px 3px 3px 3px;box-shadow:0px 0px 4px #666}#input-userform-portrait{margin-top:12px;margin-bottom:6px}#checkbox-groupform-principal_roles-wrapper,#checkbox-userform-principal_roles-wrapper{padding-left:0}#form-ugm_settings .field{padding-left:1rem;padding-right:1rem}#form-ugm_settings .field:not(:last-child){padding-bottom:1rem}#form-ugm_settings label.form-label{font-size:18px}#form-ugm_settings .scrollable-content{min-width:400px}#form-localmanager_settings #array-localmanager_settings-rules table td.widget{display:flex;flex-wrap:wrap} diff --git a/src/cone/ugm/browser/templates/column_listing.pt b/src/cone/ugm/browser/templates/column_listing.pt index b24ba4e..bfa69f4 100644 --- a/src/cone/ugm/browser/templates/column_listing.pt +++ b/src/cone/ugm/browser/templates/column_listing.pt @@ -9,41 +9,43 @@ ajax:target="${context.nodeurl}" ajax:action="${context.ajax_action}:.${context.batchname}sensitiv:replace"> -
+
+
-
- Sorting: -
- - - - -
+ + + -
- -
+
-
- - +
+ +
+ +
+ + +
@@ -51,10 +53,10 @@
    -
  • -
    cols
    @@ -77,8 +79,6 @@
    -
    -
  • diff --git a/src/cone/ugm/browser/templates/columns.pt b/src/cone/ugm/browser/templates/columns.pt index 7d1242f..2bf63e3 100644 --- a/src/cone/ugm/browser/templates/columns.pt +++ b/src/cone/ugm/browser/templates/columns.pt @@ -1,7 +1,7 @@ -
    +
    diff --git a/src/cone/ugm/browser/templates/localmanager_settings.pt b/src/cone/ugm/browser/templates/localmanager_settings.pt index bcec427..9fbbacc 100644 --- a/src/cone/ugm/browser/templates/localmanager_settings.pt +++ b/src/cone/ugm/browser/templates/localmanager_settings.pt @@ -4,7 +4,7 @@ omit-tag="True">
    -

    Title

    +

    Title

    diff --git a/src/cone/ugm/browser/templates/principal_form.pt b/src/cone/ugm/browser/templates/principal_form.pt new file mode 100644 index 0000000..151e7fc --- /dev/null +++ b/src/cone/ugm/browser/templates/principal_form.pt @@ -0,0 +1,27 @@ + + +
    + +
    +
    +
    + + +
    +
    + +
    + +
    + +
    + +
    \ No newline at end of file diff --git a/src/cone/ugm/browser/templates/principal_left_column.pt b/src/cone/ugm/browser/templates/principal_left_column.pt index d074ce7..8c8db52 100644 --- a/src/cone/ugm/browser/templates/principal_left_column.pt +++ b/src/cone/ugm/browser/templates/principal_left_column.pt @@ -4,19 +4,10 @@ i18n:domain="cone.ugm" omit-tag="True"> -
    - -
    - - - - - -
    - +
    +
    + +
    diff --git a/src/cone/ugm/browser/templates/principal_right_column.pt b/src/cone/ugm/browser/templates/principal_right_column.pt index cee5878..f5bbdda 100644 --- a/src/cone/ugm/browser/templates/principal_right_column.pt +++ b/src/cone/ugm/browser/templates/principal_right_column.pt @@ -4,8 +4,14 @@ i18n:domain="cone.ugm" omit-tag="True"> -
    - +
    +
    +
    +
    + +
    + +
    diff --git a/src/cone/ugm/browser/templates/principals_left_column.pt b/src/cone/ugm/browser/templates/principals_left_column.pt index 9b4436a..eb88f76 100644 --- a/src/cone/ugm/browser/templates/principals_left_column.pt +++ b/src/cone/ugm/browser/templates/principals_left_column.pt @@ -4,23 +4,25 @@ i18n:domain="cone.ugm" omit-tag="True"> -
    - -
    - +
    +
    +
    +
    + +
    -
    - - +
    + +
    diff --git a/src/cone/ugm/browser/templates/principals_right_column.pt b/src/cone/ugm/browser/templates/principals_right_column.pt index 41d3a5f..3945cdc 100644 --- a/src/cone/ugm/browser/templates/principals_right_column.pt +++ b/src/cone/ugm/browser/templates/principals_right_column.pt @@ -4,19 +4,19 @@ i18n:domain="cone.ugm" omit-tag="True"> -
    - -
    - - - - +
    +
    + +
    +
    +
    +
    +
    + +
    +
    -
    diff --git a/src/cone/ugm/browser/user.py b/src/cone/ugm/browser/user.py index 1881ceb..58ac74c 100644 --- a/src/cone/ugm/browser/user.py +++ b/src/cone/ugm/browser/user.py @@ -39,11 +39,7 @@ interface=User, permission='view') class UserLeftColumn(Tile): - - @property - def principals_target(self): - query = make_query(pid=self.model.name) - return make_url(self.request, node=self.model.parent, query=query) + pass @tile( @@ -52,7 +48,7 @@ def principals_target(self): interface=User, permission='view') class UserRightColumn(Tile): - pass + title = _('user_groups', default='User Groups') class GroupsListing(ColumnListing): @@ -180,6 +176,8 @@ def ajax_action(self): class UserForm(PrincipalForm): form_name = 'userform' field_factory_registry = user_field + to_principal = _('user_groups', default='User Groups') + to_principals = _('users', default='Users') @property def reserved_attrs(self): @@ -194,7 +192,7 @@ def form_attrmap(self): return general_settings(self.model).attrs.users_form_attrmap -@tile(name='addform', interface=User, permission='add_user') +@tile(name='addform', interface=User, permission='add_user', path='templates/principal_form.pt') @plumbing( ContentAddForm, PrincipalRolesForm, @@ -205,6 +203,8 @@ def form_attrmap(self): class UserAddForm(UserForm, Form): show_heading = False show_contextmenu = False + header_title = _('new_user', default='New User') + principal_id = None def save(self, widget, data): extracted = dict() @@ -252,7 +252,7 @@ def next(self, request): return HTTPFound(location=url) -@tile(name='editform', interface=User, permission='edit_user', strict=False) +@tile(name='editform', interface=User, permission='edit_user', strict=False, path='templates/principal_form.pt') @plumbing( ContentEditForm, PrincipalRolesForm, @@ -262,6 +262,11 @@ def next(self, request): class UserEditForm(UserForm, Form): show_heading = False show_contextmenu = False + header_title = _('user_data', default='User Data') + + @property + def principal_id(self): + return self.model.name def save(self, widget, data): attrs = self.model.attrs diff --git a/src/cone/ugm/browser/users.py b/src/cone/ugm/browser/users.py index 4ca16f6..62a3123 100644 --- a/src/cone/ugm/browser/users.py +++ b/src/cone/ugm/browser/users.py @@ -7,6 +7,7 @@ from cone.ugm.model.users import Users from pyramid.i18n import TranslationStringFactory import logging +from pyramid.i18n import get_localizer logger = logging.getLogger('cone.ugm') @@ -20,6 +21,7 @@ permission='view') class UsersLeftColumn(Tile): add_label = _('add_user', default='Add User') + title = _('users', default='Users') @property def add_target(self): @@ -40,6 +42,8 @@ def can_add(self): interface=Users, permission='view') class UsersRightColumn(Column): + no_principal = _('no_user_selected', default='No User selected.') + header_title = _('user_data', default='User Data') @property def principal_id(self): @@ -47,13 +51,9 @@ def principal_id(self): @property def principal_form(self): + self.request.environ['cone.ugm.column'] = 'right' return self._render(self.model[self.principal_id], 'editform') - @property - def principal_target(self): - return make_url(self.request, node=self.model[self.principal_id]) - - @tile( name='columnlisting', path='templates/column_listing.pt', diff --git a/src/cone/ugm/locale/cone.ugm.pot b/src/cone/ugm/locale/cone.ugm.pot index 86e85d2..5b84414 100644 --- a/src/cone/ugm/locale/cone.ugm.pot +++ b/src/cone/ugm/locale/cone.ugm.pot @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Lingua 4.14.0\n" -#. Default: UGM Settings +#. Default: UGM #: ./src/cone/ugm/settings.py:48 msgid "ugm_settings_node" msgstr "" @@ -31,24 +31,102 @@ msgstr "" msgid "category_ugm" msgstr "" -#. Default: Local Manager Settings +#. Default: Local Manager #: ./src/cone/ugm/settings.py:64 msgid "localmanager_settings_node" msgstr "" -#. Default: Local Manager Settings +#. Default: Manage Local Manager access rules #: ./src/cone/ugm/settings.py:65 msgid "localmanager_settings_node_description" msgstr "" -#. Default: Add Group -#: ./src/cone/ugm/browser/groups.py:22 -msgid "add_group" +#. Default: Groups +#: ./src/cone/ugm/model/groups.py:24 ./src/cone/ugm/model/groups.py:48 +msgid "groups_node" msgstr "" -#. Default: Delete Group -#: ./src/cone/ugm/browser/groups.py:70 -msgid "delete_group" +#. Default: Container for Groups +#: ./src/cone/ugm/model/groups.py:25 ./src/cone/ugm/model/groups.py:49 +msgid "groups_node_description" +msgstr "" + +#. Default: User +#: ./src/cone/ugm/model/user.py:35 ./src/cone/ugm/model/user.py:50 +msgid "user_node" +msgstr "" + +#. Default: User +#: ./src/cone/ugm/model/user.py:36 ./src/cone/ugm/model/user.py:51 +msgid "user_node_description" +msgstr "" + +#. Default: Group +#: ./src/cone/ugm/model/group.py:17 ./src/cone/ugm/model/group.py:30 +msgid "group_node" +msgstr "" + +#. Default: Group +#: ./src/cone/ugm/model/group.py:18 ./src/cone/ugm/model/group.py:31 +msgid "group_node_description" +msgstr "" + +#. Default: Users +#: ./src/cone/ugm/model/users.py:24 ./src/cone/ugm/model/users.py:48 +msgid "users_node" +msgstr "" + +#. Default: Container for Users +#: ./src/cone/ugm/model/users.py:25 ./src/cone/ugm/model/users.py:49 +msgid "users_node_description" +msgstr "" + +#. Default: Value is required if portrit support is enabled +#: ./src/cone/ugm/browser/settings.py:33 +msgid "required_if_users_portrait" +msgstr "" + +#. Default: Duplicate access rule +#: ./src/cone/ugm/browser/settings.py:122 +msgid "localmanager_duplicate_rule_error" +msgstr "" + +#. Default: Target GID equates source GID +#: ./src/cone/ugm/browser/settings.py:134 +msgid "localmanager_target_is_source_error" +msgstr "" + +#. Default: No ${field} defined +#: ./src/cone/ugm/browser/principal.py:24 +msgid "no_field_value_defined" +msgstr "" + +#. Default: User ${principal_id} already exists. +#: ./src/cone/ugm/browser/principal.py:175 +msgid "user_already_exists" +msgstr "" + +#. Default: Group ${principal_id} already exists. +#: ./src/cone/ugm/browser/principal.py:187 +msgid "group_already_exists" +msgstr "" + +#. Default: User login ${login} not unique. +#: ./src/cone/ugm/browser/principal.py:265 +msgid "user_login_not_unique" +msgstr "" + +#. Default: Save +#. +#: ./src/cone/ugm/browser/principal.py:403 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:226 +#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:65 +msgid "save" +msgstr "" + +#. Default: Cancel +#: ./src/cone/ugm/browser/principal.py:413 +msgid "cancel" msgstr "" #. Default: auto incremented @@ -56,6 +134,16 @@ msgstr "" msgid "auto_incremented" msgstr "" +#. Default: Portrait +#: ./src/cone/ugm/browser/portrait.py:80 ./src/cone/ugm/browser/portrait.py:82 +msgid "portrait" +msgstr "" + +#. Default: Roles +#: ./src/cone/ugm/browser/roles.py:45 +msgid "roles" +msgstr "" + #. Default: Change Password #: ./src/cone/ugm/browser/password.py:32 ./src/cone/ugm/browser/password.py:145 msgid "change_password" @@ -103,166 +191,175 @@ msgstr "" msgid "password_changed" msgstr "" -#. Default: filter listing -#: ./src/cone/ugm/browser/listing.py:107 -msgid "filter_listing" +#. Default: Deleted user '${uid}' from database. +#: ./src/cone/ugm/browser/actions.py:82 +msgid "delete_user_from_database" msgstr "" -#. Default: Delete Principal -#: ./src/cone/ugm/browser/listing.py:298 -msgid "delete_principal" +#. Default: Added user '${uid}' to group '${gid}'. +#: ./src/cone/ugm/browser/actions.py:121 ./src/cone/ugm/browser/actions.py:290 +msgid "added_user_to_group" msgstr "" -#. Default: Value is required if portrit support is enabled -#: ./src/cone/ugm/browser/settings.py:33 -msgid "required_if_users_portrait" +#: ./src/cone/ugm/browser/actions.py:137 +msgid "lm_add_target_gid_not_allowed" msgstr "" -#. Default: Duplicate access rule -#: ./src/cone/ugm/browser/settings.py:122 -msgid "localmanager_duplicate_rule_error" +#. Default: Removed user '${uid}' from group '${gid}'. +#: ./src/cone/ugm/browser/actions.py:182 ./src/cone/ugm/browser/actions.py:351 +msgid "removed_user_from_group" msgstr "" -#. Default: Target GID equates source GID -#: ./src/cone/ugm/browser/settings.py:134 -msgid "localmanager_target_is_source_error" +#: ./src/cone/ugm/browser/actions.py:197 +msgid "lm_remove_target_gid_not_allowed" msgstr "" -#. Default: Add user to selected group -#: ./src/cone/ugm/browser/group.py:108 ./src/cone/ugm/browser/user.py:108 -msgid "add_user_to_selected_group" +#: ./src/cone/ugm/browser/actions.py:208 ./src/cone/ugm/browser/actions.py:378 +msgid "lm_remove_target_gid_is_default" msgstr "" -#. Default: Remove user from selected group -#: ./src/cone/ugm/browser/group.py:121 ./src/cone/ugm/browser/user.py:121 -msgid "remove_user_from_selected_group" +#. Default: Deleted group from database +#: ./src/cone/ugm/browser/actions.py:258 +msgid "deleted_group" msgstr "" -#. Default: Group ID -#: ./src/cone/ugm/browser/group.py:187 -msgid "group_id" +#: ./src/cone/ugm/browser/actions.py:306 +msgid "lm_add_target_uid_not_allowed" msgstr "" -#. Default: No ${field} defined -#: ./src/cone/ugm/browser/principal.py:23 -msgid "no_field_value_defined" +#: ./src/cone/ugm/browser/actions.py:366 +msgid "lm_remove_target_uid_not_allowed" msgstr "" -#. Default: User ${principal_id} already exists. -#: ./src/cone/ugm/browser/principal.py:174 -msgid "user_already_exists" +#. Default: Active +#: ./src/cone/ugm/browser/expires.py:35 +msgid "active" msgstr "" -#. Default: Group ${principal_id} already exists. -#: ./src/cone/ugm/browser/principal.py:186 -msgid "group_already_exists" +#. Default: Add Group +#: ./src/cone/ugm/browser/groups.py:22 +msgid "add_group" msgstr "" -#. Default: User login ${login} not unique. -#: ./src/cone/ugm/browser/principal.py:264 -msgid "user_login_not_unique" +#. Default: Groups +#: ./src/cone/ugm/browser/groups.py:23 ./src/cone/ugm/browser/group.py:39 +#: ./src/cone/ugm/browser/group.py:186 +msgid "groups" msgstr "" -#. Default: Save -#. -#: ./src/cone/ugm/browser/principal.py:387 -#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:65 -#: ./src/cone/ugm/browser/forms/general_settings.yaml:191 -msgid "save" +#. Default: No Group selected. +#: ./src/cone/ugm/browser/groups.py:44 +msgid "no_group_selected" msgstr "" -#. Default: Cancel -#: ./src/cone/ugm/browser/principal.py:397 -msgid "cancel" +#. Default: Group Data +#: ./src/cone/ugm/browser/groups.py:45 ./src/cone/ugm/browser/group.py:38 +#: ./src/cone/ugm/browser/group.py:242 +msgid "group_data" msgstr "" -#. Default: Roles -#: ./src/cone/ugm/browser/roles.py:45 -msgid "roles" +#. Default: Delete Group +#: ./src/cone/ugm/browser/groups.py:69 +msgid "delete_group" msgstr "" -#. Default: Portrait -#: ./src/cone/ugm/browser/portrait.py:80 ./src/cone/ugm/browser/portrait.py:82 -msgid "portrait" +#. Default: User Groups +#: ./src/cone/ugm/browser/user.py:51 ./src/cone/ugm/browser/user.py:179 +msgid "user_groups" msgstr "" -#. Default: Active -#: ./src/cone/ugm/browser/expires.py:35 -msgid "active" +#. Default: Add user to selected group +#: ./src/cone/ugm/browser/user.py:104 ./src/cone/ugm/browser/group.py:110 +msgid "add_user_to_selected_group" msgstr "" -#. Default: Add User -#: ./src/cone/ugm/browser/users.py:22 -msgid "add_user" +#. Default: Remove user from selected group +#: ./src/cone/ugm/browser/user.py:117 ./src/cone/ugm/browser/group.py:123 +msgid "remove_user_from_selected_group" msgstr "" -#. Default: Delete User -#: ./src/cone/ugm/browser/users.py:70 -msgid "delete_user" +#. Default: Users +#: ./src/cone/ugm/browser/user.py:180 ./src/cone/ugm/browser/users.py:24 +msgid "users" msgstr "" #. Default: User ID -#: ./src/cone/ugm/browser/user.py:187 +#: ./src/cone/ugm/browser/user.py:185 msgid "user_id" msgstr "" #. Default: Login name -#: ./src/cone/ugm/browser/user.py:188 +#: ./src/cone/ugm/browser/user.py:186 msgid "login_name" msgstr "" #. Default: Password -#: ./src/cone/ugm/browser/user.py:189 +#: ./src/cone/ugm/browser/user.py:187 msgid "password" msgstr "" -#. Default: Deleted user '${uid}' from database. -#: ./src/cone/ugm/browser/actions.py:82 -msgid "delete_user_from_database" +#. Default: New User +#: ./src/cone/ugm/browser/user.py:206 +msgid "new_user" msgstr "" -#. Default: Added user '${uid}' to group '${gid}'. -#: ./src/cone/ugm/browser/actions.py:121 ./src/cone/ugm/browser/actions.py:290 -msgid "added_user_to_group" +#. Default: User Data +#: ./src/cone/ugm/browser/user.py:265 ./src/cone/ugm/browser/users.py:46 +msgid "user_data" msgstr "" -#: ./src/cone/ugm/browser/actions.py:137 -msgid "lm_add_target_gid_not_allowed" +#. Default: Group Users +#: ./src/cone/ugm/browser/group.py:53 +msgid "group_users" msgstr "" -#. Default: Removed user '${uid}' from group '${gid}'. -#: ./src/cone/ugm/browser/actions.py:182 ./src/cone/ugm/browser/actions.py:351 -msgid "removed_user_from_group" +#. Default: Group Members +#: ./src/cone/ugm/browser/group.py:185 +msgid "group_members" msgstr "" -#: ./src/cone/ugm/browser/actions.py:197 -msgid "lm_remove_target_gid_not_allowed" +#. Default: Group ID +#: ./src/cone/ugm/browser/group.py:191 +msgid "group_id" msgstr "" -#: ./src/cone/ugm/browser/actions.py:208 ./src/cone/ugm/browser/actions.py:378 -msgid "lm_remove_target_gid_is_default" +#. Default: New Group +#: ./src/cone/ugm/browser/group.py:204 +msgid "new_group" msgstr "" -#. Default: Deleted group from database -#: ./src/cone/ugm/browser/actions.py:258 -msgid "deleted_group" +#. Default: Add User +#: ./src/cone/ugm/browser/users.py:23 +msgid "add_user" msgstr "" -#: ./src/cone/ugm/browser/actions.py:306 -msgid "lm_add_target_uid_not_allowed" +#. Default: No User selected. +#: ./src/cone/ugm/browser/users.py:45 +msgid "no_user_selected" msgstr "" -#: ./src/cone/ugm/browser/actions.py:366 -msgid "lm_remove_target_uid_not_allowed" +#. Default: Delete User +#: ./src/cone/ugm/browser/users.py:70 +msgid "delete_user" +msgstr "" + +#. Default: filter listing +#: ./src/cone/ugm/browser/listing.py:107 +msgid "filter_listing" +msgstr "" + +#. Default: Delete Principal +#: ./src/cone/ugm/browser/listing.py:298 +msgid "delete_principal" msgstr "" #. Default: Sorting -#: ./src/cone/ugm/browser/templates/column_listing.pt:15 +#: ./src/cone/ugm/browser/templates/column_listing.pt:16 msgid "sort_by" msgstr "" #. Default: List all -#: ./src/cone/ugm/browser/templates/column_listing.pt:41 +#: ./src/cone/ugm/browser/templates/column_listing.pt:42 msgid "list_all" msgstr "" @@ -271,327 +368,287 @@ msgstr "" msgid "localmanager_disabled_warning" msgstr "" -#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:11 -msgid "localmanager_rules" -msgstr "" - -#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:25 -msgid "localmanager_rule_source" -msgstr "" - -#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:26 -msgid "localmanager_source_empty" -msgstr "" - -#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:34 -msgid "localmanager_rule_target" -msgstr "" - -#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:35 -msgid "localmanager_no_targets_for_source" -msgstr "" - -#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:47 -msgid "localmanager_target_empty" -msgstr "" - #. Default: User settings -#: ./src/cone/ugm/browser/forms/general_settings.yaml:11 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:18 msgid "users_heading" msgstr "" #. Default: User Accounts expires? -#: ./src/cone/ugm/browser/forms/general_settings.yaml:16 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:23 msgid "users_account_expiration" msgstr "" #. Default: Flag whether to consider user expiration -#: ./src/cone/ugm/browser/forms/general_settings.yaml:17 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:24 msgid "users_account_expiration_help" msgstr "" #. Default: Autoincrement user ID -#: ./src/cone/ugm/browser/forms/general_settings.yaml:22 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:31 msgid "user_id_autoincrement" msgstr "" #. Default: Flag whether to autoincrement user IDs at user creation time. This #. feature only works for systems using numeric user IDs -#: ./src/cone/ugm/browser/forms/general_settings.yaml:25 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:34 msgid "user_id_autoincrement_help" msgstr "" #. Default: Autoincrement user ID prefix -#: ./src/cone/ugm/browser/forms/general_settings.yaml:30 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:41 msgid "user_id_autoincrement_prefix" msgstr "" #. Default: Prefix for autogenerated user ID's -#: ./src/cone/ugm/browser/forms/general_settings.yaml:31 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:42 msgid "user_id_autoincrement_prefix_help" msgstr "" #. Default: Autoincrement initial user number -#: ./src/cone/ugm/browser/forms/general_settings.yaml:39 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:50 msgid "user_id_autoincrement_start" msgstr "" #. Default: User number to start from -#: ./src/cone/ugm/browser/forms/general_settings.yaml:40 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:51 msgid "user_id_autoincrement_start_help" msgstr "" #. Default: Portrait Support -#: ./src/cone/ugm/browser/forms/general_settings.yaml:46 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:57 msgid "users_portrait" msgstr "" #. Default: Flag whether users can have a portrait -#: ./src/cone/ugm/browser/forms/general_settings.yaml:47 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:58 msgid "users_portrait_help" msgstr "" #. Default: Attribute containing portrait image -#: ./src/cone/ugm/browser/forms/general_settings.yaml:52 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:65 msgid "users_portrait_attr" msgstr "" #. Default: Attribute name containing portrait image -#: ./src/cone/ugm/browser/forms/general_settings.yaml:53 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:66 msgid "users_portrait_attr_help" msgstr "" #. Default: Portrait mimetype -#: ./src/cone/ugm/browser/forms/general_settings.yaml:62 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:75 msgid "users_portrait_accept" msgstr "" #. Default: Accepted Image mimetype for portrait property -#: ./src/cone/ugm/browser/forms/general_settings.yaml:63 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:76 msgid "users_portrait_accept_help" msgstr "" #. Default: Portrait width -#: ./src/cone/ugm/browser/forms/general_settings.yaml:72 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:85 msgid "users_portrait_width" msgstr "" #. Default: Width in pixel portrait gets scaled to -#: ./src/cone/ugm/browser/forms/general_settings.yaml:73 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:86 msgid "users_portrait_width_help" msgstr "" #. Default: Portrait height -#: ./src/cone/ugm/browser/forms/general_settings.yaml:84 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:97 msgid "users_portrait_height" msgstr "" #. Default: Height in pixel portrait gets scaled to -#: ./src/cone/ugm/browser/forms/general_settings.yaml:85 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:98 msgid "users_portrait_height_help" msgstr "" #. Default: Local User Management -#: ./src/cone/ugm/browser/forms/general_settings.yaml:96 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:109 msgid "users_local_management_enabled" msgstr "" #. Default: Enable local User Management -#: ./src/cone/ugm/browser/forms/general_settings.yaml:97 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:110 msgid "users_local_management_enabled_help" msgstr "" #. Default: Login name attribute -#: ./src/cone/ugm/browser/forms/general_settings.yaml:102 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:117 msgid "users_login_name_attr" msgstr "" #. Default: Attribute used for optional login name -#: ./src/cone/ugm/browser/forms/general_settings.yaml:103 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:118 msgid "users_login_name_attr_help" msgstr "" #. Default: Exposed user attributes -#: ./src/cone/ugm/browser/forms/general_settings.yaml:108 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:123 msgid "users_exposed_attributes_label" msgstr "" #. Default: Click '+' to add attributes -#: ./src/cone/ugm/browser/forms/general_settings.yaml:109 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:124 msgid "users_exposed_attributes_array" msgstr "" #. Default: Attributes which can be set via remote API -#: ./src/cone/ugm/browser/forms/general_settings.yaml:110 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:125 msgid "users_exposed_attributes_help" msgstr "" #. Default: Attribute -#: ./src/cone/ugm/browser/forms/general_settings.yaml:116 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:131 msgid "users_exposed_attributes_attribute" msgstr "" #. Default: No attribute given -#: ./src/cone/ugm/browser/forms/general_settings.yaml:117 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:132 msgid "users_exposed_attributes_attribute_required" msgstr "" #. Default: User form attributes -#: ./src/cone/ugm/browser/forms/general_settings.yaml:122 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:137 msgid "users_form_attrmap" msgstr "" #. Default: Attributes exposed in user form -#: ./src/cone/ugm/browser/forms/general_settings.yaml:123 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:138 msgid "users_form_attrmap_help" msgstr "" #. Default: Attribute name -#: ./src/cone/ugm/browser/forms/general_settings.yaml:124 -#: ./src/cone/ugm/browser/forms/general_settings.yaml:133 -#: ./src/cone/ugm/browser/forms/general_settings.yaml:154 -#: ./src/cone/ugm/browser/forms/general_settings.yaml:163 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:139 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:149 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:178 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:188 msgid "principal_attr_name" msgstr "" #. Default: Form label -#: ./src/cone/ugm/browser/forms/general_settings.yaml:125 -#: ./src/cone/ugm/browser/forms/general_settings.yaml:155 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:140 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:179 msgid "form_label" msgstr "" #. Default: Column configuration for user listings -#: ./src/cone/ugm/browser/forms/general_settings.yaml:130 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:146 msgid "users_listing_columns" msgstr "" #. Default: Attributes shown in user listing -#: ./src/cone/ugm/browser/forms/general_settings.yaml:131 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:147 msgid "users_listing_columns_help" msgstr "" #. Default: User listing columns must not be empty -#: ./src/cone/ugm/browser/forms/general_settings.yaml:132 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:148 msgid "users_listing_columns_required" msgstr "" #. Default: Display name -#: ./src/cone/ugm/browser/forms/general_settings.yaml:134 -#: ./src/cone/ugm/browser/forms/general_settings.yaml:164 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:150 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:189 msgid "display_name" msgstr "" #. Default: Users listing default column -#: ./src/cone/ugm/browser/forms/general_settings.yaml:139 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:156 msgid "users_listing_default_column" msgstr "" #. Default: Default sort column in user listing -#: ./src/cone/ugm/browser/forms/general_settings.yaml:140 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:157 msgid "users_listing_default_column_help" msgstr "" #. Default: Default sort column in user listing is required -#: ./src/cone/ugm/browser/forms/general_settings.yaml:142 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:159 msgid "users_listing_default_column_required" msgstr "" #. Default: Group Settings -#: ./src/cone/ugm/browser/forms/general_settings.yaml:147 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:170 msgid "groups_heading" msgstr "" #. Default: Group form attributes -#: ./src/cone/ugm/browser/forms/general_settings.yaml:152 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:176 msgid "groups_form_attrmap" msgstr "" #. Default: Attributes exposed in group form -#: ./src/cone/ugm/browser/forms/general_settings.yaml:153 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:177 msgid "groups_form_attrmap_help" msgstr "" #. Default: Column configuration for groups listings -#: ./src/cone/ugm/browser/forms/general_settings.yaml:160 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:185 msgid "groups_listing_columns" msgstr "" #. Default: Attributes shown in group listing -#: ./src/cone/ugm/browser/forms/general_settings.yaml:161 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:186 msgid "groups_listing_columns_help" msgstr "" #. Default: Group listing columns must not be empty -#: ./src/cone/ugm/browser/forms/general_settings.yaml:162 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:187 msgid "groups_listing_columns_required" msgstr "" #. Default: Groups listing default column -#: ./src/cone/ugm/browser/forms/general_settings.yaml:169 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:195 msgid "groups_listing_default_column" msgstr "" #. Default: Default sort column in group listing -#: ./src/cone/ugm/browser/forms/general_settings.yaml:170 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:196 msgid "groups_listing_default_column_help" msgstr "" #. Default: Default sort column in groups listing is required -#: ./src/cone/ugm/browser/forms/general_settings.yaml:172 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:198 msgid "groups_listing_default_column_required" msgstr "" #. Default: Roles settings -#: ./src/cone/ugm/browser/forms/general_settings.yaml:177 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:209 msgid "roles_heading" msgstr "" #. Default: Principal roles -#: ./src/cone/ugm/browser/forms/general_settings.yaml:182 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:215 msgid "roles_principal_roles_enabled" msgstr "" #. Default: Enable roles on principals -#: ./src/cone/ugm/browser/forms/general_settings.yaml:183 +#: ./src/cone/ugm/browser/forms/general_settings.yaml:216 msgid "roles_principal_roles_enabled_help" msgstr "" -#. Default: Groups -#: ./src/cone/ugm/model/groups.py:24 ./src/cone/ugm/model/groups.py:47 -msgid "groups_node" -msgstr "" - -#. Default: Container for Groups -#: ./src/cone/ugm/model/groups.py:25 ./src/cone/ugm/model/groups.py:48 -msgid "groups_node_description" -msgstr "" - -#. Default: Group -#: ./src/cone/ugm/model/group.py:17 ./src/cone/ugm/model/group.py:30 -msgid "group_node" +#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:11 +msgid "localmanager_rules" msgstr "" -#. Default: Group -#: ./src/cone/ugm/model/group.py:18 ./src/cone/ugm/model/group.py:31 -msgid "group_node_description" +#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:25 +msgid "localmanager_rule_source" msgstr "" -#. Default: Users -#: ./src/cone/ugm/model/users.py:24 ./src/cone/ugm/model/users.py:47 -msgid "users_node" +#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:26 +msgid "localmanager_source_empty" msgstr "" -#. Default: Container for Users -#: ./src/cone/ugm/model/users.py:25 ./src/cone/ugm/model/users.py:48 -msgid "users_node_description" +#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:34 +msgid "localmanager_rule_target" msgstr "" -#. Default: User -#: ./src/cone/ugm/model/user.py:35 ./src/cone/ugm/model/user.py:50 -msgid "user_node" +#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:35 +msgid "localmanager_no_targets_for_source" msgstr "" -#. Default: User -#: ./src/cone/ugm/model/user.py:36 ./src/cone/ugm/model/user.py:51 -msgid "user_node_description" +#: ./src/cone/ugm/browser/forms/localmanager_settings.yaml:47 +msgid "localmanager_target_empty" msgstr "" diff --git a/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.mo b/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.mo index 296b843..cd087e2 100644 Binary files a/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.mo and b/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.mo differ diff --git a/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.po b/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.po index 96c7db5..b2f46d0 100644 --- a/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.po +++ b/src/cone/ugm/locale/de/LC_MESSAGES/cone.ugm.po @@ -18,10 +18,10 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "Generated-By: Babel 0.9.4\n" -#. Default: UGM Settings +#. Default: UGM #: src/cone/ugm/settings.py:48 msgid "ugm_settings_node" -msgstr "UGM Einstellungen" +msgstr "UGM" #. Default: General user and group management settings #: src/cone/ugm/settings.py:49 @@ -33,86 +33,55 @@ msgstr "Allgemeine Benutzer- und Gruppeneinstellungen" msgid "category_ugm" msgstr "Benutzer- und Gruppenverwaltung" -#. Default: Local Manager Settings +#. Default: Local Manager #: src/cone/ugm/settings.py:64 msgid "localmanager_settings_node" msgstr "Benutzeradmin" -#. Default: Local Manager Settings +#. Default: Manage Local Manager access rules #: src/cone/ugm/settings.py:65 msgid "localmanager_settings_node_description" -msgstr "Benutzeradmin" - -#. Default: Add Group -#: src/cone/ugm/browser/groups.py:22 -msgid "add_group" -msgstr "Gruppe hinzufügen" +msgstr "Benutzeradmin Zugriffsrechte verwalten" -#. Default: Delete Group -#: src/cone/ugm/browser/groups.py:70 -msgid "delete_group" -msgstr "Gruppe löschen" - -#. Default: auto incremented -#: src/cone/ugm/browser/autoincrement.py:66 -msgid "auto_incremented" -msgstr "automatisch" - -#. Default: Change Password -#: src/cone/ugm/browser/password.py:32 src/cone/ugm/browser/password.py:145 -msgid "change_password" -msgstr "Passwort ändern" - -#. Default: Change Password: ${user} -#: src/cone/ugm/browser/password.py:81 -msgid "change_user_password" -msgstr "Passwort ändern: ${user}" - -#. Default: No password given -#: src/cone/ugm/browser/password.py:101 src/cone/ugm/browser/password.py:116 -#: src/cone/ugm/browser/password.py:126 -msgid "no_password_given" -msgstr "Kein Passwort angegeben" - -#. Default: Current Password -#: src/cone/ugm/browser/password.py:102 -msgid "current_password" -msgstr "Aktuelles Passwort" +#. Default: Groups +#: src/cone/ugm/model/groups.py:24 src/cone/ugm/model/groups.py:48 +msgid "groups_node" +msgstr "Gruppen" -#. Default: New Password -#: src/cone/ugm/browser/password.py:117 -msgid "new_password" -msgstr "Neues Passwort" +#. Default: Container for Groups +#: src/cone/ugm/model/groups.py:25 src/cone/ugm/model/groups.py:49 +msgid "groups_node_description" +msgstr "Gruppencontainer" -#. Default: Confirm Password -#: src/cone/ugm/browser/password.py:127 -msgid "confirm_password" -msgstr "Passwort wiederholen" +#. Default: User +#: src/cone/ugm/model/user.py:35 src/cone/ugm/model/user.py:50 +msgid "user_node" +msgstr "Benutzer" -#. Default: Wrong Password -#: src/cone/ugm/browser/password.py:156 -msgid "wrong_password" -msgstr "Falsches Passwort" +#. Default: User +#: src/cone/ugm/model/user.py:36 src/cone/ugm/model/user.py:51 +msgid "user_node_description" +msgstr "Benutzer" -#. Default: Password Mismatch -#: src/cone/ugm/browser/password.py:167 -msgid "password_missmatch" -msgstr "Passwörter stimmen nicht überein" +#. Default: Group +#: src/cone/ugm/model/group.py:17 src/cone/ugm/model/group.py:30 +msgid "group_node" +msgstr "Gruppe" -#. Default: Password change successful -#: src/cone/ugm/browser/password.py:187 -msgid "password_changed" -msgstr "Passwort wurde geändert" +#. Default: Group +#: src/cone/ugm/model/group.py:18 src/cone/ugm/model/group.py:31 +msgid "group_node_description" +msgstr "Gruppe" -#. Default: filter listing -#: src/cone/ugm/browser/listing.py:107 -msgid "filter_listing" -msgstr "Liste filtern" +#. Default: Users +#: src/cone/ugm/model/users.py:24 src/cone/ugm/model/users.py:48 +msgid "users_node" +msgstr "Benutzer" -#. Default: Delete Principal -#: src/cone/ugm/browser/listing.py:298 -msgid "delete_principal" -msgstr "Benutzer/Gruppe löschen" +#. Default: Container for Users +#: src/cone/ugm/model/users.py:25 src/cone/ugm/model/users.py:49 +msgid "users_node_description" +msgstr "Benutzercontainer" #. Default: Value is required if portrit support is enabled #: src/cone/ugm/browser/settings.py:33 @@ -130,93 +99,99 @@ msgstr "Doppelte Zugriffsregel definiert" msgid "localmanager_target_is_source_error" msgstr "Ziel GID entspricht Administrations GID" -#. Default: Add user to selected group -#: src/cone/ugm/browser/group.py:108 src/cone/ugm/browser/user.py:108 -msgid "add_user_to_selected_group" -msgstr "Benutzer zu Gruppe hinzufügen" - -#. Default: Remove user from selected group -#: src/cone/ugm/browser/group.py:121 src/cone/ugm/browser/user.py:121 -msgid "remove_user_from_selected_group" -msgstr "Benutzer aus Gruppe entfernen" - -#. Default: Group ID -#: src/cone/ugm/browser/group.py:187 -msgid "group_id" -msgstr "Gruppen ID" - #. Default: No ${field} defined -#: src/cone/ugm/browser/principal.py:23 +#: src/cone/ugm/browser/principal.py:24 msgid "no_field_value_defined" msgstr "Kein Wert für ${field} angegeben" #. Default: User ${principal_id} already exists. -#: src/cone/ugm/browser/principal.py:174 +#: src/cone/ugm/browser/principal.py:175 msgid "user_already_exists" msgstr "Benutzer ${uid} existiert bereits." #. Default: Group ${principal_id} already exists. -#: src/cone/ugm/browser/principal.py:186 +#: src/cone/ugm/browser/principal.py:187 msgid "group_already_exists" msgstr "Gruppe ${gid} existiert bereits." #. Default: User login ${login} not unique. -#: src/cone/ugm/browser/principal.py:264 +#: src/cone/ugm/browser/principal.py:265 msgid "user_login_not_unique" msgstr "Login name ${login} nicht eindeutig" #. Default: Save #. -#: src/cone/ugm/browser/principal.py:387 +#: src/cone/ugm/browser/principal.py:403 +#: src/cone/ugm/browser/forms/general_settings.yaml:226 #: src/cone/ugm/browser/forms/localmanager_settings.yaml:65 -#: src/cone/ugm/browser/forms/general_settings.yaml:191 msgid "save" msgstr "Speichern" #. Default: Cancel -#: src/cone/ugm/browser/principal.py:397 +#: src/cone/ugm/browser/principal.py:413 msgid "cancel" msgstr "Abbrechen" -#. Default: Roles -#: src/cone/ugm/browser/roles.py:45 -msgid "roles" -msgstr "Rollen" +#. Default: auto incremented +#: src/cone/ugm/browser/autoincrement.py:66 +msgid "auto_incremented" +msgstr "Automatische Benutzer ID's" #. Default: Portrait #: src/cone/ugm/browser/portrait.py:80 src/cone/ugm/browser/portrait.py:82 msgid "portrait" msgstr "Portrait" -#. Default: Active -#: src/cone/ugm/browser/expires.py:35 -msgid "active" -msgstr "Aktiv" +#. Default: Roles +#: src/cone/ugm/browser/roles.py:45 +msgid "roles" +msgstr "Rollen" -#. Default: Add User -#: src/cone/ugm/browser/users.py:22 -msgid "add_user" -msgstr "Benutzer hinzufügen" +#. Default: Change Password +#: src/cone/ugm/browser/password.py:32 src/cone/ugm/browser/password.py:145 +msgid "change_password" +msgstr "Passwort ändern" -#. Default: Delete User -#: src/cone/ugm/browser/users.py:70 -msgid "delete_user" -msgstr "Benutzer löschen" +#. Default: Change Password: ${user} +#: src/cone/ugm/browser/password.py:81 +msgid "change_user_password" +msgstr "Passwort ändern: ${user}" -#. Default: User ID -#: src/cone/ugm/browser/user.py:187 -msgid "user_id" -msgstr "Benutzer ID" +#. Default: No password given +#: src/cone/ugm/browser/password.py:101 src/cone/ugm/browser/password.py:116 +#: src/cone/ugm/browser/password.py:126 +msgid "no_password_given" +msgstr "Kein Passwort angegeben" -#. Default: Login name -#: src/cone/ugm/browser/user.py:188 -msgid "login_name" -msgstr "Login Name" +#. Default: Current Password +#: src/cone/ugm/browser/password.py:102 +msgid "current_password" +msgstr "Aktuelles Passwort" -#. Default: Password -#: src/cone/ugm/browser/user.py:189 -msgid "password" -msgstr "Passwort" +#. Default: New Password +#: src/cone/ugm/browser/password.py:117 +msgid "new_password" +msgstr "Neues Passwort" + +#. Default: Confirm Password +#: src/cone/ugm/browser/password.py:127 +msgid "confirm_password" +msgstr "Passwort wiederholen" + +#. Default: Wrong Password +#: src/cone/ugm/browser/password.py:156 +msgid "wrong_password" +msgstr "Falsches Passwort" + +#. Default: Password Mismatch +#: src/cone/ugm/browser/password.py:167 +msgid "password_missmatch" +msgstr "Passwörter stimmen nicht überein" + +#. Default: Password change successful +#: src/cone/ugm/browser/password.py:187 +msgid "password_changed" +msgstr "Passwort wurde geändert" #. Default: Deleted user '${uid}' from database. #: src/cone/ugm/browser/actions.py:82 @@ -268,349 +243,431 @@ msgstr "" "Entfernen von Benutzer '${uid}' aus Gruppe '${gid}' fehlgeschlagen. " "Administration Benutzer nicht erlaubt." +#. Default: Active +#: src/cone/ugm/browser/expires.py:35 +msgid "active" +msgstr "Aktiv" + +#. Default: Add Group +#: src/cone/ugm/browser/groups.py:22 +msgid "add_group" +msgstr "Gruppe hinzufügen" + +#. Default: Groups +#: src/cone/ugm/browser/groups.py:23 src/cone/ugm/browser/group.py:39 +#: src/cone/ugm/browser/group.py:186 +msgid "groups" +msgstr "Gruppen" + +#. Default: No Group selected. +#: src/cone/ugm/browser/groups.py:44 +msgid "no_group_selected" +msgstr "Keine Gruppe ausgewählt." + +#. Default: Group Data +#: src/cone/ugm/browser/groups.py:45 src/cone/ugm/browser/group.py:38 +#: src/cone/ugm/browser/group.py:242 +msgid "group_data" +msgstr "Gruppendaten" + +#. Default: Delete Group +#: src/cone/ugm/browser/groups.py:69 +msgid "delete_group" +msgstr "Gruppe löschen" + +#. Default: User Groups +#: src/cone/ugm/browser/user.py:51 src/cone/ugm/browser/user.py:179 +msgid "user_groups" +msgstr "Benutzergruppen" + +#. Default: Add user to selected group +#: src/cone/ugm/browser/user.py:104 src/cone/ugm/browser/group.py:110 +msgid "add_user_to_selected_group" +msgstr "Benutzer zu Gruppe hinzufügen" + +#. Default: Remove user from selected group +#: src/cone/ugm/browser/user.py:117 src/cone/ugm/browser/group.py:123 +msgid "remove_user_from_selected_group" +msgstr "Benutzer aus Gruppe entfernen" + +#. Default: Users +#: src/cone/ugm/browser/user.py:180 src/cone/ugm/browser/users.py:24 +msgid "users" +msgstr "Benutzer" + +#. Default: User ID +#: src/cone/ugm/browser/user.py:185 +msgid "user_id" +msgstr "Benutzer ID" + +#. Default: Login name +#: src/cone/ugm/browser/user.py:186 +msgid "login_name" +msgstr "Login Name" + +#. Default: Password +#: src/cone/ugm/browser/user.py:187 +msgid "password" +msgstr "Passwort" + +#. Default: New User +#: src/cone/ugm/browser/user.py:206 +msgid "new_user" +msgstr "Neuer Benutzer" + +#. Default: User Data +#: src/cone/ugm/browser/user.py:265 src/cone/ugm/browser/users.py:46 +msgid "user_data" +msgstr "Benutzerdaten" + +#. Default: Group Users +#: src/cone/ugm/browser/group.py:53 +msgid "group_users" +msgstr "Gruppenmitglieder" + +#. Default: Group Members +#: src/cone/ugm/browser/group.py:185 +msgid "group_members" +msgstr "Gruppenmitglieder" + +#. Default: Group ID +#: src/cone/ugm/browser/group.py:191 +msgid "group_id" +msgstr "Gruppen ID" + +#. Default: New Group +#: src/cone/ugm/browser/group.py:204 +msgid "new_group" +msgstr "Neue Gruppe" + +#. Default: Add User +#: src/cone/ugm/browser/users.py:23 +msgid "add_user" +msgstr "Benutzer hinzufügen" + +#. Default: No User selected. +#: src/cone/ugm/browser/users.py:45 +msgid "no_user_selected" +msgstr "Kein Benutzer ausgewählt." + +#. Default: Delete User +#: src/cone/ugm/browser/users.py:70 +msgid "delete_user" +msgstr "Benutzer löschen" + +#. Default: filter listing +#: src/cone/ugm/browser/listing.py:107 +msgid "filter_listing" +msgstr "Liste filtern" + +#. Default: Delete Principal +#: src/cone/ugm/browser/listing.py:298 +msgid "delete_principal" +msgstr "Benutzer/Gruppe löschen" + #. Default: Sorting -#: src/cone/ugm/browser/templates/column_listing.pt:15 +#: src/cone/ugm/browser/templates/column_listing.pt:16 msgid "sort_by" msgstr "Sortierung" #. Default: List all -#: src/cone/ugm/browser/templates/column_listing.pt:41 +#: src/cone/ugm/browser/templates/column_listing.pt:42 msgid "list_all" msgstr "Zeige alle" #. Default: Local User Management is not enabled. #: src/cone/ugm/browser/templates/localmanager_settings.pt:11 msgid "localmanager_disabled_warning" -msgstr "Lokale Benutzeradministration ist deaktiviert" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:11 -msgid "localmanager_rules" -msgstr "Zugriffsregeln" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:25 -msgid "localmanager_rule_source" -msgstr "Administrations GID" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:26 -msgid "localmanager_source_empty" -msgstr "Keine Administrations GID angegeben" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:34 -msgid "localmanager_rule_target" -msgstr "Ziel GID [Standard]" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:35 -msgid "localmanager_no_targets_for_source" -msgstr "Keine Ziel GID's für Administrations GID angegeben" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:47 -msgid "localmanager_target_empty" -msgstr "Keine Ziel GID angegeben" +msgstr "Achtung: Rollenunterstützung ist deaktiviert." #. Default: User settings -#: src/cone/ugm/browser/forms/general_settings.yaml:11 +#: src/cone/ugm/browser/forms/general_settings.yaml:18 msgid "users_heading" msgstr "Benutzereinstellungen" #. Default: User Accounts expires? -#: src/cone/ugm/browser/forms/general_settings.yaml:16 +#: src/cone/ugm/browser/forms/general_settings.yaml:23 msgid "users_account_expiration" msgstr "Benutzer läuft ab?" #. Default: Flag whether to consider user expiration -#: src/cone/ugm/browser/forms/general_settings.yaml:17 +#: src/cone/ugm/browser/forms/general_settings.yaml:24 msgid "users_account_expiration_help" msgstr "Benutzerkonten können ein Ablaufdatum haben" #. Default: Autoincrement user ID -#: src/cone/ugm/browser/forms/general_settings.yaml:22 +#: src/cone/ugm/browser/forms/general_settings.yaml:31 msgid "user_id_autoincrement" msgstr "Automatische Benutzer ID's" #. Default: Flag whether to autoincrement user IDs at user creation time. This #. feature only works for systems using numeric user IDs -#: src/cone/ugm/browser/forms/general_settings.yaml:25 +#: src/cone/ugm/browser/forms/general_settings.yaml:34 msgid "user_id_autoincrement_help" msgstr "" "Mit dieser Option werden neue Benutzer ID's automatisch hochgezählt." "Funktioniert nur mit numerischen Benutzer ID's" #. Default: Autoincrement user ID prefix -#: src/cone/ugm/browser/forms/general_settings.yaml:30 +#: src/cone/ugm/browser/forms/general_settings.yaml:41 msgid "user_id_autoincrement_prefix" msgstr "Präfix für automatische Benutzer ID's" #. Default: Prefix for autogenerated user ID's -#: src/cone/ugm/browser/forms/general_settings.yaml:31 +#: src/cone/ugm/browser/forms/general_settings.yaml:42 msgid "user_id_autoincrement_prefix_help" msgstr "Wird als Präfix der neuen Benutzer ID vorangestellt" #. Default: Autoincrement initial user number -#: src/cone/ugm/browser/forms/general_settings.yaml:39 +#: src/cone/ugm/browser/forms/general_settings.yaml:50 msgid "user_id_autoincrement_start" msgstr "Erste automatische Benutzer ID" #. Default: User number to start from -#: src/cone/ugm/browser/forms/general_settings.yaml:40 +#: src/cone/ugm/browser/forms/general_settings.yaml:51 msgid "user_id_autoincrement_start_help" msgstr "" "Automatische Benutzer ID mit der gestartet wird wenn noch kein Benutzer " "angelegt wurde." #. Default: Portrait Support -#: src/cone/ugm/browser/forms/general_settings.yaml:46 +#: src/cone/ugm/browser/forms/general_settings.yaml:57 msgid "users_portrait" msgstr "Portrait Unterstützung" #. Default: Flag whether users can have a portrait -#: src/cone/ugm/browser/forms/general_settings.yaml:47 +#: src/cone/ugm/browser/forms/general_settings.yaml:58 msgid "users_portrait_help" msgstr "Definiert, ob bei Benutzern das Portrait aktiviert ist" #. Default: Attribute containing portrait image -#: src/cone/ugm/browser/forms/general_settings.yaml:52 +#: src/cone/ugm/browser/forms/general_settings.yaml:65 msgid "users_portrait_attr" msgstr "Attribut für Portrait" #. Default: Attribute name containing portrait image -#: src/cone/ugm/browser/forms/general_settings.yaml:53 +#: src/cone/ugm/browser/forms/general_settings.yaml:66 msgid "users_portrait_attr_help" msgstr "Attribut in dem das Portrait Bild verspeichert ist" #. Default: Portrait mimetype -#: src/cone/ugm/browser/forms/general_settings.yaml:62 +#: src/cone/ugm/browser/forms/general_settings.yaml:75 msgid "users_portrait_accept" msgstr "Portrait Mimetype" #. Default: Accepted Image mimetype for portrait property -#: src/cone/ugm/browser/forms/general_settings.yaml:63 +#: src/cone/ugm/browser/forms/general_settings.yaml:76 msgid "users_portrait_accept_help" msgstr "Mimetype für Portrait Bild" #. Default: Portrait width -#: src/cone/ugm/browser/forms/general_settings.yaml:72 +#: src/cone/ugm/browser/forms/general_settings.yaml:85 msgid "users_portrait_width" msgstr "Portrait Breite" #. Default: Width in pixel portrait gets scaled to -#: src/cone/ugm/browser/forms/general_settings.yaml:73 +#: src/cone/ugm/browser/forms/general_settings.yaml:86 msgid "users_portrait_width_help" msgstr "" "Portrait Breite in Pixel. Bild wird auf diese Breite skaliert bzw " "zugeschnitten" #. Default: Portrait height -#: src/cone/ugm/browser/forms/general_settings.yaml:84 +#: src/cone/ugm/browser/forms/general_settings.yaml:97 msgid "users_portrait_height" msgstr "Portrait Höhe" #. Default: Height in pixel portrait gets scaled to -#: src/cone/ugm/browser/forms/general_settings.yaml:85 +#: src/cone/ugm/browser/forms/general_settings.yaml:98 msgid "users_portrait_height_help" msgstr "" "Portrait Höhe in Pixel. Bild wird auf diese Höhe skaliert bzw zugeschnitten" #. Default: Local User Management -#: src/cone/ugm/browser/forms/general_settings.yaml:96 +#: src/cone/ugm/browser/forms/general_settings.yaml:109 msgid "users_local_management_enabled" msgstr "Benutzeradmin" #. Default: Enable local User Management -#: src/cone/ugm/browser/forms/general_settings.yaml:97 +#: src/cone/ugm/browser/forms/general_settings.yaml:110 msgid "users_local_management_enabled_help" msgstr "Lokale Benutzeradministration aktivieren" #. Default: Login name attribute -#: src/cone/ugm/browser/forms/general_settings.yaml:102 +#: src/cone/ugm/browser/forms/general_settings.yaml:117 msgid "users_login_name_attr" msgstr "Attribut für Login name" #. Default: Attribute used for optional login name -#: src/cone/ugm/browser/forms/general_settings.yaml:103 +#: src/cone/ugm/browser/forms/general_settings.yaml:118 msgid "users_login_name_attr_help" msgstr "Attribute in dem der alternative Login Name gespeichert ist" #. Default: Exposed user attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:108 +#: src/cone/ugm/browser/forms/general_settings.yaml:123 msgid "users_exposed_attributes_label" msgstr "Attribute für API" #. Default: Click '+' to add attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:109 +#: src/cone/ugm/browser/forms/general_settings.yaml:124 msgid "users_exposed_attributes_array" msgstr "+ klicken um Attribut hinzuzufügen" #. Default: Attributes which can be set via remote API -#: src/cone/ugm/browser/forms/general_settings.yaml:110 +#: src/cone/ugm/browser/forms/general_settings.yaml:125 msgid "users_exposed_attributes_help" msgstr "Benutzer Attribute die über die Remote API gesetzt werden können" #. Default: Attribute -#: src/cone/ugm/browser/forms/general_settings.yaml:116 +#: src/cone/ugm/browser/forms/general_settings.yaml:131 msgid "users_exposed_attributes_attribute" msgstr "Attribut" #. Default: No attribute given -#: src/cone/ugm/browser/forms/general_settings.yaml:117 +#: src/cone/ugm/browser/forms/general_settings.yaml:132 msgid "users_exposed_attributes_attribute_required" msgstr "Kein Attribut angegeben" #. Default: User form attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:122 +#: src/cone/ugm/browser/forms/general_settings.yaml:137 msgid "users_form_attrmap" msgstr "Attribute Benutzerformular" #. Default: Attributes exposed in user form -#: src/cone/ugm/browser/forms/general_settings.yaml:123 +#: src/cone/ugm/browser/forms/general_settings.yaml:138 msgid "users_form_attrmap_help" msgstr "Attribute welche im Benutzerformular angezeigt werden" #. Default: Attribute name -#: src/cone/ugm/browser/forms/general_settings.yaml:124 -#: src/cone/ugm/browser/forms/general_settings.yaml:133 -#: src/cone/ugm/browser/forms/general_settings.yaml:154 -#: src/cone/ugm/browser/forms/general_settings.yaml:163 +#: src/cone/ugm/browser/forms/general_settings.yaml:139 +#: src/cone/ugm/browser/forms/general_settings.yaml:149 +#: src/cone/ugm/browser/forms/general_settings.yaml:178 +#: src/cone/ugm/browser/forms/general_settings.yaml:188 msgid "principal_attr_name" msgstr "Attribut Name" #. Default: Form label -#: src/cone/ugm/browser/forms/general_settings.yaml:125 -#: src/cone/ugm/browser/forms/general_settings.yaml:155 +#: src/cone/ugm/browser/forms/general_settings.yaml:140 +#: src/cone/ugm/browser/forms/general_settings.yaml:179 msgid "form_label" msgstr "Bezeichnung Formular" #. Default: Column configuration for user listings -#: src/cone/ugm/browser/forms/general_settings.yaml:130 +#: src/cone/ugm/browser/forms/general_settings.yaml:146 msgid "users_listing_columns" msgstr "Benutzerliste angezeigte Spalten" #. Default: Attributes shown in user listing -#: src/cone/ugm/browser/forms/general_settings.yaml:131 +#: src/cone/ugm/browser/forms/general_settings.yaml:147 msgid "users_listing_columns_help" msgstr "Attribute die in den Spalten der Benutzerliste angezeigt werden" #. Default: User listing columns must not be empty -#: src/cone/ugm/browser/forms/general_settings.yaml:132 +#: src/cone/ugm/browser/forms/general_settings.yaml:148 msgid "users_listing_columns_required" msgstr "Es müssen Spalten für die Benutzerliste angegeben werden" #. Default: Display name -#: src/cone/ugm/browser/forms/general_settings.yaml:134 -#: src/cone/ugm/browser/forms/general_settings.yaml:164 +#: src/cone/ugm/browser/forms/general_settings.yaml:150 +#: src/cone/ugm/browser/forms/general_settings.yaml:189 msgid "display_name" msgstr "Anzeigename" #. Default: Users listing default column -#: src/cone/ugm/browser/forms/general_settings.yaml:139 +#: src/cone/ugm/browser/forms/general_settings.yaml:156 msgid "users_listing_default_column" msgstr "Benutzerliste Standard Spalte (Sortierung)" #. Default: Default sort column in user listing -#: src/cone/ugm/browser/forms/general_settings.yaml:140 +#: src/cone/ugm/browser/forms/general_settings.yaml:157 msgid "users_listing_default_column_help" msgstr "Standardsortierung Benutzerliste" #. Default: Default sort column in user listing is required -#: src/cone/ugm/browser/forms/general_settings.yaml:142 +#: src/cone/ugm/browser/forms/general_settings.yaml:159 msgid "users_listing_default_column_required" msgstr "Standard Spalte für Benutzerliste ist erforderlich" #. Default: Group Settings -#: src/cone/ugm/browser/forms/general_settings.yaml:147 +#: src/cone/ugm/browser/forms/general_settings.yaml:170 msgid "groups_heading" msgstr "Gruppeneinstellungen" #. Default: Group form attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:152 +#: src/cone/ugm/browser/forms/general_settings.yaml:176 msgid "groups_form_attrmap" msgstr "Attribute Gruppenformular" #. Default: Attributes exposed in group form -#: src/cone/ugm/browser/forms/general_settings.yaml:153 +#: src/cone/ugm/browser/forms/general_settings.yaml:177 msgid "groups_form_attrmap_help" msgstr "Attribute Gruppenformular" #. Default: Column configuration for groups listings -#: src/cone/ugm/browser/forms/general_settings.yaml:160 +#: src/cone/ugm/browser/forms/general_settings.yaml:185 msgid "groups_listing_columns" msgstr "Gruppenliste angezeigte Spalten" #. Default: Attributes shown in group listing -#: src/cone/ugm/browser/forms/general_settings.yaml:161 +#: src/cone/ugm/browser/forms/general_settings.yaml:186 msgid "groups_listing_columns_help" msgstr "Attribute die in den Spalten der Gruppenliste angezeigt werden" #. Default: Group listing columns must not be empty -#: src/cone/ugm/browser/forms/general_settings.yaml:162 +#: src/cone/ugm/browser/forms/general_settings.yaml:187 msgid "groups_listing_columns_required" msgstr "Es müssen Spalten für die Gruppenliste angegeben werden" #. Default: Groups listing default column -#: src/cone/ugm/browser/forms/general_settings.yaml:169 +#: src/cone/ugm/browser/forms/general_settings.yaml:195 msgid "groups_listing_default_column" msgstr "Gruppenliste Standard Spalte (Sortierung)" #. Default: Default sort column in group listing -#: src/cone/ugm/browser/forms/general_settings.yaml:170 +#: src/cone/ugm/browser/forms/general_settings.yaml:196 msgid "groups_listing_default_column_help" msgstr "Gruppenliste Standard Spalte (Sortierung)" #. Default: Default sort column in groups listing is required -#: src/cone/ugm/browser/forms/general_settings.yaml:172 +#: src/cone/ugm/browser/forms/general_settings.yaml:198 msgid "groups_listing_default_column_required" msgstr "Standard Spalte für Gruppenliste ist erforderlich" #. Default: Roles settings -#: src/cone/ugm/browser/forms/general_settings.yaml:177 +#: src/cone/ugm/browser/forms/general_settings.yaml:209 msgid "roles_heading" msgstr "Rolleneinstellungen" #. Default: Principal roles -#: src/cone/ugm/browser/forms/general_settings.yaml:182 +#: src/cone/ugm/browser/forms/general_settings.yaml:215 msgid "roles_principal_roles_enabled" msgstr "Rollen Unterstützung aktiviert" #. Default: Enable roles on principals -#: src/cone/ugm/browser/forms/general_settings.yaml:183 +#: src/cone/ugm/browser/forms/general_settings.yaml:216 msgid "roles_principal_roles_enabled_help" msgstr "Rollen auf Benutzer und Gruppen aktivieren" -#. Default: Groups -#: src/cone/ugm/model/groups.py:24 src/cone/ugm/model/groups.py:47 -msgid "groups_node" -msgstr "Gruppen" - -#. Default: Container for Groups -#: src/cone/ugm/model/groups.py:25 src/cone/ugm/model/groups.py:48 -msgid "groups_node_description" -msgstr "Gruppencontainer" - -#. Default: Group -#: src/cone/ugm/model/group.py:17 src/cone/ugm/model/group.py:30 -msgid "group_node" -msgstr "Gruppe" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:11 +msgid "localmanager_rules" +msgstr "Zugriffsregeln" -#. Default: Group -#: src/cone/ugm/model/group.py:18 src/cone/ugm/model/group.py:31 -msgid "group_node_description" -msgstr "Gruppe" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:25 +msgid "localmanager_rule_source" +msgstr "Administrations GID" -#. Default: Users -#: src/cone/ugm/model/users.py:24 src/cone/ugm/model/users.py:47 -msgid "users_node" -msgstr "Benutzer" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:26 +msgid "localmanager_source_empty" +msgstr "Keine Administrations GID angegeben" -#. Default: Container for Users -#: src/cone/ugm/model/users.py:25 src/cone/ugm/model/users.py:48 -msgid "users_node_description" -msgstr "Benutzercontainer" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:34 +msgid "localmanager_rule_target" +msgstr "Ziel GID [Standard]" -#. Default: User -#: src/cone/ugm/model/user.py:35 src/cone/ugm/model/user.py:50 -msgid "user_node" -msgstr "Benutzer" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:35 +msgid "localmanager_no_targets_for_source" +msgstr "Keine Ziel GID's für Administrations GID angegeben" -#. Default: User -#: src/cone/ugm/model/user.py:36 src/cone/ugm/model/user.py:51 -msgid "user_node_description" -msgstr "Benutzer" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:47 +msgid "localmanager_target_empty" +msgstr "Keine Ziel GID angegeben" diff --git a/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.mo b/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.mo index f6013ef..856876c 100644 Binary files a/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.mo and b/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.mo differ diff --git a/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.po b/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.po index 156e305..52d4818 100644 --- a/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.po +++ b/src/cone/ugm/locale/en/LC_MESSAGES/cone.ugm.po @@ -18,10 +18,10 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "Generated-By: Babel 0.9.4\n" -#. Default: UGM Settings +#. Default: UGM #: src/cone/ugm/settings.py:48 msgid "ugm_settings_node" -msgstr "UGM Settings" +msgstr "UGM" #. Default: General user and group management settings #: src/cone/ugm/settings.py:49 @@ -33,86 +33,55 @@ msgstr "General user and group management settings" msgid "category_ugm" msgstr "User and Group Management" -#. Default: Local Manager Settings +#. Default: Local Manager #: src/cone/ugm/settings.py:64 msgid "localmanager_settings_node" -msgstr "Local Manager Settings" +msgstr "Local Manager" -#. Default: Local Manager Settings +#. Default: Manage Local Manager access rules #: src/cone/ugm/settings.py:65 msgid "localmanager_settings_node_description" -msgstr "Local Manager Settings" +msgstr "Manage Local Manager access rules" -#. Default: Add Group -#: src/cone/ugm/browser/groups.py:22 -msgid "add_group" -msgstr "Add Group" - -#. Default: Delete Group -#: src/cone/ugm/browser/groups.py:70 -msgid "delete_group" -msgstr "Delete Group" - -#. Default: auto incremented -#: src/cone/ugm/browser/autoincrement.py:66 -msgid "auto_incremented" -msgstr "auto incremented" - -#. Default: Change Password -#: src/cone/ugm/browser/password.py:32 src/cone/ugm/browser/password.py:145 -msgid "change_password" -msgstr "Change Password" - -#. Default: Change Password: ${user} -#: src/cone/ugm/browser/password.py:81 -msgid "change_user_password" -msgstr "Change Password: ${user}" - -#. Default: No password given -#: src/cone/ugm/browser/password.py:101 src/cone/ugm/browser/password.py:116 -#: src/cone/ugm/browser/password.py:126 -msgid "no_password_given" -msgstr "No password given" - -#. Default: Current Password -#: src/cone/ugm/browser/password.py:102 -msgid "current_password" -msgstr "Current Password" +#. Default: Groups +#: src/cone/ugm/model/groups.py:24 src/cone/ugm/model/groups.py:48 +msgid "groups_node" +msgstr "Groups" -#. Default: New Password -#: src/cone/ugm/browser/password.py:117 -msgid "new_password" -msgstr "New Password" +#. Default: Container for Groups +#: src/cone/ugm/model/groups.py:25 src/cone/ugm/model/groups.py:49 +msgid "groups_node_description" +msgstr "Container for Groups" -#. Default: Confirm Password -#: src/cone/ugm/browser/password.py:127 -msgid "confirm_password" -msgstr "Confirm Password" +#. Default: User +#: src/cone/ugm/model/user.py:35 src/cone/ugm/model/user.py:50 +msgid "user_node" +msgstr "User" -#. Default: Wrong Password -#: src/cone/ugm/browser/password.py:156 -msgid "wrong_password" -msgstr "Wrong Password" +#. Default: User +#: src/cone/ugm/model/user.py:36 src/cone/ugm/model/user.py:51 +msgid "user_node_description" +msgstr "User" -#. Default: Password Mismatch -#: src/cone/ugm/browser/password.py:167 -msgid "password_missmatch" -msgstr "Password Mismatch" +#. Default: Group +#: src/cone/ugm/model/group.py:17 src/cone/ugm/model/group.py:30 +msgid "group_node" +msgstr "Group" -#. Default: Password change successful -#: src/cone/ugm/browser/password.py:187 -msgid "password_changed" -msgstr "Password change successful" +#. Default: Group +#: src/cone/ugm/model/group.py:18 src/cone/ugm/model/group.py:31 +msgid "group_node_description" +msgstr "Group" -#. Default: filter listing -#: src/cone/ugm/browser/listing.py:107 -msgid "filter_listing" -msgstr "filter listing" +#. Default: Users +#: src/cone/ugm/model/users.py:24 src/cone/ugm/model/users.py:48 +msgid "users_node" +msgstr "Users" -#. Default: Delete Principal -#: src/cone/ugm/browser/listing.py:298 -msgid "delete_principal" -msgstr "Delete Principal" +#. Default: Container for Users +#: src/cone/ugm/model/users.py:25 src/cone/ugm/model/users.py:49 +msgid "users_node_description" +msgstr "Container for Users" #. Default: Value is required if portrit support is enabled #: src/cone/ugm/browser/settings.py:33 @@ -129,93 +98,99 @@ msgstr "Duplicate access rule" msgid "localmanager_target_is_source_error" msgstr "Target GID equates source GID" -#. Default: Add user to selected group -#: src/cone/ugm/browser/group.py:108 src/cone/ugm/browser/user.py:108 -msgid "add_user_to_selected_group" -msgstr "Add user to selected group" - -#. Default: Remove user from selected group -#: src/cone/ugm/browser/group.py:121 src/cone/ugm/browser/user.py:121 -msgid "remove_user_from_selected_group" -msgstr "Remove user from selected group" - -#. Default: Group ID -#: src/cone/ugm/browser/group.py:187 -msgid "group_id" -msgstr "Group ID" - #. Default: No ${field} defined -#: src/cone/ugm/browser/principal.py:23 +#: src/cone/ugm/browser/principal.py:24 msgid "no_field_value_defined" msgstr "No ${field} defined" #. Default: User ${principal_id} already exists. -#: src/cone/ugm/browser/principal.py:174 +#: src/cone/ugm/browser/principal.py:175 msgid "user_already_exists" msgstr "User ${principal_id} already exists." #. Default: Group ${principal_id} already exists. -#: src/cone/ugm/browser/principal.py:186 +#: src/cone/ugm/browser/principal.py:187 msgid "group_already_exists" msgstr "Group ${principal_id} already exists." #. Default: User login ${login} not unique. -#: src/cone/ugm/browser/principal.py:264 +#: src/cone/ugm/browser/principal.py:265 msgid "user_login_not_unique" msgstr "User login ${login} not unique." #. Default: Save #. -#: src/cone/ugm/browser/principal.py:387 +#: src/cone/ugm/browser/principal.py:403 +#: src/cone/ugm/browser/forms/general_settings.yaml:226 #: src/cone/ugm/browser/forms/localmanager_settings.yaml:65 -#: src/cone/ugm/browser/forms/general_settings.yaml:191 msgid "save" msgstr "Save" #. Default: Cancel -#: src/cone/ugm/browser/principal.py:397 +#: src/cone/ugm/browser/principal.py:413 msgid "cancel" msgstr "Cancel" -#. Default: Roles -#: src/cone/ugm/browser/roles.py:45 -msgid "roles" -msgstr "Roles" +#. Default: auto incremented +#: src/cone/ugm/browser/autoincrement.py:66 +msgid "auto_incremented" +msgstr "Autoincrement user ID" #. Default: Portrait #: src/cone/ugm/browser/portrait.py:80 src/cone/ugm/browser/portrait.py:82 msgid "portrait" msgstr "Portrait" -#. Default: Active -#: src/cone/ugm/browser/expires.py:35 -msgid "active" -msgstr "Active" +#. Default: Roles +#: src/cone/ugm/browser/roles.py:45 +msgid "roles" +msgstr "Roles" -#. Default: Add User -#: src/cone/ugm/browser/users.py:22 -msgid "add_user" -msgstr "Add User" +#. Default: Change Password +#: src/cone/ugm/browser/password.py:32 src/cone/ugm/browser/password.py:145 +msgid "change_password" +msgstr "Change Password" -#. Default: Delete User -#: src/cone/ugm/browser/users.py:70 -msgid "delete_user" -msgstr "Delete User" +#. Default: Change Password: ${user} +#: src/cone/ugm/browser/password.py:81 +msgid "change_user_password" +msgstr "Change Password: ${user}" -#. Default: User ID -#: src/cone/ugm/browser/user.py:187 -msgid "user_id" -msgstr "User ID" +#. Default: No password given +#: src/cone/ugm/browser/password.py:101 src/cone/ugm/browser/password.py:116 +#: src/cone/ugm/browser/password.py:126 +msgid "no_password_given" +msgstr "No password given" -#. Default: Login name -#: src/cone/ugm/browser/user.py:188 -msgid "login_name" -msgstr "Login name" +#. Default: Current Password +#: src/cone/ugm/browser/password.py:102 +msgid "current_password" +msgstr "Current Password" -#. Default: Password -#: src/cone/ugm/browser/user.py:189 -msgid "password" -msgstr "Password" +#. Default: New Password +#: src/cone/ugm/browser/password.py:117 +msgid "new_password" +msgstr "New Password" + +#. Default: Confirm Password +#: src/cone/ugm/browser/password.py:127 +msgid "confirm_password" +msgstr "Confirm Password" + +#. Default: Wrong Password +#: src/cone/ugm/browser/password.py:156 +msgid "wrong_password" +msgstr "Wrong Password" + +#. Default: Password Mismatch +#: src/cone/ugm/browser/password.py:167 +msgid "password_missmatch" +msgstr "Password Mismatch" + +#. Default: Password change successful +#: src/cone/ugm/browser/password.py:187 +msgid "password_changed" +msgstr "Password change successful" #. Default: Deleted user '${uid}' from database. #: src/cone/ugm/browser/actions.py:82 @@ -267,13 +242,135 @@ msgstr "" "Failed removing user '${uid}' from group '${gid}'. Manage membership denied " "for user." +#. Default: Active +#: src/cone/ugm/browser/expires.py:35 +msgid "active" +msgstr "Active" + +#. Default: Add Group +#: src/cone/ugm/browser/groups.py:22 +msgid "add_group" +msgstr "Add Group" + +#. Default: Groups +#: src/cone/ugm/browser/groups.py:23 src/cone/ugm/browser/group.py:39 +#: src/cone/ugm/browser/group.py:186 +msgid "groups" +msgstr "Groups" + +#. Default: No Group selected. +#: src/cone/ugm/browser/groups.py:44 +msgid "no_group_selected" +msgstr "No Group selected." + +#. Default: Group Data +#: src/cone/ugm/browser/groups.py:45 src/cone/ugm/browser/group.py:38 +#: src/cone/ugm/browser/group.py:242 +msgid "group_data" +msgstr "Group Data" + +#. Default: Delete Group +#: src/cone/ugm/browser/groups.py:69 +msgid "delete_group" +msgstr "Delete Group" + +#. Default: User Groups +#: src/cone/ugm/browser/user.py:51 src/cone/ugm/browser/user.py:179 +msgid "user_groups" +msgstr "User Groups" + +#. Default: Add user to selected group +#: src/cone/ugm/browser/user.py:104 src/cone/ugm/browser/group.py:110 +msgid "add_user_to_selected_group" +msgstr "Add user to selected group" + +#. Default: Remove user from selected group +#: src/cone/ugm/browser/user.py:117 src/cone/ugm/browser/group.py:123 +msgid "remove_user_from_selected_group" +msgstr "Remove user from selected group" + +#. Default: Users +#: src/cone/ugm/browser/user.py:180 src/cone/ugm/browser/users.py:24 +msgid "users" +msgstr "Users" + +#. Default: User ID +#: src/cone/ugm/browser/user.py:185 +msgid "user_id" +msgstr "User ID" + +#. Default: Login name +#: src/cone/ugm/browser/user.py:186 +msgid "login_name" +msgstr "Login name" + +#. Default: Password +#: src/cone/ugm/browser/user.py:187 +msgid "password" +msgstr "Password" + +#. Default: New User +#: src/cone/ugm/browser/user.py:206 +msgid "new_user" +msgstr "New User" + +#. Default: User Data +#: src/cone/ugm/browser/user.py:265 src/cone/ugm/browser/users.py:46 +msgid "user_data" +msgstr "User Data" + +#. Default: Group Users +#: src/cone/ugm/browser/group.py:53 +msgid "group_users" +msgstr "Group Users" + +#. Default: Group Members +#: src/cone/ugm/browser/group.py:185 +msgid "group_members" +msgstr "Group Members" + +#. Default: Group ID +#: src/cone/ugm/browser/group.py:191 +msgid "group_id" +msgstr "Group ID" + +#. Default: New Group +#: src/cone/ugm/browser/group.py:204 +msgid "new_group" +msgstr "New Group" + +#. Default: Add User +#: src/cone/ugm/browser/users.py:23 +msgid "add_user" +msgstr "Add User" + +#. Default: No User selected. +#: src/cone/ugm/browser/users.py:45 +msgid "no_user_selected" +msgstr "No User selected." + +#. Default: Delete User +#: src/cone/ugm/browser/users.py:70 +msgid "delete_user" +msgstr "Delete User" + +#. Default: filter listing +#: src/cone/ugm/browser/listing.py:107 +msgid "filter_listing" +msgstr "filter listing" + +#. Default: Delete Principal +#: src/cone/ugm/browser/listing.py:298 +msgid "delete_principal" +msgstr "Delete Principal" + #. Default: Sorting -#: src/cone/ugm/browser/templates/column_listing.pt:15 +#: src/cone/ugm/browser/templates/column_listing.pt:16 msgid "sort_by" msgstr "Sorting" #. Default: List all -#: src/cone/ugm/browser/templates/column_listing.pt:41 +#: src/cone/ugm/browser/templates/column_listing.pt:42 msgid "list_all" msgstr "List all" @@ -282,329 +379,289 @@ msgstr "List all" msgid "localmanager_disabled_warning" msgstr "Local User Management is not enabled." -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:11 -msgid "localmanager_rules" -msgstr "Access rules" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:25 -msgid "localmanager_rule_source" -msgstr "Source GID" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:26 -msgid "localmanager_source_empty" -msgstr "No source GID defined" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:34 -msgid "localmanager_rule_target" -msgstr "Target GID [default]" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:35 -msgid "localmanager_no_targets_for_source" -msgstr "No target GID's defined for source GID" - -#: src/cone/ugm/browser/forms/localmanager_settings.yaml:47 -msgid "localmanager_target_empty" -msgstr "No target GID defined" - #. Default: User settings -#: src/cone/ugm/browser/forms/general_settings.yaml:11 +#: src/cone/ugm/browser/forms/general_settings.yaml:18 msgid "users_heading" msgstr "Users settings" #. Default: User Accounts expires? -#: src/cone/ugm/browser/forms/general_settings.yaml:16 +#: src/cone/ugm/browser/forms/general_settings.yaml:23 msgid "users_account_expiration" msgstr "User Accounts expires?" #. Default: Flag whether to consider user expiration -#: src/cone/ugm/browser/forms/general_settings.yaml:17 +#: src/cone/ugm/browser/forms/general_settings.yaml:24 msgid "users_account_expiration_help" msgstr "Flag whether to consider user expiration" #. Default: Autoincrement user ID -#: src/cone/ugm/browser/forms/general_settings.yaml:22 +#: src/cone/ugm/browser/forms/general_settings.yaml:31 msgid "user_id_autoincrement" msgstr "Autoincrement user ID" #. Default: Flag whether to autoincrement user IDs at user creation time. This #. feature only works for systems using numeric user IDs -#: src/cone/ugm/browser/forms/general_settings.yaml:25 +#: src/cone/ugm/browser/forms/general_settings.yaml:34 msgid "user_id_autoincrement_help" msgstr "" "Flag whether to autoincrement user IDs at user creation time. This feature " "only works for systems using numeric user IDs" #. Default: Autoincrement user ID prefix -#: src/cone/ugm/browser/forms/general_settings.yaml:30 +#: src/cone/ugm/browser/forms/general_settings.yaml:41 msgid "user_id_autoincrement_prefix" msgstr "Autoincrement user ID prefix" #. Default: Prefix for autogenerated user ID's -#: src/cone/ugm/browser/forms/general_settings.yaml:31 +#: src/cone/ugm/browser/forms/general_settings.yaml:42 msgid "user_id_autoincrement_prefix_help" msgstr "Prefix for autogenerated user ID's" #. Default: Autoincrement initial user number -#: src/cone/ugm/browser/forms/general_settings.yaml:39 +#: src/cone/ugm/browser/forms/general_settings.yaml:50 msgid "user_id_autoincrement_start" msgstr "Autoincrement initial user number" #. Default: User number to start from -#: src/cone/ugm/browser/forms/general_settings.yaml:40 +#: src/cone/ugm/browser/forms/general_settings.yaml:51 msgid "user_id_autoincrement_start_help" msgstr "User number to start from" #. Default: Portrait Support -#: src/cone/ugm/browser/forms/general_settings.yaml:46 +#: src/cone/ugm/browser/forms/general_settings.yaml:57 msgid "users_portrait" msgstr "Portrait Support" #. Default: Flag whether users can have a portrait -#: src/cone/ugm/browser/forms/general_settings.yaml:47 +#: src/cone/ugm/browser/forms/general_settings.yaml:58 msgid "users_portrait_help" msgstr "Flag whether users can have a portrait" #. Default: Attribute containing portrait image -#: src/cone/ugm/browser/forms/general_settings.yaml:52 +#: src/cone/ugm/browser/forms/general_settings.yaml:65 msgid "users_portrait_attr" msgstr "Attribute containing portrait image" #. Default: Attribute name containing portrait image -#: src/cone/ugm/browser/forms/general_settings.yaml:53 +#: src/cone/ugm/browser/forms/general_settings.yaml:66 msgid "users_portrait_attr_help" msgstr "Attribute name containing portrait image" #. Default: Portrait mimetype -#: src/cone/ugm/browser/forms/general_settings.yaml:62 +#: src/cone/ugm/browser/forms/general_settings.yaml:75 msgid "users_portrait_accept" msgstr "Portrait mimetype" #. Default: Accepted Image mimetype for portrait property -#: src/cone/ugm/browser/forms/general_settings.yaml:63 +#: src/cone/ugm/browser/forms/general_settings.yaml:76 msgid "users_portrait_accept_help" msgstr "Accepted Image mimetype for portrait property" #. Default: Portrait width -#: src/cone/ugm/browser/forms/general_settings.yaml:72 +#: src/cone/ugm/browser/forms/general_settings.yaml:85 msgid "users_portrait_width" msgstr "Portrait width" #. Default: Width in pixel portrait gets scaled to -#: src/cone/ugm/browser/forms/general_settings.yaml:73 +#: src/cone/ugm/browser/forms/general_settings.yaml:86 msgid "users_portrait_width_help" msgstr "Width in pixel portrait gets scaled to" #. Default: Portrait height -#: src/cone/ugm/browser/forms/general_settings.yaml:84 +#: src/cone/ugm/browser/forms/general_settings.yaml:97 msgid "users_portrait_height" msgstr "Portrait height" #. Default: Height in pixel portrait gets scaled to -#: src/cone/ugm/browser/forms/general_settings.yaml:85 +#: src/cone/ugm/browser/forms/general_settings.yaml:98 msgid "users_portrait_height_help" msgstr "Height in pixel portrait gets scaled to" #. Default: Local User Management -#: src/cone/ugm/browser/forms/general_settings.yaml:96 +#: src/cone/ugm/browser/forms/general_settings.yaml:109 msgid "users_local_management_enabled" msgstr "Local User Management" #. Default: Enable local User Management -#: src/cone/ugm/browser/forms/general_settings.yaml:97 +#: src/cone/ugm/browser/forms/general_settings.yaml:110 msgid "users_local_management_enabled_help" msgstr "Enable local User Management" #. Default: Login name attribute -#: src/cone/ugm/browser/forms/general_settings.yaml:102 +#: src/cone/ugm/browser/forms/general_settings.yaml:117 msgid "users_login_name_attr" msgstr "Login name attribute" #. Default: Attribute used for optional login name -#: src/cone/ugm/browser/forms/general_settings.yaml:103 +#: src/cone/ugm/browser/forms/general_settings.yaml:118 msgid "users_login_name_attr_help" msgstr "Attribute used for optional login name" #. Default: Exposed user attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:108 +#: src/cone/ugm/browser/forms/general_settings.yaml:123 msgid "users_exposed_attributes_label" msgstr "Exposed user attributes" #. Default: Click '+' to add attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:109 +#: src/cone/ugm/browser/forms/general_settings.yaml:124 msgid "users_exposed_attributes_array" msgstr "Click '+' to add attributes" #. Default: Attributes which can be set via remote API -#: src/cone/ugm/browser/forms/general_settings.yaml:110 +#: src/cone/ugm/browser/forms/general_settings.yaml:125 msgid "users_exposed_attributes_help" msgstr "Attributes which can be set via remote API" #. Default: Attribute -#: src/cone/ugm/browser/forms/general_settings.yaml:116 +#: src/cone/ugm/browser/forms/general_settings.yaml:131 msgid "users_exposed_attributes_attribute" msgstr "Attribute" #. Default: No attribute given -#: src/cone/ugm/browser/forms/general_settings.yaml:117 +#: src/cone/ugm/browser/forms/general_settings.yaml:132 msgid "users_exposed_attributes_attribute_required" msgstr "No attribute given" #. Default: User form attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:122 +#: src/cone/ugm/browser/forms/general_settings.yaml:137 msgid "users_form_attrmap" msgstr "User form attributes" #. Default: Attributes exposed in user form -#: src/cone/ugm/browser/forms/general_settings.yaml:123 +#: src/cone/ugm/browser/forms/general_settings.yaml:138 msgid "users_form_attrmap_help" msgstr "Attributes exposed in user form" #. Default: Attribute name -#: src/cone/ugm/browser/forms/general_settings.yaml:124 -#: src/cone/ugm/browser/forms/general_settings.yaml:133 -#: src/cone/ugm/browser/forms/general_settings.yaml:154 -#: src/cone/ugm/browser/forms/general_settings.yaml:163 +#: src/cone/ugm/browser/forms/general_settings.yaml:139 +#: src/cone/ugm/browser/forms/general_settings.yaml:149 +#: src/cone/ugm/browser/forms/general_settings.yaml:178 +#: src/cone/ugm/browser/forms/general_settings.yaml:188 msgid "principal_attr_name" msgstr "Attribute name" #. Default: Form label -#: src/cone/ugm/browser/forms/general_settings.yaml:125 -#: src/cone/ugm/browser/forms/general_settings.yaml:155 +#: src/cone/ugm/browser/forms/general_settings.yaml:140 +#: src/cone/ugm/browser/forms/general_settings.yaml:179 msgid "form_label" msgstr "Form label" #. Default: Column configuration for user listings -#: src/cone/ugm/browser/forms/general_settings.yaml:130 +#: src/cone/ugm/browser/forms/general_settings.yaml:146 msgid "users_listing_columns" msgstr "Column configuration for user listings" #. Default: Attributes shown in user listing -#: src/cone/ugm/browser/forms/general_settings.yaml:131 +#: src/cone/ugm/browser/forms/general_settings.yaml:147 msgid "users_listing_columns_help" msgstr "Attributes shown in user listing" #. Default: User listing columns must not be empty -#: src/cone/ugm/browser/forms/general_settings.yaml:132 +#: src/cone/ugm/browser/forms/general_settings.yaml:148 msgid "users_listing_columns_required" msgstr "User listing columns must not be empty" #. Default: Display name -#: src/cone/ugm/browser/forms/general_settings.yaml:134 -#: src/cone/ugm/browser/forms/general_settings.yaml:164 +#: src/cone/ugm/browser/forms/general_settings.yaml:150 +#: src/cone/ugm/browser/forms/general_settings.yaml:189 msgid "display_name" msgstr "Display name" #. Default: Users listing default column -#: src/cone/ugm/browser/forms/general_settings.yaml:139 +#: src/cone/ugm/browser/forms/general_settings.yaml:156 msgid "users_listing_default_column" msgstr "Users listing default column" #. Default: Default sort column in user listing -#: src/cone/ugm/browser/forms/general_settings.yaml:140 +#: src/cone/ugm/browser/forms/general_settings.yaml:157 msgid "users_listing_default_column_help" msgstr "Default sort column in user listing" #. Default: Default sort column in user listing is required -#: src/cone/ugm/browser/forms/general_settings.yaml:142 +#: src/cone/ugm/browser/forms/general_settings.yaml:159 msgid "users_listing_default_column_required" msgstr "Default sort column in user listing is required" #. Default: Group Settings -#: src/cone/ugm/browser/forms/general_settings.yaml:147 +#: src/cone/ugm/browser/forms/general_settings.yaml:170 msgid "groups_heading" msgstr "Group Settings" #. Default: Group form attributes -#: src/cone/ugm/browser/forms/general_settings.yaml:152 +#: src/cone/ugm/browser/forms/general_settings.yaml:176 msgid "groups_form_attrmap" msgstr "Group form attributes" #. Default: Attributes exposed in group form -#: src/cone/ugm/browser/forms/general_settings.yaml:153 +#: src/cone/ugm/browser/forms/general_settings.yaml:177 msgid "groups_form_attrmap_help" msgstr "Attributes exposed in group form" #. Default: Column configuration for groups listings -#: src/cone/ugm/browser/forms/general_settings.yaml:160 +#: src/cone/ugm/browser/forms/general_settings.yaml:185 msgid "groups_listing_columns" msgstr "Column configuration for groups listings" #. Default: Attributes shown in group listing -#: src/cone/ugm/browser/forms/general_settings.yaml:161 +#: src/cone/ugm/browser/forms/general_settings.yaml:186 msgid "groups_listing_columns_help" msgstr "Attributes shown in group listing" #. Default: Group listing columns must not be empty -#: src/cone/ugm/browser/forms/general_settings.yaml:162 +#: src/cone/ugm/browser/forms/general_settings.yaml:187 msgid "groups_listing_columns_required" msgstr "Group listing columns must not be empty" #. Default: Groups listing default column -#: src/cone/ugm/browser/forms/general_settings.yaml:169 +#: src/cone/ugm/browser/forms/general_settings.yaml:195 msgid "groups_listing_default_column" msgstr "Groups listing default column" #. Default: Default sort column in group listing -#: src/cone/ugm/browser/forms/general_settings.yaml:170 +#: src/cone/ugm/browser/forms/general_settings.yaml:196 msgid "groups_listing_default_column_help" msgstr "Default sort column in group listing" #. Default: Default sort column in groups listing is required -#: src/cone/ugm/browser/forms/general_settings.yaml:172 +#: src/cone/ugm/browser/forms/general_settings.yaml:198 msgid "groups_listing_default_column_required" msgstr "Default sort column in groups listing is required" #. Default: Roles settings -#: src/cone/ugm/browser/forms/general_settings.yaml:177 +#: src/cone/ugm/browser/forms/general_settings.yaml:209 msgid "roles_heading" msgstr "Roles Settings" #. Default: Principal roles -#: src/cone/ugm/browser/forms/general_settings.yaml:182 +#: src/cone/ugm/browser/forms/general_settings.yaml:215 msgid "roles_principal_roles_enabled" msgstr "Principal roles" #. Default: Enable roles on principals -#: src/cone/ugm/browser/forms/general_settings.yaml:183 +#: src/cone/ugm/browser/forms/general_settings.yaml:216 msgid "roles_principal_roles_enabled_help" msgstr "Enable roles on principals" -#. Default: Groups -#: src/cone/ugm/model/groups.py:24 src/cone/ugm/model/groups.py:47 -msgid "groups_node" -msgstr "Groups" - -#. Default: Container for Groups -#: src/cone/ugm/model/groups.py:25 src/cone/ugm/model/groups.py:48 -msgid "groups_node_description" -msgstr "Container for Groups" - -#. Default: Group -#: src/cone/ugm/model/group.py:17 src/cone/ugm/model/group.py:30 -msgid "group_node" -msgstr "Group" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:11 +msgid "localmanager_rules" +msgstr "Access rules" -#. Default: Group -#: src/cone/ugm/model/group.py:18 src/cone/ugm/model/group.py:31 -msgid "group_node_description" -msgstr "Group" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:25 +msgid "localmanager_rule_source" +msgstr "Source GID" -#. Default: Users -#: src/cone/ugm/model/users.py:24 src/cone/ugm/model/users.py:47 -msgid "users_node" -msgstr "Users" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:26 +msgid "localmanager_source_empty" +msgstr "No source GID defined" -#. Default: Container for Users -#: src/cone/ugm/model/users.py:25 src/cone/ugm/model/users.py:48 -msgid "users_node_description" -msgstr "Container for Users" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:34 +msgid "localmanager_rule_target" +msgstr "Target GID [default]" -#. Default: User -#: src/cone/ugm/model/user.py:35 src/cone/ugm/model/user.py:50 -msgid "user_node" -msgstr "User" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:35 +msgid "localmanager_no_targets_for_source" +msgstr "No target GID's defined for source GID" -#. Default: User -#: src/cone/ugm/model/user.py:36 src/cone/ugm/model/user.py:51 -msgid "user_node_description" -msgstr "User" +#: src/cone/ugm/browser/forms/localmanager_settings.yaml:47 +msgid "localmanager_target_empty" +msgstr "No target GID defined" diff --git a/src/cone/ugm/model/groups.py b/src/cone/ugm/model/groups.py index 6a3278c..a4c3293 100644 --- a/src/cone/ugm/model/groups.py +++ b/src/cone/ugm/model/groups.py @@ -39,6 +39,7 @@ class Groups(object): def properties(self): props = Properties() props.in_navtree = True + props.skip_mainmenu = True return props @instance_property diff --git a/src/cone/ugm/model/users.py b/src/cone/ugm/model/users.py index 197dc67..7455e2b 100644 --- a/src/cone/ugm/model/users.py +++ b/src/cone/ugm/model/users.py @@ -39,6 +39,7 @@ class Users(object): def properties(self): props = Properties() props.in_navtree = True + props.skip_mainmenu = True return props @instance_property diff --git a/src/cone/ugm/settings.py b/src/cone/ugm/settings.py index 4867453..59edbd9 100644 --- a/src/cone/ugm/settings.py +++ b/src/cone/ugm/settings.py @@ -45,12 +45,12 @@ def invalidate(self, attrs=[]): @node_info( name='ugm_general_settings', - title=_('ugm_settings_node', default='UGM Settings'), + title=_('ugm_settings_node', default='UGM'), description = _( 'ugm_settings_node_description', default='General user and group management settings' ), - icon='ion-person-stalker') + icon='bi-people') class GeneralSettings(UGMSettings): category = _('category_ugm', default='User and Group Management') @@ -61,12 +61,12 @@ def config_file(self): @node_info( name='ugm_localmanager_settings', - title=_('localmanager_settings_node', default='Local Manager Settings'), + title=_('localmanager_settings_node', default='Local Manager'), description=_( 'localmanager_settings_node_description', - default='Local Manager Settings' + default='Manage Local Manager access rules' ), - icon='ion-person') + icon='bi-person-video2') @plumbing(Attributes) class LocalManagerSettings(SettingsNode): category = _('category_ugm', default='User and Group Management') diff --git a/src/cone/ugm/tests/test_browser.py b/src/cone/ugm/tests/test_browser.py index 96e21cb..03f62b1 100644 --- a/src/cone/ugm/tests/test_browser.py +++ b/src/cone/ugm/tests/test_browser.py @@ -11,7 +11,7 @@ def np(path): class TestBrowser(unittest.TestCase): layer = ugm_layer - def test_cone_fileupload_resources(self): + def test_cone_ugm_resources(self): resources_ = browser.cone_ugm_resources self.assertTrue(resources_.directory.endswith(np('/static'))) self.assertEqual(resources_.name, 'cone.ugm-ugm') @@ -30,5 +30,5 @@ def test_cone_fileupload_resources(self): self.assertTrue(styles[0].directory.endswith(np('/static'))) self.assertEqual(styles[0].path, 'ugm') - self.assertEqual(styles[0].file_name, 'cone.ugm.css') + self.assertEqual(styles[0].file_name, 'cone.ugm.min.css') self.assertTrue(os.path.exists(styles[0].file_path)) diff --git a/src/cone/ugm/tests/test_browser_group.py b/src/cone/ugm/tests/test_browser_group.py index e428656..5b2a51e 100644 --- a/src/cone/ugm/tests/test_browser_group.py +++ b/src/cone/ugm/tests/test_browser_group.py @@ -53,7 +53,7 @@ def test_leftcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(group, request, 'leftcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( @@ -82,7 +82,7 @@ def test_rightcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(group, request, 'rightcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( @@ -116,7 +116,7 @@ def test_columnlisting_tile(self): with self.layer.authenticated('manager'): res = render_tile(group, request, 'columnlisting') expected = ( - '
  • ' ) self.assertTrue(res.find(expected) > -1) @@ -155,13 +155,13 @@ def test_allcolumnlisting_tile(self): with self.layer.authenticated('manager'): res = render_tile(group, request, 'allcolumnlisting') expected = ( - '
  • ' ) self.assertTrue(res.find(expected) > -1) expected = ( - '
  • ' ) self.assertTrue(res.find(expected) > -1) diff --git a/src/cone/ugm/tests/test_browser_groups.py b/src/cone/ugm/tests/test_browser_groups.py index 2f7a467..79197cd 100644 --- a/src/cone/ugm/tests/test_browser_groups.py +++ b/src/cone/ugm/tests/test_browser_groups.py @@ -39,7 +39,7 @@ def test_leftcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(groups, request, 'leftcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( @@ -64,7 +64,7 @@ def test_rightcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(groups, request, 'rightcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( diff --git a/src/cone/ugm/tests/test_browser_root.py b/src/cone/ugm/tests/test_browser_root.py index e079963..d1174b6 100644 --- a/src/cone/ugm/tests/test_browser_root.py +++ b/src/cone/ugm/tests/test_browser_root.py @@ -37,7 +37,7 @@ def test_leftcolumn_tile(self): with self.layer.authenticated('editor'): res = render_tile(root, request, 'leftcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( @@ -61,7 +61,7 @@ def test_rightcolumn_tile(self): with self.layer.authenticated('editor'): res = render_tile(root, request, 'rightcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( diff --git a/src/cone/ugm/tests/test_browser_settings.py b/src/cone/ugm/tests/test_browser_settings.py index 9ec479b..cc950f8 100644 --- a/src/cone/ugm/tests/test_browser_settings.py +++ b/src/cone/ugm/tests/test_browser_settings.py @@ -32,6 +32,13 @@ def test_GeneralSettingsForm(self, tempdir): form = tile.form self.assertEqual(form.keys(), [ + 'users_settings', + 'groups_settings', + 'roles_settings', + 'save', + 'came_from' + ]) + self.assertEqual(form['users_settings'].keys(), [ 'users_heading', 'users_account_expiration', 'user_id_autoincrement', @@ -47,15 +54,17 @@ def test_GeneralSettingsForm(self, tempdir): 'users_exposed_attributes', 'users_form_attrmap', 'users_listing_columns', - 'users_listing_default_column', + 'users_listing_default_column' + ]) + self.assertEqual(form['groups_settings'].keys(), [ 'groups_heading', 'groups_form_attrmap', 'groups_listing_columns', - 'groups_listing_default_column', + 'groups_listing_default_column' + ]) + self.assertEqual(form['roles_settings'].keys(), [ 'roles_heading', - 'roles_principal_roles_enabled', - 'save', - 'came_from' + 'roles_principal_roles_enabled' ]) @testing.principals( diff --git a/src/cone/ugm/tests/test_browser_user.py b/src/cone/ugm/tests/test_browser_user.py index c02689a..584614e 100644 --- a/src/cone/ugm/tests/test_browser_user.py +++ b/src/cone/ugm/tests/test_browser_user.py @@ -51,7 +51,7 @@ def test_leftcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(user, request, 'leftcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( @@ -78,7 +78,7 @@ def test_rightcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(user, request, 'rightcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( @@ -112,7 +112,7 @@ def test_columnlisting_tile(self): with self.layer.authenticated('manager'): res = render_tile(user, request, 'columnlisting') expected = ( - '
  • ' ) self.assertTrue(res.find(expected) > -1) @@ -150,13 +150,13 @@ def test_allcolumnlisting_tile(self): with self.layer.authenticated('manager'): res = render_tile(user, request, 'allcolumnlisting') expected = ( - '
  • ' ) self.assertTrue(res.find(expected) > -1) expected = ( - '
  • ' ) self.assertTrue(res.find(expected) > -1) diff --git a/src/cone/ugm/tests/test_browser_users.py b/src/cone/ugm/tests/test_browser_users.py index d388855..9311600 100644 --- a/src/cone/ugm/tests/test_browser_users.py +++ b/src/cone/ugm/tests/test_browser_users.py @@ -39,7 +39,7 @@ def test_leftcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(users, request, 'leftcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( @@ -64,7 +64,7 @@ def test_rightcolumn_tile(self): with self.layer.authenticated('manager'): res = render_tile(users, request, 'rightcolumn') - expected = '
    ' + expected = '
    ' self.assertTrue(res.find(expected) > -1) @testing.principals( diff --git a/src/cone/ugm/tests/test_layout.py b/src/cone/ugm/tests/test_layout.py index 2c9a606..20070e3 100644 --- a/src/cone/ugm/tests/test_layout.py +++ b/src/cone/ugm/tests/test_layout.py @@ -35,9 +35,7 @@ def test_layout(self): self.assertTrue(config.personaltools) self.assertTrue(config.columns_fluid) self.assertFalse(config.pathbar) - self.assertEqual(config.sidebar_left, []) - self.assertEqual(config.sidebar_left_grid_width, 0) - self.assertEqual(config.content_grid_width, 12) + self.assertEqual(config.sidebar_left, ['navtree']) class TestLayout(unittest.TestCase, LayoutTests):