Compare commits

...
This repository has been archived on 2019-10-12. You can view files and clone it, but cannot push or open issues or pull requests.

9 Commits

34 changed files with 1052 additions and 232 deletions

View File

@ -1,7 +1,7 @@
FROM alpine:3.9 FROM alpine:3.9
ADD ["requirements.txt", "/requirements.txt"] ADD ["requirements.txt", "/requirements.txt"]
RUN apk upgrade --update && \ RUN apk upgrade --update && \
apk add --update python3 build-base openldap-dev python3-dev py3-psycopg2 && \ apk add --update python3 build-base openldap-dev python3-dev py3-psycopg2 gettext && \
pip3 install -r /requirements.txt && rm /requirements.txt pip3 install -r /requirements.txt && rm /requirements.txt
WORKDIR /lama WORKDIR /lama
EXPOSE 80 EXPOSE 80

View File

@ -1,7 +1,7 @@
FROM alpine:3.9 FROM alpine:3.9
ADD ["requirements.txt", "/requirements.txt"] ADD ["requirements.txt", "/requirements.txt"]
RUN apk upgrade --update && \ RUN apk upgrade --update && \
apk add --update python3 build-base openldap-dev python3-dev py3-psycopg2 && \ apk add --update python3 build-base openldap-dev python3-dev py3-psycopg2 gettext && \
pip3 install -r /requirements.txt && rm /requirements.txt pip3 install -r /requirements.txt && rm /requirements.txt
WORKDIR /lama WORKDIR /lama
EXPOSE 80 EXPOSE 80

View File

@ -8,13 +8,13 @@ from django.contrib.auth.models import Group, User
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.db import IntegrityError from django.db import IntegrityError
from django.shortcuts import render, redirect, HttpResponse from django.shortcuts import render, redirect, HttpResponse
from datetime import datetime, timedelta
from account_helper.models import Realm from account_helper.models import Realm
from account_manager.utils.mail_utils import realm_send_mail from account_manager.utils.mail_utils import realm_send_mail
from .forms import RealmAddForm, RealmUpdateForm from .forms import RealmAddForm, RealmUpdateForm
from .models import LdapGroup, LdapUser from .models import LdapGroup, LdapUser
from ldap import LDAPError from ldap import LDAPError
from django.utils.translation import gettext as _
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -50,8 +50,8 @@ def realm_list(request):
return redirect('user-detail', realm.id, user.dn) return redirect('user-detail', realm.id, user.dn)
except ObjectDoesNotExist as err: except ObjectDoesNotExist as err:
logger.info('Anmeldung fehlgeschlagen', err) logger.info('Login failed', err)
return HttpResponse("Invalid login. Please try again.") return HttpResponse(_('InvalidLogin'))
elif len(realms) == 1: elif len(realms) == 1:
return redirect('realm-detail', realms[0].id) return redirect('realm-detail', realms[0].id)
else: else:

View File

@ -13,6 +13,7 @@ https://docs.djangoproject.com/en/2.1/ref/settings/
import os import os
import ldap import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType from django_auth_ldap.config import LDAPSearch, GroupOfNamesType
from django.utils.translation import ugettext_lazy as _
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DOMAIN = os.environ['DOMAIN'] DOMAIN = os.environ['DOMAIN']
@ -37,6 +38,7 @@ INSTALLED_APPS = [
MIDDLEWARE = [ MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
@ -113,19 +115,6 @@ AUTH_PASSWORD_VALIDATORS = [
}, },
] ]
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/ # https://docs.djangoproject.com/en/2.1/howto/static-files/
@ -190,6 +179,30 @@ LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'realm-home' LOGIN_REDIRECT_URL = 'realm-home'
PASSWORD_RESET_TIMEOUT_DAYS = 3 PASSWORD_RESET_TIMEOUT_DAYS = 3
########################################################################################################################
# Languages Config #
########################################################################################################################
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
LANGUAGES = (
('en', _('English')),
('de', _('Deutsch')),
('de-fr', _('Deutsch'))
)
USE_L10N = True
LANGUAGE_CODE = 'de'
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
######################################################################################################################## ########################################################################################################################
# Logging Config # # Logging Config #
######################################################################################################################## ########################################################################################################################

View File

@ -1,13 +1,18 @@
from django.templatetags.static import static from django.templatetags.static import static
from django.utils.translation import gettext, ngettext
from django.urls import reverse from django.urls import reverse
from django.utils import translation
from jinja2 import Environment from jinja2 import Environment
def environment(**options): def environment(**options):
options['extensions'] = ['jinja2.ext.i18n']
env = Environment(**options) env = Environment(**options)
env.install_gettext_translations(translation)
# env.install_gettext_callables(gettext=gettext, ngettext=ngettext, newstyle=True)
env.globals.update({ env.globals.update({
'static': static, 'static': static,
'url': reverse, 'url': reverse,
}) })
return env return env

View File

@ -0,0 +1,406 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-18 01:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: account_manager/main_views.py:54
msgid "InvalidLogin"
msgstr ""
#: account_manager/views/user_views.py:37
msgid ""
"Der angefragte Nutzer gehört einem anderen Bereich an. Nutzer können nur von "
"dem Bereich bearbeitet werden, in dem sie erstellt wurden."
msgstr ""
#: core/docker_settings.py:196
msgid "English"
msgstr ""
#: core/docker_settings.py:197 core/docker_settings.py:198
msgid "Deutsch"
msgstr ""
#: templates/admin/list_user.jinja2:8
msgid "DjangoKnownUsers"
msgstr ""
#: templates/admin/list_user.jinja2:9
msgid "DjangoAdminPages"
msgstr ""
#: templates/admin/list_user.jinja2:12
msgid "SuperAdminInfo"
msgstr ""
#: templates/admin/list_user.jinja2:18 templates/macros/utils_macros.jinja2:28
#: templates/macros/utils_macros.jinja2:77
#: templates/macros/utils_macros.jinja2:138
#: templates/realm/realm_user_multiple_delete.jinja2:23
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:11
msgid "Search"
msgstr ""
#: templates/admin/list_user.jinja2:23
msgid "SuperAdmin"
msgstr ""
#: templates/admin/list_user.jinja2:24 templates/macros/form_macros.jinja2:309
#: templates/macros/utils_macros.jinja2:33
msgid "Username"
msgstr ""
#: templates/admin/list_user.jinja2:25 templates/macros/form_macros.jinja2:310
#: templates/macros/utils_macros.jinja2:34
#: templates/realm/realm_detailed.jinja2:28
#: templates/user/realm_user_detail.jinja2:32
msgid "Email"
msgstr ""
#: templates/admin/list_user.jinja2:26 templates/macros/form_macros.jinja2:311
#: templates/macros/utils_macros.jinja2:35
#: templates/user/realm_user_detail.jinja2:30
msgid "FirstName"
msgstr ""
#: templates/admin/list_user.jinja2:27 templates/macros/form_macros.jinja2:312
#: templates/macros/utils_macros.jinja2:36
#: templates/user/realm_user_detail.jinja2:31
msgid "LastName"
msgstr ""
#. Translators: The Application Name: default LAMa
#: templates/base.jinja2:33
msgid "AppName"
msgstr ""
#. Translators: Logout button
#: templates/base.jinja2:40
msgid "Logout"
msgstr ""
#. Translators: Login Button
#: templates/base.jinja2:43
msgid "Login"
msgstr ""
#. Translators: About link title
#: templates/base.jinja2:58 templates/base_admin.jinja2:50
msgid "About"
msgstr ""
#: templates/base_admin.jinja2:10
msgid "DjangoAdminArea"
msgstr ""
#: templates/base_admin.jinja2:14 templates/realm/realm_home.jinja2:6
msgid "Realms"
msgstr ""
#: templates/base_admin.jinja2:24
msgid "RealmOverview"
msgstr ""
#: templates/base_admin.jinja2:27 templates/realm/realm_detailed.jinja2:5
msgid "Realm"
msgstr ""
#: templates/base_admin.jinja2:31
msgid "RealmInformation"
msgstr ""
#: templates/base_admin.jinja2:34 templates/realm/realm_user.jinja2:5
msgid "User"
msgstr ""
#: templates/base_admin.jinja2:37 templates/realm/realm_groups.jinja2:4
#: templates/user/realm_user_detail.jinja2:37
msgid "Groups"
msgstr ""
#: templates/base_admin.jinja2:46 templates/realm/realm_home.jinja2:11
msgid "RealmAdd"
msgstr ""
#: templates/group/group_add.jinja2:6
msgid "AddGroup"
msgstr ""
#: templates/group/group_add.jinja2:18 templates/group/group_detail.jinja2:35
#: templates/realm/realm_update.jinja2:14
#: templates/user/realm_user_add.jinja2:14
#: templates/user/realm_user_detail.jinja2:97
msgid "Save"
msgstr ""
#: templates/group/group_add.jinja2:20
#: templates/group/group_confirm_delete.jinja2:17
#: templates/group/group_detail.jinja2:37
#: templates/realm/realm_update.jinja2:16
#: templates/realm/realm_user_multiple_delete.jinja2:31
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:19
#: templates/user/realm_user_add.jinja2:16
#: templates/user/realm_user_detail.jinja2:99
#: templates/user/user_confirm_delete.jinja2:25
msgid "Cancel"
msgstr ""
#: templates/group/group_confirm_delete.jinja2:19
#: templates/group/group_detail.jinja2:22
msgid "DeleteGroup"
msgstr ""
#: templates/group/group_detail.jinja2:7
msgid "Group"
msgstr ""
#: templates/group/group_detail.jinja2:9
#: templates/user/realm_user_detail.jinja2:22
msgid "LdapDomain"
msgstr ""
#: templates/group/group_detail.jinja2:12 templates/realm/realm_groups.jinja2:9
msgid "Description"
msgstr ""
#: templates/group/group_detail.jinja2:15
msgid "Members"
msgstr ""
#: templates/group/group_detail.jinja2:19
#: templates/group/group_detail.jinja2:25
msgid "UpdateGroup"
msgstr ""
#: templates/macros/form_macros.jinja2:314
#: templates/macros/utils_macros.jinja2:38
#: templates/user/realm_user_detail.jinja2:54
msgid "LastLogin"
msgstr ""
#: templates/macros/utils_macros.jinja2:37
msgid "Active"
msgstr ""
#: templates/macros/utils_macros.jinja2:39
msgid "DeletionDate"
msgstr ""
#: templates/macros/utils_macros.jinja2:82
msgid "RealmName"
msgstr ""
#: templates/macros/utils_macros.jinja2:83
msgid "LdapBaseDN"
msgstr ""
#: templates/macros/utils_macros.jinja2:84
msgid "MailAddress"
msgstr ""
#: templates/macros/utils_macros.jinja2:85
msgid "AdminGroup"
msgstr ""
#: templates/macros/utils_macros.jinja2:86
msgid "DefaultGroup"
msgstr ""
#: templates/macros/utils_macros.jinja2:87
msgid "UserCount"
msgstr ""
#: templates/macros/utils_macros.jinja2:88
msgid "GroupCount"
msgstr ""
#: templates/permission_denied.jinja2:8
msgid "PermissionDeniedInfo"
msgstr ""
#. Translators: Is the Headline of the create new realm view
#: templates/realm/realm_add.jinja2:10
msgid "CreateNewRealm"
msgstr ""
#. Translators: the submit button text for the create new realm form
#: templates/realm/realm_add.jinja2:16
msgid "CreateRealm"
msgstr ""
#: templates/realm/realm_add_failed.jinja2:5
msgid "AddRealmError"
msgstr ""
#: templates/realm/realm_add_failed.jinja2:7
msgid "AddRealmErrorInfo"
msgstr ""
#: templates/realm/realm_add_failed.jinja2:11
msgid "AddRealmErrorLdapInfo"
msgstr ""
#. Translators: The Application Name: default LAMa
#: templates/realm/realm_confirm_delete.jinja2:7
msgid "RealmDelete"
msgstr ""
#: templates/realm/realm_confirm_delete.jinja2:27
msgid "RealmDeleteCancel"
msgstr ""
#: templates/realm/realm_confirm_delete.jinja2:29
msgid "RealmDeleteAgree"
msgstr ""
#: templates/realm/realm_detailed.jinja2:10
msgid "RealmDetailRemoveRealm"
msgstr ""
#: templates/realm/realm_detailed.jinja2:19
msgid "RealmDetailLdapOU"
msgstr ""
#: templates/realm/realm_detailed.jinja2:20
msgid "RealmDetailUserCount"
msgstr ""
#: templates/realm/realm_detailed.jinja2:25
msgid "RealmDetailRemoveInactiveUser"
msgstr ""
#: templates/realm/realm_detailed.jinja2:30
#: templates/realm/realm_detailed.jinja2:37
#: templates/realm/realm_detailed.jinja2:45
msgid "RealmDetailStillPending"
msgstr ""
#: templates/realm/realm_detailed.jinja2:32
msgid "RealmDetailAdminGroup"
msgstr ""
#: templates/realm/realm_detailed.jinja2:40
msgid "RealmDetailDefaultGroup"
msgstr ""
#: templates/realm/realm_detailed.jinja2:52
msgid "RealmDetailChangeRealmInfo"
msgstr ""
#: templates/realm/realm_detailed.jinja2:56
msgid "RealmDetailTestMail"
msgstr ""
#: templates/realm/realm_groups.jinja2:8
msgid "Name"
msgstr ""
#: templates/realm/realm_groups.jinja2:10
msgid "MemberCount"
msgstr ""
#: templates/realm/realm_groups.jinja2:31
msgid "AddGroups"
msgstr ""
#: templates/realm/realm_user.jinja2:8 templates/user/realm_user_add.jinja2:5
msgid "AddUser"
msgstr ""
#: templates/realm/realm_user.jinja2:10
msgid "RemoveMultipleUser"
msgstr ""
#: templates/realm/realm_user_multiple_delete.jinja2:6
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:5
#: templates/user/realm_user_detail.jinja2:85
#: templates/user/user_confirm_delete.jinja2:27
msgid "DeleteUser"
msgstr ""
#: templates/realm/realm_user_multiple_delete.jinja2:10
msgid "MultipleUserDeleteError"
msgstr ""
#: templates/realm/realm_user_multiple_delete.jinja2:29
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:17
msgid "Execute"
msgstr ""
#: templates/user/realm_user_detail.jinja2:23
msgid "UserDisplayName"
msgstr ""
#: templates/user/realm_user_detail.jinja2:27
msgid "NotGeneratedYet"
msgstr ""
#: templates/user/realm_user_detail.jinja2:33
msgid "Password"
msgstr ""
#: templates/user/realm_user_detail.jinja2:34
msgid "UserPasswordReset"
msgstr ""
#: templates/user/realm_user_detail.jinja2:35
msgid "Phone"
msgstr ""
#: templates/user/realm_user_detail.jinja2:36
msgid "MobilePhone"
msgstr ""
#: templates/user/realm_user_detail.jinja2:47
msgid "NoneGroupAssigned"
msgstr ""
#: templates/user/realm_user_detail.jinja2:51
msgid "AssignGroups"
msgstr ""
#: templates/user/realm_user_detail.jinja2:62
msgid "DeletionProcess"
msgstr ""
#: templates/user/realm_user_detail.jinja2:65
msgid "CancelDeletionProcess"
msgstr ""
#: templates/user/realm_user_detail.jinja2:73
msgid "UpdateUser"
msgstr ""
#: templates/user/realm_user_detail.jinja2:79
msgid "ResendWelcomeMail"
msgstr ""
#: templates/user/realm_user_update_groups.jinja2:6
msgid "UpdateGroupMembership"
msgstr ""
#: templates/user/realm_user_update_groups.jinja2:11
msgid "UserGroupDelete"
msgstr ""
#: templates/user/realm_user_update_groups.jinja2:30
msgid "UserGroupAdd"
msgstr ""
#: templates/user/realm_user_update_groups.jinja2:50
msgid "Done"
msgstr ""

View File

@ -0,0 +1,425 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-18 01:19+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: account_manager/main_views.py:54
msgid "InvalidLogin"
msgstr "Invalid login. Please try again."
#: account_manager/views/user_views.py:37
msgid ""
"Der angefragte Nutzer gehört einem anderen Bereich an. Nutzer können nur von "
"dem Bereich bearbeitet werden, in dem sie erstellt wurden."
msgstr ""
#: core/docker_settings.py:196
msgid "English"
msgstr ""
#: core/docker_settings.py:197 core/docker_settings.py:198
msgid "Deutsch"
msgstr ""
#: templates/admin/list_user.jinja2:8
msgid "DjangoKnownUsers"
msgstr "Django bekannte Nutzer"
#: templates/admin/list_user.jinja2:9
msgid "DjangoAdminPages"
msgstr "Django Adminbereich"
#: templates/admin/list_user.jinja2:12
msgid "SuperAdminInfo"
msgstr ""
"Um einen Nutzer zum Superadmin zu ernennen, klicke auf das Superadmin Icon"
#: templates/admin/list_user.jinja2:18 templates/macros/utils_macros.jinja2:28
#: templates/macros/utils_macros.jinja2:77
#: templates/macros/utils_macros.jinja2:138
#: templates/realm/realm_user_multiple_delete.jinja2:23
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:11
msgid "Search"
msgstr "Suche"
#: templates/admin/list_user.jinja2:23
msgid "SuperAdmin"
msgstr "Superadmin"
#: templates/admin/list_user.jinja2:24 templates/macros/form_macros.jinja2:309
#: templates/macros/utils_macros.jinja2:33
msgid "Username"
msgstr "Nutzername"
#: templates/admin/list_user.jinja2:25 templates/macros/form_macros.jinja2:310
#: templates/macros/utils_macros.jinja2:34
#: templates/realm/realm_detailed.jinja2:28
#: templates/user/realm_user_detail.jinja2:32
msgid "Email"
msgstr "E-Mail"
#: templates/admin/list_user.jinja2:26 templates/macros/form_macros.jinja2:311
#: templates/macros/utils_macros.jinja2:35
#: templates/user/realm_user_detail.jinja2:30
msgid "FirstName"
msgstr "Vorname"
#: templates/admin/list_user.jinja2:27 templates/macros/form_macros.jinja2:312
#: templates/macros/utils_macros.jinja2:36
#: templates/user/realm_user_detail.jinja2:31
msgid "LastName"
msgstr "Nachname"
#. Translators: The Application Name: default LAMa
#: templates/base.jinja2:33
msgid "AppName"
msgstr "LAMa"
#. Translators: Logout button
#: templates/base.jinja2:40
msgid "Logout"
msgstr ""
#. Translators: Login Button
#: templates/base.jinja2:43
msgid "Login"
msgstr ""
#. Translators: About link title
#: templates/base.jinja2:58 templates/base_admin.jinja2:50
msgid "About"
msgstr "Über"
#: templates/base_admin.jinja2:10
msgid "DjangoAdminArea"
msgstr "Django Adminbereich"
#: templates/base_admin.jinja2:14 templates/realm/realm_home.jinja2:6
msgid "Realms"
msgstr "Bereiche"
#: templates/base_admin.jinja2:24
msgid "RealmOverview"
msgstr "Bereichsübersicht"
#: templates/base_admin.jinja2:27 templates/realm/realm_detailed.jinja2:5
msgid "Realm"
msgstr "Bereich"
#: templates/base_admin.jinja2:31
msgid "RealmInformation"
msgstr "Bereichsinformationen"
#: templates/base_admin.jinja2:34 templates/realm/realm_user.jinja2:5
msgid "User"
msgstr "Nutzer"
#: templates/base_admin.jinja2:37 templates/realm/realm_groups.jinja2:4
#: templates/user/realm_user_detail.jinja2:37
msgid "Groups"
msgstr "Gruppen"
#: templates/base_admin.jinja2:46 templates/realm/realm_home.jinja2:11
msgid "RealmAdd"
msgstr "Bereich hinzufügen"
#: templates/group/group_add.jinja2:6
msgid "AddGroup"
msgstr "Gruppe anlegen"
#: templates/group/group_add.jinja2:18 templates/group/group_detail.jinja2:35
#: templates/realm/realm_update.jinja2:14
#: templates/user/realm_user_add.jinja2:14
#: templates/user/realm_user_detail.jinja2:97
msgid "Save"
msgstr "Sichern"
#: templates/group/group_add.jinja2:20
#: templates/group/group_confirm_delete.jinja2:17
#: templates/group/group_detail.jinja2:37
#: templates/realm/realm_update.jinja2:16
#: templates/realm/realm_user_multiple_delete.jinja2:31
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:19
#: templates/user/realm_user_add.jinja2:16
#: templates/user/realm_user_detail.jinja2:99
#: templates/user/user_confirm_delete.jinja2:25
msgid "Cancel"
msgstr "Abbrechen"
#: templates/group/group_confirm_delete.jinja2:19
#: templates/group/group_detail.jinja2:22
msgid "DeleteGroup"
msgstr "Gruppe löschen"
#: templates/group/group_detail.jinja2:7
msgid "Group"
msgstr "Gruppe"
#: templates/group/group_detail.jinja2:9
#: templates/user/realm_user_detail.jinja2:22
msgid "LdapDomain"
msgstr "Ldap Domain"
#: templates/group/group_detail.jinja2:12 templates/realm/realm_groups.jinja2:9
msgid "Description"
msgstr "Beschreibung"
#: templates/group/group_detail.jinja2:15
msgid "Members"
msgstr "Mitglieder"
#: templates/group/group_detail.jinja2:19
#: templates/group/group_detail.jinja2:25
msgid "UpdateGroup"
msgstr "Gruppe bearbeiten"
#: templates/macros/form_macros.jinja2:314
#: templates/macros/utils_macros.jinja2:38
#: templates/user/realm_user_detail.jinja2:54
msgid "LastLogin"
msgstr "Letzter Login"
#: templates/macros/utils_macros.jinja2:37
msgid "Active"
msgstr "Aktiv"
#: templates/macros/utils_macros.jinja2:39
msgid "DeletionDate"
msgstr "Löschdatum"
#: templates/macros/utils_macros.jinja2:82
msgid "RealmName"
msgstr "Bereichsname"
#: templates/macros/utils_macros.jinja2:83
msgid "LdapBaseDN"
msgstr "Ldap Basis DN"
#: templates/macros/utils_macros.jinja2:84
msgid "MailAddress"
msgstr "Mailadresse"
#: templates/macros/utils_macros.jinja2:85
msgid "AdminGroup"
msgstr "Admingruppe"
#: templates/macros/utils_macros.jinja2:86
msgid "DefaultGroup"
msgstr "Defaultgruppe"
#: templates/macros/utils_macros.jinja2:87
msgid "UserCount"
msgstr "Nutzeranzahl"
#: templates/macros/utils_macros.jinja2:88
msgid "GroupCount"
msgstr "Gruppenanzahl"
#: templates/permission_denied.jinja2:8
msgid "PermissionDeniedInfo"
msgstr "Leider hast du keine Rechte :´("
#. Translators: Is the Headline of the create new realm view
#: templates/realm/realm_add.jinja2:10
msgid "CreateNewRealm"
msgstr "Neuen Bereich anlegen"
#. Translators: the submit button text for the create new realm form
#: templates/realm/realm_add.jinja2:16
msgid "CreateRealm"
msgstr "Bereich anlegen"
#: templates/realm/realm_add_failed.jinja2:5
msgid "AddRealmError"
msgstr "Hinzufügen Fehlgeschlagen"
#: templates/realm/realm_add_failed.jinja2:7
msgid "AddRealmErrorInfo"
msgstr "Das hinzufügen des Bereichs ist fehlgeschlagen."
#: templates/realm/realm_add_failed.jinja2:11
msgid "AddRealmErrorLdapInfo"
msgstr "Bitte überprüfe den Ldap base dn, ob dieser auch wirklich existiert."
#. Translators: The Application Name: default LAMa
#: templates/realm/realm_confirm_delete.jinja2:7
msgid "RealmDelete"
msgstr "Löschen des Bereichs"
#: templates/realm/realm_confirm_delete.jinja2:27
msgid "RealmDeleteCancel"
msgstr "Abbrechen"
#: templates/realm/realm_confirm_delete.jinja2:29
msgid "RealmDeleteAgree"
msgstr "Bereich löschen"
#: templates/realm/realm_detailed.jinja2:10
msgid "RealmDetailRemoveRealm"
msgstr "Bereich löschen"
#: templates/realm/realm_detailed.jinja2:19
msgid "RealmDetailLdapOU"
msgstr "LDAP Organisationseinheit"
#: templates/realm/realm_detailed.jinja2:20
msgid "RealmDetailUserCount"
msgstr "Nutzeranzahl (Aktive/Inaktive)"
#: templates/realm/realm_detailed.jinja2:25
msgid "RealmDetailRemoveInactiveUser"
msgstr "Inaktive Nutzer löschen"
#: templates/realm/realm_detailed.jinja2:30
#: templates/realm/realm_detailed.jinja2:37
#: templates/realm/realm_detailed.jinja2:45
msgid "RealmDetailStillPending"
msgstr "Noch ausstehend"
#: templates/realm/realm_detailed.jinja2:32
msgid "RealmDetailAdminGroup"
msgstr "Admin Gruppe"
#: templates/realm/realm_detailed.jinja2:40
msgid "RealmDetailDefaultGroup"
msgstr "Default Gruppe"
#: templates/realm/realm_detailed.jinja2:52
msgid "RealmDetailChangeRealmInfo"
msgstr "Bereichsinformationen anpassen"
#: templates/realm/realm_detailed.jinja2:56
msgid "RealmDetailTestMail"
msgstr "Test Mail senden"
#: templates/realm/realm_groups.jinja2:8
msgid "Name"
msgstr "Name"
#: templates/realm/realm_groups.jinja2:10
msgid "MemberCount"
msgstr "Mitgliederanzahl"
#: templates/realm/realm_groups.jinja2:31
msgid "AddGroups"
msgstr "Gruppen hinzufügen"
#: templates/realm/realm_user.jinja2:8 templates/user/realm_user_add.jinja2:5
msgid "AddUser"
msgstr "Nutzer hinzufügen"
#: templates/realm/realm_user.jinja2:10
msgid "RemoveMultipleUser"
msgstr "Mehrere Nutzer löschen"
#: templates/realm/realm_user_multiple_delete.jinja2:6
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:5
#: templates/user/realm_user_detail.jinja2:85
#: templates/user/user_confirm_delete.jinja2:27
msgid "DeleteUser"
msgstr "Nutzer löschen"
#: templates/realm/realm_user_multiple_delete.jinja2:10
msgid "MultipleUserDeleteError"
msgstr ""
" <h3>Admin User festgestellt</h3><p>Die folgenden Nutzer können nicht "
"gelöscht werden, da Sie noch Mitglieder von ein oder mehreren AdminGruppen "
"sind. Bitte tragen Sie diese vorher aus den Admin Gruppen.</p>"
#: templates/realm/realm_user_multiple_delete.jinja2:29
#: templates/realm/realm_user_multiple_delete_confirm.jinja2:17
msgid "Execute"
msgstr "Ausführen"
#: templates/user/realm_user_detail.jinja2:23
msgid "UserDisplayName"
msgstr "Anzeigename"
#: templates/user/realm_user_detail.jinja2:27
msgid "NotGeneratedYet"
msgstr "Noch nicht generiert"
#: templates/user/realm_user_detail.jinja2:33
msgid "Password"
msgstr "Passwort"
#: templates/user/realm_user_detail.jinja2:34
msgid "UserPasswordReset"
msgstr "Nutzerpasswort zurücksetzen"
#: templates/user/realm_user_detail.jinja2:35
msgid "Phone"
msgstr "Telefon"
#: templates/user/realm_user_detail.jinja2:36
msgid "MobilePhone"
msgstr "Mobiltelefon"
#: templates/user/realm_user_detail.jinja2:47
msgid "NoneGroupAssigned"
msgstr "Keine zugewiesen"
#: templates/user/realm_user_detail.jinja2:51
msgid "AssignGroups"
msgstr "Gruppen zuweisen"
#: templates/user/realm_user_detail.jinja2:62
msgid "DeletionProcess"
msgstr "Löschvorgang"
#: templates/user/realm_user_detail.jinja2:65
msgid "CancelDeletionProcess"
msgstr "Löschvorgang abbrechen"
#: templates/user/realm_user_detail.jinja2:73
msgid "UpdateUser"
msgstr "Nutzer bearbeiten"
#: templates/user/realm_user_detail.jinja2:79
msgid "ResendWelcomeMail"
msgstr "Willkommensmail erneut senden"
#: templates/user/realm_user_update_groups.jinja2:6
msgid "UpdateGroupMembership"
msgstr "Gruppenzuweisung ändern"
#: templates/user/realm_user_update_groups.jinja2:11
msgid "UserGroupDelete"
msgstr "Gruppe entfernen"
#: templates/user/realm_user_update_groups.jinja2:30
msgid "UserGroupAdd"
msgstr "Gruppe hinzufügen"
#: templates/user/realm_user_update_groups.jinja2:50
msgid "Done"
msgstr "Fertig"
#~ msgid "RealmDeleteInformation %(realm)s %(realm_ldap_base_dn)"
#~ msgstr ""
#~ "<p>Achtung! Sie sind gerade dabei den Bereich <span class='text-uppercase "
#~ "font-weight-bold'>%(realm)s</span> zu löschen.</p><p>Falls Sie sich "
#~ "sicher sind, dass Sie diesen Bereich löschen wollen, klicken Sie bitte "
#~ "auf \"Bereich löschen\".<p>Hierdurch werden <strong>Alle</strong> Nutzer "
#~ "und Gruppen gelöscht, die unter der Ldap BasisDN %(realm_ldap_base_dn)s "
#~ "eingetragen sind. Die Ldap Basis DN mit Ihren Organisationseinheiten "
#~ "\"groups\" und \"people\" bleiben bestehen.</p><p>Bitte beachten Sie, "
#~ "dass die Daten der Nutzer, die in den Diensten hochgeladen wurden, "
#~ "weiterhin bestehen bleiben. Diese Daten müssen vom Systemadministrator "
#~ "seperat gelöscht werden. </p><p>Möchten Sie das Löschen der Accountdaten "
#~ "verhindern, klicken Sie auf \"Abbrechen\"</p>"

View File

@ -120,6 +120,10 @@
} }
} }
.realm-name{
text-transform: uppercase;
}
/* ------------------------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------------------------ */
/* -- Data Tables -- */ /* -- Data Tables -- */
/* ------------------------------------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------------------------------------ */

View File

@ -3,7 +3,8 @@
<div class="col-12 "> <div class="col-12 ">
<div class="row justify-content-center justify-content-sm-center"> <div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-8 col-md-7 col-lg-6 col-xl-5 bg-white text-dark text-center p-3 mt-5"> <div class="col-12 col-sm-8 col-md-7 col-lg-6 col-xl-5 bg-white text-dark text-center p-3 mt-5">
<p>Diese App wurde mit viel <i style="color: #DC143C;" class="fas fa-spin fa-heart"></i> von Micheal {# TODO: Translation #}
<p>Diese App wurde mit viel <i style="color: #DC143C;" class="fas fa-spin fa-heart"></i> von Michael
Götz entwickelt.</p> Götz entwickelt.</p>
<br> <br>
<h2>Icons</h2> <h2>Icons</h2>

View File

@ -5,26 +5,26 @@
{% block admin_content %} {% block admin_content %}
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<h2>Django bekannte Nutzer <h2>{{ _('DjangoKnownUsers') }}
<small><a href="/admin" class="float-right h5">Django Admin Seiten</a></small> <small><a href="/admin" class="float-right h5">{{ _('DjangoAdminPages') }}</a></small>
</h2> </h2>
{{ mutils.get_warning_box(extra_errors) }} {{ mutils.get_warning_box(extra_errors) }}
<div class="alert alert-info">Um einen Nutzer zum Superadmin zu ernennen, klicke auf das Superadmin Icon <div class="alert alert-info">{{ _('SuperAdminInfo') }}
</div> </div>
<div class="table-search-field form-group w-25 float-right"> <div class="table-search-field form-group w-25 float-right">
<input type="text" <input type="text"
class="form-control" class="form-control"
id="data-table-search-input"> id="data-table-search-input">
<label for="data-table-search-input">Suche</label> <label for="data-table-search-input">{{ _('Search') }}</label>
</div> </div>
<table class="table table-hover table-striped table-inverse table-bordered data-table"> <table class="table table-hover table-striped table-inverse table-bordered data-table">
<thead> <thead>
<tr> <tr>
<th scope="col">Superadmin</th> <th scope="col">{{ _('SuperAdmin') }}</th>
<th scope="col">Nutzername</th> <th scope="col">{{ _('Username') }}</th>
<th scope="col">E-Mail</th> <th scope="col">{{ _('Email') }}</th>
<th scope="col">Vorname</th> <th scope="col">{{ _('FirstName') }}</th>
<th scope="col">Nachname</th> <th scope="col">{{ _('LastName') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

View File

@ -1,4 +1,3 @@
{#{% load static %}#}
{# ===== HTML ===== #} {# ===== HTML ===== #}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
@ -30,15 +29,18 @@
<a class="navbar-brand" href="{{ url('realm-home') }}"> <a class="navbar-brand" href="{{ url('realm-home') }}">
<img src="{{ static('images/lama.svg') }}" width="30" height="30" class="d-inline-block align-top" <img src="{{ static('images/lama.svg') }}" width="30" height="30" class="d-inline-block align-top"
alt=""> alt="">
LAMa {# Translators: The Application Name: default LAMa #}
{{ _('AppName') }}
</a> </a>
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
<span class="navbar-text"> <span class="navbar-text">
Hi <a href="{{ url('realm-home') }}?show_user=True">{{ request.user.username }}</a>! Hi <a href="{{ url('realm-home') }}?show_user=True">{{ request.user.username }}</a>!
<a href="{{ url('logout') }}?next=/">Logout <i class="fas fa-sign-out-alt"></i></a> {# Translators: Logout button #}
<a href="{{ url('logout') }}?next=/">{{ _('Logout') }} <i class="fas fa-sign-out-alt"></i></a>
{% else %} {% else %}
<a href="{{ url('login') }}"><i class="fas fa-sign-in-alt"></i> Login</a> {# Translators: Login Button #}
<a href="{{ url('login') }}"><i class="fas fa-sign-in-alt"></i> {{ _('Login') }}</a>
{% endif %} {% endif %}
</span> </span>
</nav> </nav>
@ -47,12 +49,13 @@
{% block content %}{% endblock %} {% block content %}{% endblock %}
{% endblock %} {% endblock %}
{% if not realms and not realm and not request.user.is_superuser%} {% if not realms and not realm and not request.user.is_superuser %}
<footer class="bg-light footer mt-auto py-3 text-center"> <footer class="bg-light footer mt-auto py-3 text-center">
<div class="container"> <div class="container">
<span class="text-muted"> <span class="text-muted">
<a href="{{ url('about') }}">Über</a> {# Translators: About link title #}
<a href="{{ url('about') }}">{{ _('About') }}</a>
</span> </span>
</div> </div>
</footer> </footer>

View File

@ -7,11 +7,11 @@
{% if request.user.is_superuser %} {% if request.user.is_superuser %}
<div class="list-group list-group-flush"> <div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action bg-light" <a class="list-group-item list-group-item-action bg-light"
href="{{ url('django-additional-admin-list') }}"><i class="fas fa-crown"></i> Django Adminbereich</a> href="{{ url('django-additional-admin-list') }}"><i class="fas fa-crown"></i> {{ _('DjangoAdminArea') }}</a>
</div> </div>
{% endif %} {% endif %}
{% if realms %} {% if realms %}
<h2 class="sidebar-heading">Bereiche</h2> <h2 class="sidebar-heading">{{ _('Realms') }}</h2>
<div class="list-group list-group-flush"> <div class="list-group list-group-flush">
{% for realm_item in realms %} {% for realm_item in realms %}
<a href="{{ url('realm-detail', args=[realm_item.id]) }}" <a href="{{ url('realm-detail', args=[realm_item.id]) }}"
@ -21,20 +21,20 @@
{% else %} {% else %}
<div class="list-group-flush"> <div class="list-group-flush">
<a href="{{ url('realm-home') }}" class="list-group-item list-group-item-action bg-light"> <a href="{{ url('realm-home') }}" class="list-group-item list-group-item-action bg-light">
<i class="fas fa-list"></i> Bereichsübersicht</a> <i class="fas fa-list"></i> {{ _('RealmOverview') }}</a>
</div> </div>
{% if realm %} {% if realm %}
<h2 class="sidebar-heading">Bereich {{ realm.name }}</h2> <h2 class="sidebar-heading">{{ _('Realm') }} <span class="text-uppercase">{{ realm.name }}</span></h2>
<div class="list-group list-group-flush"> <div class="list-group list-group-flush">
<a href="{{ url('realm-detail', args=[realm.id]) }}" <a href="{{ url('realm-detail', args=[realm.id]) }}"
class="list-group-item list-group-item-action bg-light"><i class="fas fa-cogs"></i> class="list-group-item list-group-item-action bg-light"><i class="fas fa-cogs"></i>
Bereichsinformationen</a> {{ _('RealmInformation') }}</a>
<a href="{{ url('realm-user-list', args=[realm.id]) }}" <a href="{{ url('realm-user-list', args=[realm.id]) }}"
class="list-group-item list-group-item-action bg-light"><i class="fas fa-users"></i> class="list-group-item list-group-item-action bg-light"><i class="fas fa-users"></i>
Nutzer</a> {{ _('User') }}</a>
<a href="{{ url('realm-group-list', args=[realm.id]) }}" <a href="{{ url('realm-group-list', args=[realm.id]) }}"
class="list-group-item list-group-item-action bg-light"><i class="fas fa-user-friends"></i> class="list-group-item list-group-item-action bg-light"><i class="fas fa-user-friends"></i>
Gruppen</a> {{ _('Groups') }}</a>
</div> </div>
{% endif %} {% endif %}
{% endif %} {% endif %}
@ -43,11 +43,11 @@
<div class="list-group-item bg-light border-0"></div> <div class="list-group-item bg-light border-0"></div>
<a href="{{ url('realm-add') }}" <a href="{{ url('realm-add') }}"
class="list-group-item list-group-item-action bg-light"><i class="fas fa-plus-square"></i> class="list-group-item list-group-item-action bg-light"><i class="fas fa-plus-square"></i>
Bereich hinufügen</a> {{ _('RealmAdd') }}</a>
</div> </div>
{% endif %} {% endif %}
<div class="sidebar-bottom list-group-flush border-top"> <div class="sidebar-bottom list-group-flush border-top">
<a href="{{ url('about') }}" class="list-group-item list-group-item-action bg-light">Über</a> <a href="{{ url('about') }}" class="list-group-item list-group-item-action bg-light">{{ _('About') }}</a>
</div> </div>
</div> </div>

View File

@ -3,7 +3,7 @@
{% import 'macros/utils_macros.jinja2' as uform %} {% import 'macros/utils_macros.jinja2' as uform %}
{% block detail_content %} {% block detail_content %}
<h2>Gruppe anlegen</h2> <h2>{{ _('AddGroup') }}</h2>
{% if extra_error %} {% if extra_error %}
<div class="alert alert-warning">{{ extra_error }}</div> <div class="alert alert-warning">{{ extra_error }}</div>
{% endif %} {% endif %}
@ -15,9 +15,9 @@
{{ uform.get_data_table_search_field() }} {{ uform.get_data_table_search_field() }}
{{ mform.user_select_table_input(users, field=form.members) }} {{ mform.user_select_table_input(users, field=form.members) }}
<div class="d-flex mt-4"> <div class="d-flex mt-4">
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button> <button type="submit" class="btn btn-primary mr-auto p-2">{{ _('Save') }}</button>
<a href="{{ url('realm-group-list', args = [realm.id]) }}" <a href="{{ url('realm-group-list', args = [realm.id]) }}"
class="btn btn-secondary p-2">Abbrechen</a> class="btn btn-secondary p-2">{{ _('Cancel') }}</a>
</div> </div>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -4,6 +4,7 @@
<div class="row justify-content-center justify-content-sm-center"> <div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5"> <div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5">
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
{# TODO: Add translation #}
<p>Achtung! Sie sind gerade dabei die Gruppe <strong>{{ group.name }}</strong> aus dem <p>Achtung! Sie sind gerade dabei die Gruppe <strong>{{ group.name }}</strong> aus dem
Bereich <strong>{{ realm.name }}</strong> zu löschen. Bereich <strong>{{ realm.name }}</strong> zu löschen.
</p> </p>
@ -13,9 +14,9 @@
</div> </div>
<div class="d-flex"> <div class="d-flex">
<a href="{{ url('realm-group-detail', args = [realm.id, group.dn]) }}" <a href="{{ url('realm-group-detail', args = [realm.id, group.dn]) }}"
class="btn btn-secondary mr-auto p-2">Abbrechen</a> class="btn btn-secondary mr-auto p-2">{{ _('Cancel') }}</a>
<a href="{{ url('realm-group-delete', args = [realm.id, group.dn]) }}" <a href="{{ url('realm-group-delete', args = [realm.id, group.dn]) }}"
class="btn btn-danger p-2">Gruppe löschen</a> class="btn btn-danger p-2">{{ _('DeleteGroup') }}</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -4,23 +4,25 @@
{% block detail_content %} {% block detail_content %}
{% if not form %} {% if not form %}
<h3>Gruppe {{ group.name }}</h3> <h3>{{ _('Group') }} {{ group.name }}</h3>
<ul class="list-group list-group-flush w-100 mb-3"> <ul class="list-group list-group-flush w-100 mb-3">
<li class="list-group-item">Ldap Domain: {{ group.dn }}</li> <li class="list-group-item">{{ _('LdapDomain') }}: {{ group.dn }}</li>
{% if group.description %} {% if group.description %}
<li class="list-group-item">Beschreibung: {{ group.description }}</li> <li class="list-group-item">{{ _('Description') }}: {{ group.description }}</li>
{% endif %} {% endif %}
</ul> </ul>
<h3>Mitglieder</h3> <h3>{{ _('Members') }}</h3>
{{ mutils.get_user_table(realm, users) }} {{ mutils.get_user_table(realm, users) }}
<div class="d-flex mt-3"> <div class="d-flex mt-3">
<a href="{{ url('realm-group-update', args = [realm.id, group.dn]) }}" class="btn btn-primary mr-auto p-2"> <a href="{{ url('realm-group-update', args = [realm.id, group.dn]) }}" class="btn btn-primary mr-auto p-2">
<i class="fas fa-pen-square"></i> Gruppe bearbeiten</a> <i class="fas fa-pen-square"></i> {{ _('UpdateGroup') }}</a>
<a href="{{ url('realm-group-delete-confirm', args = [realm.id, group.dn]) }}" class="btn btn-danger p-2"><i <a href="{{ url('realm-group-delete-confirm', args = [realm.id, group.dn]) }}" class="btn btn-danger p-2"><i
class="fas fa-trash"></i> <span class="d-sm-none d-md-inline-block">Gruppe löschen</span></a> class="fas fa-trash"></i> <span
class="d-sm-none d-md-inline-block">{{ _('DeleteGroup') }}</span></a>
</div> </div>
{% else %} {% else %}
<h3>{{ _('UpdateGroup') }} {{ group.name }}</h3>
{{ mutils.get_warning_box(extra_error) }} {{ mutils.get_warning_box(extra_error) }}
<form method="post"> <form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
@ -30,9 +32,9 @@
{{ mutils.get_data_table_search_field() }} {{ mutils.get_data_table_search_field() }}
{{ mform.user_select_table_input(users, field=form.members) }} {{ mform.user_select_table_input(users, field=form.members) }}
<div class="d-flex mt-4"> <div class="d-flex mt-4">
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button> <button type="submit" class="btn btn-primary mr-auto p-2">{{ _('Save') }}</button>
<a href="{{ url('realm-group-detail', args = [realm.id, group.dn]) }}" <a href="{{ url('realm-group-detail', args = [realm.id, group.dn]) }}"
class="btn btn-secondary p-2">Abbrechen</a> class="btn btn-secondary p-2">{{ _('Cancel') }}</a>
</div> </div>
</form> </form>
{% endif %} {% endif %}

View File

@ -299,16 +299,19 @@
id="delete-all-checkbox" id="delete-all-checkbox"
> >
<label class=" <label class="
{% if checkbox_label_classes %}{{ checkbox_label_classes }}{% else %}table-checkbox-control-label table-checkbox-control-label-add{% endif %}" {% if checkbox_label_classes %}
for="delete-all-checkbox"></label> {{ checkbox_label_classes }}
{% else %}
table-checkbox-control-label table-checkbox-control-label-add
{% endif %}" for="delete-all-checkbox"></label>
{% endif %} {% endif %}
</th> </th>
<th scope="col">Nutzername</th> <th scope="col">{{ _('Username') }}</th>
<th scope="col">E-Mail</th> <th scope="col">{{ _('Email') }}</th>
<th scope="col">Vorname</th> <th scope="col">{{ _('FirstName') }}</th>
<th scope="col">Nachname</th> <th scope="col">{{ _('LastName') }}</th>
{% if show_lastlogin %} {% if show_lastlogin %}
<th scope="col">Letzter Login</th> <th scope="col">{{ _('LastLogin') }}</th>
{% endif %} {% endif %}
</tr> </tr>
</thead> </thead>
@ -325,27 +328,11 @@
{% if field and field.value() and user.username in field.value() %}checked{% endif %} {% if field and field.value() and user.username in field.value() %}checked{% endif %}
> >
<label class=" <label class="
{% if checkbox_label_classes %}
{{ checkbox_label_classes }}
{% else %}
table-checkbox-control-label table-checkbox-control-label-add
{% endif %}" for="{{ user.username }}_{{ loop.index }}">
{% if checkbox_label_classes %}{{ checkbox_label_classes }}{% else %}table-checkbox-control-label table-checkbox-control-label-add{% endif %}"
for="{{ user.username }}_{{ loop.index }}">
</label> </label>
</td> </td>
<td>{{ user.username }}</td> <td>{{ user.username }}</td>

View File

@ -25,18 +25,18 @@
<input type="text" <input type="text"
class="form-control" class="form-control"
id="data-table-search-input"> id="data-table-search-input">
<label for="data-table-search-input">Suche</label> <label for="data-table-search-input">{{ _('Search') }}</label>
</div> </div>
<table class="table table-hover table-striped table-inverse table-bordered data-table"> <table class="table table-hover table-striped table-inverse table-bordered data-table">
<thead> <thead>
<tr> <tr>
<th scope="col">Nutzername</th> <th scope="col">{{ _('Username') }}</th>
<th scope="col">E-Mail</th> <th scope="col">{{ _('Email') }}</th>
<th scope="col">Vorname</th> <th scope="col">{{ _('FirstName') }}</th>
<th scope="col">Nachname</th> <th scope="col">{{ _('LastName') }}</th>
<th scope="col">Aktiv</th> <th scope="col">{{ _('Active') }}</th>
<th scope="col">Letzer Login</th> <th scope="col">{{ _('LastLogin') }}</th>
<th scope="col">Löschdatum</th> <th scope="col">{{ _('DeletionDate') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -74,18 +74,18 @@
<input type="text" <input type="text"
class="form-control" class="form-control"
id="data-table-search-input"> id="data-table-search-input">
<label for="data-table-search-input">Suche</label> <label for="data-table-search-input">{{ _('Search') }}</label>
</div> </div>
<table class="table table-hover table-striped table-inverse table-bordered data-table text-center"> <table class="table table-hover table-striped table-inverse table-bordered data-table text-center">
<thead> <thead>
<tr> <tr>
<th scope="col">Bereichsname</th> <th scope="col">{{ _('RealmName') }}</th>
<th scope="col">Ldap Basis DN</th> <th scope="col">{{ _('LdapBaseDN') }}</th>
<th scope="col">Mailadresse</th> <th scope="col">{{ _('MailAddress') }}</th>
<th scope="col">Admingruppe</th> <th scope="col">{{ _('AdminGroup') }}</th>
<th scope="col">Defaultgruppe</th> <th scope="col">{{ _('DefaultGroup') }}</th>
<th scope="col">Nutzeranzahl</th> <th scope="col">{{ _('UserCount') }}</th>
<th scope="col">Gruppenanzahl</th> <th scope="col">{{ _('GroupCount') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -119,7 +119,6 @@
<td>{{ realm_wrapper.user_count }}</td> <td>{{ realm_wrapper.user_count }}</td>
<td>{{ realm_wrapper.group_count }}</td> <td>{{ realm_wrapper.group_count }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
@ -136,7 +135,7 @@
<input type="text" <input type="text"
class="form-control" class="form-control"
id="{{ input_id }}"> id="{{ input_id }}">
<label for="{{ input_id }}">Suche</label> <label for="{{ input_id }}">{{ _('Search') }}</label>
</div> </div>
{% endmacro %} {% endmacro %}

View File

@ -5,7 +5,7 @@
<div class="col-12 "> <div class="col-12 ">
<div class="row justify-content-center justify-content-sm-center"> <div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark text-center p-3 mt-5"> <div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark text-center p-3 mt-5">
<p>Leider hast du keine Rechte :´(</p> <p>{{ _('PermissionDeniedInfo') }}</p>
{{ mutils.get_warning_box(extra_errors) }} {{ mutils.get_warning_box(extra_errors) }}
<a href="{{ url('realm-home') }}">Zurück zur Startseite</a> <a href="{{ url('realm-home') }}">Zurück zur Startseite</a>
</div> </div>

View File

@ -6,12 +6,14 @@
<div class="row justify-content-center justify-content-sm-center"> <div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-8 col-md-8 col-lg-6 col-xl-5 bg-white text-dark p-3 mt-5"> <div class="col-12 col-sm-8 col-md-8 col-lg-6 col-xl-5 bg-white text-dark p-3 mt-5">
{% if request.user.is_superuser %} {% if request.user.is_superuser %}
<h2>Neuen Bereich anlegen</h2> {# Translators: Is the Headline of the create new realm view #}
<h2>{{ _('CreateNewRealm') }}</h2>
<form method="post"> <form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ mform.text_input(form.name) }} {{ mform.text_input(form.name) }}
{{ mform.text_input(form.ldap_base_dn) }} {{ mform.text_input(form.ldap_base_dn) }}
<button type="submit" class="btn btn-primary btn-block">Anlegen</button> {# Translators: the submit button text for the create new realm form#}
<button type="submit" class="btn btn-primary btn-block">{{ _('CreateRealm') }}</button>
</form> </form>
{% endif %} {% endif %}
</div> </div>

View File

@ -2,13 +2,13 @@
{% block admin_content %} {% block admin_content %}
<div class="row "> <div class="row ">
<div class="col-12 p-3"> <div class="col-12 p-3">
<h1>Fehler {{ realm_name }}</h1> <h1>{{ _('AddRealmError') }} <span class="realm-name">{{ realm_name }}</span></h1>
<div class="alert alert-danger"> <div class="alert alert-danger">
<p>Das hinzufügen des Bereichs ist fehlgeschlagen.</p> <p>{{ _('AddRealmErrorInfo') }}</p>
{% if error %} {% if error %}
<p>{{ error }}</p> <p>{{ error }}</p>
{% else %} {% else %}
<p>Bitte überprüfe den Ldap base dn, ob dieser auch wirklich existiert.</p> <p>{{ _('AddRealmErrorLdapInfo') }}</p>
{% endif %} {% endif %}
</div> </div>
</div> </div>

View File

@ -3,15 +3,19 @@
<div class="col-12 "> <div class="col-12 ">
<div class="row justify-content-center justify-content-sm-center"> <div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5"> <div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5">
<h1>Löschen des Bereichs {# Translators: The Application Name: default LAMa #}
<h1>{{ _('RealmDelete') }}
<span class="text-uppercase font-weight-bold">{{ realm.name }}</span></h1> <span class="text-uppercase font-weight-bold">{{ realm.name }}</span></h1>
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
{# Translators: The Application Name: default LAMa #}
{# {{ gettext('RealmDeleteInformation %(realm)s %(realm_ldap_base_dn)')|safe|format(realm=realm, realm_ldap_base_dn=realm.ldap_base_dn) }}#}
<p>Achtung! Sie sind gerade dabei den Bereich <span <p>Achtung! Sie sind gerade dabei den Bereich <span
class="text-uppercase font-weight-bold">{{ realm.name }}</span> zu löschen.</p> class="text-uppercase font-weight-bold">{{ realm }}</span> zu löschen.</p>
<p>Falls Sie sich sicher sind, dass Sie diesen Bereich löschen wollen, klicken Sie bitte auf <p>Falls Sie sich sicher sind, dass Sie diesen Bereich löschen wollen, klicken Sie bitte auf
"Bereich löschen". "Bereich löschen".
<p>Hierdurch werden <strong>Alle</strong> Nutzer und Gruppen gelöscht, die unter der Ldap Basis <p>Hierdurch werden <strong>Alle</strong> Nutzer und Gruppen gelöscht, die unter der Ldap Basis
DN {{ realm.ldap_base_dn }} eingetragen sind. Die Ldap Basis DN mit Ihren Organisationseinheiten DN {{ realm.ldap_base_dn }} eingetragen sind. Die Ldap Basis DN mit Ihren
Organisationseinheiten
"groups" und "people" bleiben bestehen.</p> "groups" und "people" bleiben bestehen.</p>
<p>Bitte beachten Sie, dass die Daten der Nutzer, die in den <p>Bitte beachten Sie, dass die Daten der Nutzer, die in den
Diensten hochgeladen wurden, weiterhin bestehen bleiben. Diese Daten müssen vom Diensten hochgeladen wurden, weiterhin bestehen bleiben. Diese Daten müssen vom
@ -20,9 +24,9 @@
</div> </div>
<div class="d-flex"> <div class="d-flex">
<a href="{{ url('realm-detail', args = [realm.id]) }}" <a href="{{ url('realm-detail', args = [realm.id]) }}"
class="btn btn-secondary mr-auto p-2">Abbrechen</a> class="btn btn-secondary mr-auto p-2"> {{ _('RealmDeleteCancel') }}</a>
<a href="{{ url('realm-delete', args = [realm.id]) }}" <a href="{{ url('realm-delete', args = [realm.id]) }}"
class="btn btn-danger p-2">Bereich löschen</a> class="btn btn-danger p-2"> {{ _('RealmDeleteAgree') }}</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,11 +0,0 @@
{% extends 'realm/realm_detailed.jinja2' %}
{% block realm_form %}
<h2>Email Account erstellen oder updaten</h2>
{% if form %}
<form method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ form.as_p()|safe }}
<button type="submit">Speichern</button>
</form>
{% endif %}
{% endblock %}

View File

@ -2,83 +2,62 @@
{% block admin_content %} {% block admin_content %}
<div class="row "> <div class="row ">
<div class="col-12 p-3"> <div class="col-12 p-3">
<h1>Bereich <span style="text-transform: uppercase">{{ realm.name }}</span> <h1> {{ _('Realm') }} <span style="text-transform: uppercase">{{ realm.name }}</span>
<small> <small>
{% if request.user.is_superuser %} {% if request.user.is_superuser %}
<a href="{{ url('realm-delete-confirm', args=[realm.id]) }}" <a href="{{ url('realm-delete-confirm', args=[realm.id]) }}"
class="h5 realm-delete-link"><i class="fas fa-dumpster"></i> <span class="h5 realm-delete-link"><i class="fas fa-dumpster"></i> <span
class="d-none d-md-inline-block">Bereich löschen</span></a> class="d-none d-md-inline-block"> {{ _('RealmDetailRemoveRealm') }}</span></a>
{% endif %} {% endif %}
</small> </small>
</h1> </h1>
{% if notice %} {% if notice %}<p style="color: green">{{ notice }}</p>{% endif %}
<p style="color: green">{{ notice }}</p> {% if error %}<p style="color: darkred">{{ error }}</p>{% endif %}
{% endif %}
{% if error %}
<p style="color: darkred">{{ error }}</p>
{% endif %}
{% block detail_content %} {% block detail_content %}
<ul class="list-group list-group-flush w-100"> <ul class="list-group list-group-flush w-100">
<li class="list-group-item">LDAP Organisationseinheit: {{ realm.ldap_base_dn }}</li> <li class="list-group-item"> {{ _('RealmDetailLdapOU') }}: {{ realm.ldap_base_dn }}</li>
<li class="list-group-item">Nutzeranzahl (Aktive/Inaktive): {{ users_count }} <li class="list-group-item"> {{ _('RealmDetailUserCount') }}: {{ users_count }}
({{ users_count-inactive_user_count }}/{{ inactive_user_count }}) ({{ users_count-inactive_user_count }}/{{ inactive_user_count }})
<a <a
href="{{ url('realm-multiple-user-delete-inactive', args=[realm.id]) }}" href="{{ url('realm-multiple-user-delete-inactive', args=[realm.id]) }}"
class="float-right"> class="float-right">
Inaktive Nutzer löschen {{ _('RealmDetailRemoveInactiveUser') }}
</a> </a>
</li> </li>
{% if realm.email %} <li class="list-group-item">{{ _('Email') }}:
<li class="list-group-item">Email: {{ realm.email }}</li> {% if realm.email %}{{ realm.email }}{% else %}
{% else %} <span class="text-danger">{{ _('RealmDetailStillPending') }}</span>{% endif %}
<li class="list-group-item">Email: <span class="text-danger">Noch ausstehend</span></li> </li>
{% endif %} <li class="list-group-item">{{ _('RealmDetailAdminGroup') }}:
{% if realm.admin_group %} {% if realm.admin_group %}
<li class="list-group-item">Admin Gruppe: <a <a href="{{ url('realm-group-detail', args=[realm.id, ldap_admin_group.dn]) }}"
href="{{ url('realm-group-detail', args=[realm.id, ldap_admin_group.dn]) }}" class="badge badge-primary p-2">{{ realm.admin_group }}</a>
class="badge badge-primary p-2"> {% else %}
{{ realm.admin_group }}</a></li> <span class="text-warning">{{ _('RealmDetailStillPending') }}</span>
{% else %} {% endif %}
<li class="list-group-item">Admin Gruppe: <span class="text-warning">Noch ausstehend</span></li> </li>
{% endif %} <li class="list-group-item">{{ _('RealmDetailDefaultGroup') }}:
{% if realm.default_group %} {% if realm.default_group %}
<li class="list-group-item">Default Gruppe: <a <a href="{{ url('realm-group-detail', args=[realm.id, ldap_default_group.dn]) }}"
href="{{ url('realm-group-detail', args=[realm.id, ldap_default_group.dn]) }}" class="badge badge-secondary p-2">{{ realm.default_group }}</a>
class="badge badge-secondary p-2"> {% else %}
{{ realm.default_group }}</a> <span class="text-warning">{{ _('RealmDetailStillPending') }}</span>
</li> {% endif %}
{% else %} </li>
<li class="list-group-item">Default Gruppe: <span class="text-warning">Noch ausstehend</span>
</li>
{% endif %}
</ul> </ul>
<div class="d-flex mt-3"> <div class="d-flex mt-3">
{% if request.user.is_superuser %} {% if request.user.is_superuser %}
<a href="{{ url('realm-update', args=[realm.id]) }}" class="btn btn-primary mr-auto p-2"><i <a href="{{ url('realm-update', args=[realm.id]) }}" class="btn btn-primary mr-auto p-2"><i
class="fas fa-info-circle"></i> Bereichsinformationen class="fas fa-info-circle"></i> {{ _('RealmDetailChangeRealmInfo') }}</a>
anpassen</a>
{% if realm.email %} {% if realm.email %}
<a href="{{ url('realm-mail-test', args=[realm.id]) }}" class="btn btn-secondary p-2"><i <a href="{{ url('realm-mail-test', args=[realm.id]) }}" class="btn btn-secondary p-2"><i
class="fas fa-paper-plane"></i> Test Mail</a> class="fas fa-paper-plane"></i> {{ _('RealmDetailTestMail') }}</a>
{% endif %} {% endif %}
{% endif %} {% endif %}
</div> </div>
{% block realm_form %}
{% endblock %}
{% endblock %} {% endblock %}
{# <h2><a href="{{ url('realm-user-add', args=[realm.id]) }}">Nutzer hinzufügen</a></h2>#}
{# {% block user_content %}#}
{# <h2><a href="{{ url('realm-user-list', args=[realm.id]) }}">Nutzer</a></h2>#}
{# {% endblock %}#}
{# <h2><a href="{{ url('realm-group-add', args=[realm.id]) }}">Gruppen hinzufügen</a></h2>#}
{# {% block groups_content %}#}
{# <h2><a href="{{ url('realm-group-list', args=[realm.id]) }}">Gruppen</a></h2>#}
{# {% endblock %}#}
{# {% block extra_content %}#}
{# {% endblock %}#}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,13 +1,13 @@
{% extends 'realm/realm_detailed.jinja2' %} {% extends 'realm/realm_detailed.jinja2' %}
{% block detail_content %} {% block detail_content %}
<h3>Gruppen</h3> <h3>{{ _('Groups') }}</h3>
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th scope="col">Name</th> <th scope="col">{{ _('Name') }}</th>
<th scope="col">Ldap Domain</th> <th scope="col">{{ _('Description') }}</th>
<th scope="col">Mitgliederanzahl</th> <th scope="col">{{ _('MemberCount') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -19,12 +19,14 @@
title="{{ group.description }}" title="{{ group.description }}"
>{{ group.name }}</a> >{{ group.name }}</a>
</td> </td>
<td>{{ group.dn }}</td> <td data-toggle="tooltip"
data-placement="right"
title="{{ group.description }}">{{ group.description|truncate(100) }}</td>
<td>{{ group.members|length }}</td> <td>{{ group.members|length }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
<a href="{{ url('realm-group-add', args=[realm.id]) }}" class="btn btn-primary"><i class="far fa-plus-square"></i> <a href="{{ url('realm-group-add', args=[realm.id]) }}" class="btn btn-primary"><i class="far fa-plus-square"></i>
Gruppen hinzufügen</a> {{ _('AddGroups') }}</a>
{% endblock %} {% endblock %}

View File

@ -3,12 +3,12 @@
{% import 'macros/utils_macros.jinja2' as mutils %} {% import 'macros/utils_macros.jinja2' as mutils %}
{% block admin_content %} {% block admin_content %}
<h2>Bereiche</h2> <h2>{{ _('Realms') }}</h2>
{{ mutils.get_realm_table(realm_wrappers) }} {{ mutils.get_realm_table(realm_wrappers) }}
{% if request.user.is_superuser %} {% if request.user.is_superuser %}
<div class="row justify-content-center justify-content-sm-center"> <div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-8 col-md-8 col-lg-6 col-xl-5 bg-white text-dark p-3 mt-5"> <div class="col-12 col-sm-8 col-md-8 col-lg-6 col-xl-5 bg-white text-dark p-3 mt-5">
<a href="{{ url('realm-add') }}" class="btn btn-primary w-100">Bereich hinzufügen</a> <a href="{{ url('realm-add') }}" class="btn btn-primary w-100">{{ _('RealmAdd') }}</a>
</div> </div>
</div> </div>
{% endif %} {% endif %}

View File

@ -11,9 +11,9 @@
{{ mform.select_input(form.admin_group) }} {{ mform.select_input(form.admin_group) }}
{{ mform.select_input(form.default_group) }} {{ mform.select_input(form.default_group) }}
<div class="d-flex mt-4"> <div class="d-flex mt-4">
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button> <button type="submit" class="btn btn-primary mr-auto p-2">{{ _('Save') }}</button>
<a href="{{ url('realm-detail', args = [realm.id]) }}" <a href="{{ url('realm-detail', args = [realm.id]) }}"
class="btn btn-secondary p-2">Abbrechen</a> class="btn btn-secondary p-2">{{ _('Cancel') }}</a>
</div> </div>
</form> </form>
{% endif %} {% endif %}

View File

@ -2,11 +2,10 @@
{% import 'macros/utils_macros.jinja2' as mutils %} {% import 'macros/utils_macros.jinja2' as mutils %}
{% block detail_content %} {% block detail_content %}
<h2>Nutzer </h2> <h2>{{ _('User') }}</h2>
{{ mutils.get_user_table(realm, realm_user) }} {{ mutils.get_user_table(realm, realm_user) }}
<a href="{{ url('realm-user-add', args=[realm.id]) }}" class="btn btn-primary"><i class="fas fa-user-plus"></i> <a href="{{ url('realm-user-add', args=[realm.id]) }}" class="btn btn-primary"><i class="fas fa-user-plus"></i>
Nutzer hinzufügen</a> {{ _('AddUser') }}</a>
<a href="{{ url('realm-multiple-user-delete-confirm', args=[realm.id]) }}" class="btn btn-danger float-right"><i <a href="{{ url('realm-multiple-user-delete-confirm', args=[realm.id]) }}" class="btn btn-danger float-right"><i
class="fas fa-trash"></i> Mehrere Nutzer class="fas fa-trash"></i> {{ _('RemoveMultipleUser') }}</a>
Löschen</a>
{% endblock %} {% endblock %}

View File

@ -3,13 +3,11 @@
{% import 'macros/utils_macros.jinja2' as mutils %} {% import 'macros/utils_macros.jinja2' as mutils %}
{% block detail_content %} {% block detail_content %}
<h2>Nutzer löschen</h2> <h2>{{ _('DeleteUser') }}</h2>
{{ mutils.get_warning_box(extra_errors) }} {{ mutils.get_warning_box(extra_errors) }}
{% if blocked_users %} {% if blocked_users %}
<div class="alert alert-warning"> <div class="alert alert-warning">
<h3>Admin User festgestellt</h3> {{ _('MultipleUserDeleteError')|safe }}
<p>Die folgenden Nutzer können nicht gelöscht werden, da Sie noch Mitglieder von ein oder mehreren Admin
Gruppen sind. Bitte tragen Sie diese vorher aus den Admin Gruppen.</p>
<ul> <ul>
{% for blocked_user in blocked_users %} {% for blocked_user in blocked_users %}
<li>{{ blocked_user.username }}</li> <li>{{ blocked_user.username }}</li>
@ -22,15 +20,15 @@
class="form-control" class="form-control"
placeholder="Personen Suche" placeholder="Personen Suche"
id="data-table-search-input"> id="data-table-search-input">
<label for="data-table-search-input">Suche</label> <label for="data-table-search-input">{{ _('Search') }}Suche</label>
</div> </div>
<form action="{{ url('realm-multiple-user-delete', args=[realm.id]) }}" method="post"> <form action="{{ url('realm-multiple-user-delete', args=[realm.id]) }}" method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ mform.user_select_table_input(users=[], deletable_users=deletable_users, blocked_users=blocked_users, name="ldap_users",css_classes='',show_lastlogin=True, checkbox_label_classes='table-checkbox-control-label') }} {{ mform.user_select_table_input(users=[], deletable_users=deletable_users, blocked_users=blocked_users, name="ldap_users",css_classes='',show_lastlogin=True, checkbox_label_classes='table-checkbox-control-label') }}
<div class="d-flex mt-4"> <div class="d-flex mt-4">
<button type="submit" class="btn btn-danger mr-auto p-2">Ausführen</button> <button type="submit" class="btn btn-danger mr-auto p-2">{{ _('Execute') }}</button>
<a href="{{ url('realm-user-list', args = [realm.id]) }}" <a href="{{ url('realm-user-list', args = [realm.id]) }}"
class="btn btn-secondary p-2">Abbrechen</a> class="btn btn-secondary p-2">{{ _('Cancel') }}</a>
</div> </div>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -2,21 +2,21 @@
{% import 'macros/form_macros.jinja2' as mform %} {% import 'macros/form_macros.jinja2' as mform %}
{% block detail_content %} {% block detail_content %}
<h2>Nutzer löschen</h2> <h2>{{ _('DeleteUser') }}</h2>
<div class="form-group w-25 float-right"> <div class="form-group w-25 float-right">
<input type="text" <input type="text"
class="form-control" class="form-control"
placeholder="Personen Suche" placeholder="Personen Suche"
id="data-table-search-input"> id="data-table-search-input">
<label for="data-table-search-input">Suche</label> <label for="data-table-search-input">{{ _('Search') }}</label>
</div> </div>
<form action="{{ url('realm-multiple-user-delete-confirm', args=[realm.id]) }}" method="post"> <form action="{{ url('realm-multiple-user-delete-confirm', args=[realm.id]) }}" method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{{ mform.user_select_table_input(users, name="ldap_users",css_classes='',show_lastlogin=True, checkbox_label_classes='table-checkbox-control-label') }} {{ mform.user_select_table_input(users, name="ldap_users",css_classes='',show_lastlogin=True, checkbox_label_classes='table-checkbox-control-label') }}
<div class="d-flex mt-4"> <div class="d-flex mt-4">
<button type="submit" class="btn btn-danger mr-auto p-2">Ausführen</button> <button type="submit" class="btn btn-danger mr-auto p-2">{{ _('Execute') }}</button>
<a href="{{ url('realm-user-list', args = [realm.id]) }}" <a href="{{ url('realm-user-list', args = [realm.id]) }}"
class="btn btn-secondary p-2">Abbrechen</a> class="btn btn-secondary p-2">{{ _('Cancel') }}</a>
</div> </div>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -5,6 +5,7 @@
<div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5"> <div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5">
<div class="alert alert-info" role="alert"> <div class="alert alert-info" role="alert">
<p> <p>
{# TODO: Translation #}
Ihr Account im Bereich {{ realm.name }} und Ihre Gruppenzugehörigkeiten wurden erfolgreich Ihr Account im Bereich {{ realm.name }} und Ihre Gruppenzugehörigkeiten wurden erfolgreich
gelöscht. gelöscht.
</p> </p>

View File

@ -2,19 +2,18 @@
{% import 'macros/form_macros.jinja2' as mform %} {% import 'macros/form_macros.jinja2' as mform %}
{% block detail_content %} {% block detail_content %}
<h2>Nutzer anlegen</h2> <h2>{{ _('AddUser') }}</h2>
{% if extra_error %} {% if extra_error %}
<div class="alert alert-warning">{{ extra_error }}</div> <div class="alert alert-warning">{{ extra_error }}</div>
{% endif %} {% endif %}
<form action="{{ url('realm-user-add', args=[realm.id]) }}" method="post"> <form action="{{ url('realm-user-add', args=[realm.id]) }}" method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{# {{ form.as_p() }}#}
{{ mform.text_input(form.username) }} {{ mform.text_input(form.username) }}
{{ mform.email_input(form.email) }} {{ mform.email_input(form.email) }}
<div class="d-flex mt-4"> <div class="d-flex mt-4">
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button> <button type="submit" class="btn btn-primary mr-auto p-2">{{ _('Save') }}</button>
<a href="{{ url('realm-user-list', args = [realm.id]) }}" <a href="{{ url('realm-user-list', args = [realm.id]) }}"
class="btn btn-secondary p-2">Abbrechen</a> class="btn btn-secondary p-2">{{ _('Cancel') }}</a>
</div> </div>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -5,6 +5,7 @@
{% if user.user %} {% if user.user %}
{% if user.deleted_user.deletion_date %} {% if user.deleted_user.deletion_date %}
<h3 class="text-danger">{{ user.user.username }} <h3 class="text-danger">{{ user.user.username }}
{# TODO: translate #}
<small>Nutzer wird vorraussichtlich am {{ user.deleted_user.deletion_date.strftime('%d.%m.%Y') }} <small>Nutzer wird vorraussichtlich am {{ user.deleted_user.deletion_date.strftime('%d.%m.%Y') }}
gelöscht gelöscht
</small> </small>
@ -18,23 +19,22 @@
{% endif %} {% endif %}
{% if not form %} {% if not form %}
<ul class="list-group list-group-flush w-100"> <ul class="list-group list-group-flush w-100">
<li class="list-group-item">Ldap Domain: {{ user.user.dn }}</li> <li class="list-group-item">{{ _('LdapDomain') }}: {{ user.user.dn }}</li>
<li class="list-group-item"> Anzeigename: <li class="list-group-item">{{ _('UserDisplayName') }}
{% if user.user.display_name %} {% if user.user.display_name %}
{{ user.user.display_name }} {{ user.user.display_name }}
{% else %} {% else %}
<span class="text-warning"> Noch nicht generiert </span> <span class="text-warning"> {{ _('NotGeneratedYet') }}</span>
{% endif %} {% endif %}
</li> </li>
<li class="list-group-item">Vorname: {{ user.user.first_name }}</li> <li class="list-group-item">{{ _('FirstName') }}: {{ user.user.first_name }}</li>
<li class="list-group-item">Nachname: {{ user.user.last_name }}</li> <li class="list-group-item">{{ _('LastName') }}: {{ user.user.last_name }}</li>
<li class="list-group-item">Email: {{ user.user.email }}</li> <li class="list-group-item">{{ _('Email') }}: {{ user.user.email }}</li>
<li class="list-group-item">Passwort: <a <li class="list-group-item">{{ _('Password') }}: <a
href="{{ url('realm-user-password-reset', args = [realm.id, user.user.dn]) }}" class="float-right">Nutzerpasswort href="{{ url('realm-user-password-reset', args = [realm.id, user.user.dn]) }}" class="float-right">{{ _('UserPasswordReset') }}</a></li>
zurücksetzen</a></li> <li class="list-group-item">{{ _('Phone') }}: {{ user.user.phone }}</li>
<li class="list-group-item">Telefon: {{ user.user.phone }}</li> <li class="list-group-item">{{ _('MobilePhone') }}: {{ user.user.mobile_phone }}</li>
<li class="list-group-item">Mobiltelefon: {{ user.user.mobile_phone }}</li> <li class="list-group-item">{{ _('Groups') }}:
<li class="list-group-item">Gruppen:
{% if groups %} {% if groups %}
{% for group in groups %} {% for group in groups %}
<a href="{{ url('realm-group-detail', args=[realm.id, group.dn]) }}" <a href="{{ url('realm-group-detail', args=[realm.id, group.dn]) }}"
@ -44,14 +44,14 @@
class="badge badge-secondary p-1">{{ group.name }}</a> class="badge badge-secondary p-1">{{ group.name }}</a>
{% endfor %} {% endfor %}
{% else %} {% else %}
<span class="text-warning">Keine zugewiesen</span> <span class="text-warning">{{ _('NoneGroupAssigned') }}</span>
{% endif %} {% endif %}
{% if not user.deleted_user.deletion_date %} {% if not user.deleted_user.deletion_date %}
<a href="{{ url('realm-user-group-update', args=[realm.id, user.user.dn]) }}" class="float-right"> <a href="{{ url('realm-user-group-update', args=[realm.id, user.user.dn]) }}" class="float-right">
Gruppen zuweisen</a> {{ _('AssignGroups') }}</a>
{% endif %} {% endif %}
</li> </li>
<li class="list-group-item">Zuletzt eingeloggt: <li class="list-group-item">{{ _('LastLogin') }}:
{% if user.user.last_login %} {% if user.user.last_login %}
{{ user.user.last_login.strftime('%d.%m.%Y') }} {{ user.user.last_login.strftime('%d.%m.%Y') }}
{% else %} {% else %}
@ -59,10 +59,10 @@
{% endif %}</li> {% endif %}</li>
{% if user.deleted_user.deletion_date %} {% if user.deleted_user.deletion_date %}
<li class="list-group-item text-danger"> <li class="list-group-item text-danger">
Löschvorgang: {{ user.deleted_user.deletion_date.strftime('%d.%m.%Y') }} {{ _('DeletionProcess') }}: {{ user.deleted_user.deletion_date.strftime('%d.%m.%Y') }}
<a href="{{ url('realm-user-delete-cancel', args=[realm.id, user.user.dn]) }}" <a href="{{ url('realm-user-delete-cancel', args=[realm.id, user.user.dn]) }}"
class="float-right"> class="float-right">
Löschvorgang abbrechen</a> {{ _('CancelDeletionProcess') }}</a>
</li> </li>
{% endif %} {% endif %}
</ul> </ul>
@ -70,19 +70,19 @@
{% if not user.deleted_user.deletion_date %} {% if not user.deleted_user.deletion_date %}
<a href="{{ url('realm-user-update', args = [realm.id, user.user.dn]) }}" <a href="{{ url('realm-user-update', args = [realm.id, user.user.dn]) }}"
class="btn btn-primary mr-auto p-2"> class="btn btn-primary mr-auto p-2">
<i class="fas fa-user-cog"></i> Nutzer bearbeiten <i class="fas fa-user-cog"></i> {{ _('UpdateUser') }}
</a> </a>
{% if not user.user.last_login %} {% if not user.user.last_login %}
<a href="{{ url('realm-user-resend-welcome-mail', args = [realm.id, user.user.dn]) }}" <a href="{{ url('realm-user-resend-welcome-mail', args = [realm.id, user.user.dn]) }}"
class="btn btn-secondary p-2 mr-2"> class="btn btn-secondary p-2 mr-2">
<i class="fas fa-paper-plane"></i> Wilkommensmail erneut senden <i class="fas fa-paper-plane"></i> {{ _('ResendWelcomeMail') }}
</a> </a>
{% endif %} {% endif %}
<a href="{{ url('realm-user-delete-confirm', args = [realm.id, user.user.dn]) }}" <a href="{{ url('realm-user-delete-confirm', args = [realm.id, user.user.dn]) }}"
class="btn btn-danger p-2"> class="btn btn-danger p-2">
<i class="fas fa-trash"></i> Nutzer löschen <i class="fas fa-trash"></i> {{ _('DeleteUser') }}
</a> </a>
{% endif %} {% endif %}
</div> </div>
@ -94,9 +94,9 @@
{{ mform.text_input(form.first_name) }} {{ mform.text_input(form.first_name) }}
{{ mform.text_input(form.last_name) }} {{ mform.text_input(form.last_name) }}
<div class="d-flex mt-4"> <div class="d-flex mt-4">
<button type="submit" class="btn btn-primary mr-auto p-2">Speichern</button> <button type="submit" class="btn btn-primary mr-auto p-2">{{ _('Save') }}</button>
<a href="{{ url('realm-user-detail', args = [realm.id, user.dn]) }}" <a href="{{ url('realm-user-detail', args = [realm.id, user.dn]) }}"
class="btn btn-secondary p-2">Abbrechen</a> class="btn btn-secondary p-2">{{ _('Cancel') }}</a>
</div> </div>
</form> </form>
{% endif %} {% endif %}

View File

@ -3,12 +3,12 @@
{% import 'macros/utils_macros.jinja2' as mutils %} {% import 'macros/utils_macros.jinja2' as mutils %}
{% block detail_content %} {% block detail_content %}
<h3><span class="text-uppercase">{{ user.username }}</span> - Gruppenzuweisung ändern</h3> <h3><span class="text-uppercase">{{ user.username }}</span> - {{ _('UpdateGroupMembership') }}</h3>
{{ mutils.get_warning_box(extra_error) }} {{ mutils.get_warning_box(extra_error) }}
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
<form method="post" action="{{ url('realm-user-group-update-delete', args = [realm.id, user.dn]) }}"> <form method="post" action="{{ url('realm-user-group-update-delete', args = [realm.id, user.dn]) }}">
<button type="submit" class="btn btn-warning w-100 mb-2"><i class="fas fa-minus-square"></i> Entfernen <button type="submit" class="btn btn-warning w-100 mb-2"><i class="fas fa-minus-square"></i> {{ _('UserGroupDelete') }}
</button> </button>
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
<ul> <ul>
@ -27,7 +27,7 @@
</div> </div>
<div class="col-6"> <div class="col-6">
<form method="post" action="{{ url('realm-user-group-update-add', args = [realm.id, user.dn]) }}"> <form method="post" action="{{ url('realm-user-group-update-add', args = [realm.id, user.dn]) }}">
<button type="submit" class="btn btn-success w-100 mb-2"><i class="fas fa-plus-square"></i> Hinzufügen <button type="submit" class="btn btn-success w-100 mb-2"><i class="fas fa-plus-square"></i> {{ _('UserGroupAdd') }}
</button> </button>
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
<ul> <ul>
@ -47,6 +47,6 @@
</div> </div>
<div class="mt-4"> <div class="mt-4">
<a href="{{ url('realm-user-detail', args = [realm.id, user.dn]) }}" <a href="{{ url('realm-user-detail', args = [realm.id, user.dn]) }}"
class="btn btn-primary p-2 float-right w-25">Fertig</a> class="btn btn-primary p-2 float-right w-25">{{ _('Done') }}</a>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -7,6 +7,7 @@
<div class="row justify-content-center justify-content-sm-center"> <div class="row justify-content-center justify-content-sm-center">
<div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5"> <div class="col-12 col-sm-8 col-md-7 col-lg-5 col-xl-4 bg-white text-dark p-3 mt-5">
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
{# TODO: Translation #}
<p><strong>Achtung!</strong> Sie sind gerade dabei den Account von <strong>{{ user.username }}</strong> zu schließen. <p><strong>Achtung!</strong> Sie sind gerade dabei den Account von <strong>{{ user.username }}</strong> zu schließen.
</p> </p>
<p>Falls Sie sich sicher sind, dass Sie diesen Nutzer löschen wollen, klicken Sie bitte auf "Nutzer <p>Falls Sie sich sicher sind, dass Sie diesen Nutzer löschen wollen, klicken Sie bitte auf "Nutzer
@ -21,9 +22,9 @@
</div> </div>
<div class="d-flex"> <div class="d-flex">
<a href="{{ url(cancel_link.name, args = cancel_link.args) }}" <a href="{{ url(cancel_link.name, args = cancel_link.args) }}"
class="btn btn-secondary mr-auto p-2">Abbrechen</a> class="btn btn-secondary mr-auto p-2">{{ _('Cancel') }}</a>
<a href="{{ url(deletion_link.name, args = deletion_link.args) }}" <a href="{{ url(deletion_link.name, args = deletion_link.args) }}"
class="btn btn-danger p-2">Nutzer löschen</a> class="btn btn-danger p-2">{{ _('DeleteUser') }}</a>
</div> </div>
</div> </div>
</div> </div>