members: confirmation step for invite as user

pull/73/head
Christian Merten 1 year ago
parent e178f56369
commit 3a9fca0a1e
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-19 01:19+0100\n" "POT-Creation-Date: 2024-11-24 01:14+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -35,6 +35,10 @@ msgstr "Berechtigungen"
msgid "Important dates" msgid "Important dates"
msgstr "Wichtigen Daten" msgstr "Wichtigen Daten"
#: logindata/apps.py:8
msgid "Authentication"
msgstr "Authentifizierung"
#: logindata/models.py:10 #: logindata/models.py:10
msgid "Permission group" msgid "Permission group"
msgstr "Berechtigungsgruppe" msgstr "Berechtigungsgruppe"
@ -43,14 +47,94 @@ msgstr "Berechtigungsgruppe"
msgid "Permission groups" msgid "Permission groups"
msgstr "Berechtigungsgruppen" msgstr "Berechtigungsgruppen"
#: logindata/models.py:18 #: logindata/models.py:17
msgid "Login Datum" msgid "Login Datum"
msgstr "Zugangsdaten" msgstr "Zugangsdaten"
#: logindata/models.py:19 #: logindata/models.py:18
msgid "Login Data" msgid "Login Data"
msgstr "Zugangsdaten" msgstr "Zugangsdaten"
#: logindata/models.py:25
msgid "Password"
msgstr "Passwort"
#: logindata/models.py:31
msgid "Active registration password"
msgstr "Aktives Registrierungspasswort"
#: logindata/models.py:32
msgid "Active registration passwords"
msgstr "Aktive Registrierungspasswörter"
#: logindata/templates/logindata/register_failed.html:6
msgid "Registration"
msgstr "Registrierung"
#: logindata/templates/logindata/register_failed.html:11
#: logindata/templates/logindata/register_form.html:13
#: logindata/templates/logindata/register_password.html:11
#: logindata/templates/logindata/register_success.html:10
msgid "Set login data"
msgstr "Zugangsdaten wählen"
#: logindata/templates/logindata/register_failed.html:13
msgid "Something went wrong. The registration key is invalid or has expired."
msgstr ""
"Etwas ist schief gegangen. Der Registrierungscode ist ungültig oder ist "
"abgelaufen."
#: logindata/templates/logindata/register_failed.html:15
msgid "If you think this is a mistake, please"
msgstr "Falls du denkst, dass das ein Fehler ist, bitte"
#: logindata/templates/logindata/register_failed.html:15
msgid "contact us."
msgstr "kontaktiere uns."
#: logindata/templates/logindata/register_form.html:6
#: logindata/templates/logindata/register_password.html:6
msgid "Register"
msgstr "Registrieren"
#: logindata/templates/logindata/register_form.html:15
#: logindata/templates/logindata/register_password.html:13
msgid "Welcome, "
msgstr "Willkommen, "
#: logindata/templates/logindata/register_form.html:16
msgid ""
"To set your personal login data, please enter the password that you received."
msgstr ""
"Um deine persönlichen Zugansdaten festzulegen, gib bitte das Passwort ein, "
"das du erhalten hast."
#: logindata/templates/logindata/register_form.html:30
#: logindata/templates/logindata/register_password.html:23
msgid "submit"
msgstr "Einreichen"
#: logindata/templates/logindata/register_password.html:13
msgid ""
"To set your personal login data for Kompass, please enter the password that "
"you received."
msgstr ""
"Um deine persönlichen Zugangsdaten festzulegen, gib bitte das Passwort ein, "
"das du erhalten hast."
#: logindata/templates/logindata/register_success.html:5
msgid "Registration successful"
msgstr "Zugangsdaten erfolgreich festgelegt"
#: logindata/templates/logindata/register_success.html:12
msgid "You successfully set your login data. You can now proceed to"
msgstr ""
"Du hast deine Zugangsdaten erfolgreich festgelegt. Du kannst nun weiter zum"
#: logindata/views.py:59
msgid "You entered a wrong password."
msgstr "Das eingegebene Passwort ist falsch."
#: templates/admin/finance/statementconfirmed/change_form_object_tools.html:8 #: templates/admin/finance/statementconfirmed/change_form_object_tools.html:8
msgid "Unconfirm" msgid "Unconfirm"
msgstr "Bestätigung zurücknehmen" msgstr "Bestätigung zurücknehmen"
@ -87,6 +171,10 @@ msgstr "Seminarbericht erstellen"
msgid "Submit statement" msgid "Submit statement"
msgstr "Abrechnung einreichen" msgstr "Abrechnung einreichen"
#: templates/admin/members/member/change_form_object_tools.html:8
msgid "Invite as user"
msgstr "Als Kompassbenutzer:in einladen"
#: templates/admin/members/memberwaitinglist/change_form_object_tools.html:8 #: templates/admin/members/memberwaitinglist/change_form_object_tools.html:8
#: templates/admin/members/memberwaitinglist/submit_line.html:9 #: templates/admin/members/memberwaitinglist/submit_line.html:9
msgid "Invite to group" msgid "Invite to group"

@ -82,6 +82,10 @@ class FilteredMemberFieldMixin:
return field return field
class InviteAsUserForm(forms.Form):
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
class PermissionOnGroupInline(admin.StackedInline): class PermissionOnGroupInline(admin.StackedInline):
model = PermissionGroup model = PermissionGroup
extra = 1 extra = 1
@ -214,7 +218,7 @@ class MemberAdmin(CommonAdminMixin, admin.ModelAdmin):
#} #}
change_form_template = "members/change_member.html" change_form_template = "members/change_member.html"
ordering = ('lastname',) ordering = ('lastname',)
actions = ['request_echo', 'invite_as_user'] actions = ['request_echo', 'invite_as_user_action']
list_per_page = 25 list_per_page = 25
sensitive_fields = ['iban', 'registration_form', 'comments'] sensitive_fields = ['iban', 'registration_form', 'comments']
@ -291,17 +295,55 @@ class MemberAdmin(CommonAdminMixin, admin.ModelAdmin):
messages.success(request, _('Successfully invited %(name)s as user.') % {'name': queryset[0].name}) messages.success(request, _('Successfully invited %(name)s as user.') % {'name': queryset[0].name})
else: else:
messages.success(request, _('Successfully invited selected members to join as users.')) messages.success(request, _('Successfully invited selected members to join as users.'))
invite_as_user.short_description = _('Invite selected members to join Kompass as users.')
def has_may_invite_as_user_permission(self, request):
return request.user.has_perm('%s.%s' % (self.opts.app_label, 'may_invite_as_user'))
def invite_as_user_action(self, request, queryset):
if not request.user.has_perm('members.may_invite_as_user'):
messages.error(request, _('Permission denied.'))
return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (self.opts.app_label, self.opts.model_name)))
if "apply" in request.POST:
self.invite_as_user(request, queryset)
return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (self.opts.app_label, self.opts.model_name)))
context = dict(self.admin_site.each_context(request),
title=_('Invite as user'),
opts=self.opts,
members=queryset,
form=InviteAsUserForm(initial={'_selected_action': queryset.values_list('id', flat=True)}))
return render(request, 'admin/invite_selected_as_user.html', context=context)
invite_as_user_action.short_description = _('Invite selected members to join Kompass as users.')
invite_as_user_action.allowed_permissions = ('may_invite_as_user',)
def invite_as_user_view(self, request, object_id): def invite_as_user_view(self, request, object_id):
if not request.user.has_perm('members.may_invite_as_user'):
messages.error(request, _('Permission denied.'))
return HttpResponseRedirect(reverse('admin:%s_%s_change' % (self.opts.app_label, self.opts.model_name),
args=(object_id,)))
try: try:
m = Member.objects.get(pk=object_id) m = Member.objects.get(pk=object_id)
except Member.DoesNotExist: except Member.DoesNotExist:
messages.error(request, _("Member not found.")) messages.error(request, _("Member not found."))
return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (self.opts.app_label, self.opts.model_name))) return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (self.opts.app_label, self.opts.model_name)))
self.invite_as_user(request, Member.objects.filter(pk=object_id)) if m.user:
return HttpResponseRedirect(reverse('admin:%s_%s_change' % (self.opts.app_label, self.opts.model_name), messages.error(request,
args=(object_id,))) _("%(name)s already has login data.") % {'name': str(m)})
return HttpResponseRedirect(reverse('admin:%s_%s_change' % (self.opts.app_label, self.opts.model_name),
args=(object_id,)))
if "apply" in request.POST:
self.invite_as_user(request, Member.objects.filter(pk=object_id))
return HttpResponseRedirect(reverse('admin:%s_%s_change' % (self.opts.app_label, self.opts.model_name),
args=(object_id,)))
context = dict(self.admin_site.each_context(request),
title=_('Invite as user'),
opts=self.opts,
member=m,
object=m)
if m.invite_as_user_key:
messages.warning(request, _('%(name)s already has a pending invitation as user.' % {'name': str(m)}))
return render(request, 'admin/invite_as_user.html', context=context)
def activity_score(self, obj): def activity_score(self, obj):
score = obj._activity_score score = obj._activity_score
@ -560,7 +602,8 @@ class MemberWaitingListAdmin(CommonAdminMixin, admin.ModelAdmin):
messages.success(request, messages.success(request,
_("Successfully invited %(name)s to %(group)s.") % {'name': waiter.name, 'group': waiter.invited_for_group.name}) _("Successfully invited %(name)s to %(group)s.") % {'name': waiter.name, 'group': waiter.invited_for_group.name})
return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (waiter._meta.app_label, waiter._meta.model_name))) return HttpResponseRedirect(reverse('admin:%s_%s_change' % (waiter._meta.app_label, waiter._meta.model_name),
args=(object_id,)))
context = dict(self.admin_site.each_context(request), context = dict(self.admin_site.each_context(request),
title=_('Select group for invitation'), title=_('Select group for invitation'),
@ -572,6 +615,7 @@ class MemberWaitingListAdmin(CommonAdminMixin, admin.ModelAdmin):
'admin/invite_for_group.html', 'admin/invite_for_group.html',
context=context) context=context)
class RegistrationPasswordInline(admin.TabularInline): class RegistrationPasswordInline(admin.TabularInline):
model = RegistrationPassword model = RegistrationPassword
extra = 0 extra = 0

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-19 01:19+0100\n" "POT-Creation-Date: 2024-11-24 01:14+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,182 +18,220 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: members/admin.py:124 members/models.py:370 #: members/admin.py:126 members/models.py:371
msgid "Registration complete" msgid "Registration complete"
msgstr "Anmeldung vollständig" msgstr "Anmeldung vollständig"
#: members/admin.py:130 #: members/admin.py:132
msgid "True" msgid "True"
msgstr "Ja" msgstr "Ja"
#: members/admin.py:131 #: members/admin.py:133
msgid "False" msgid "False"
msgstr "Nein" msgstr "Nein"
#: members/admin.py:132 #: members/admin.py:134
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: members/admin.py:181 members/admin.py:318 #: members/admin.py:183 members/admin.py:395
msgid "Contact information" msgid "Contact information"
msgstr "Kontaktinformationen" msgstr "Kontaktinformationen"
#: members/admin.py:186 members/admin.py:323 #: members/admin.py:188 members/admin.py:400
msgid "Skills" msgid "Skills"
msgstr "Fähigkeiten" msgstr "Fähigkeiten"
#: members/admin.py:191 members/admin.py:328 #: members/admin.py:193 members/admin.py:405
msgid "Others" msgid "Others"
msgstr "Sonstiges" msgstr "Sonstiges"
#: members/admin.py:197 members/admin.py:333 #: members/admin.py:199 members/admin.py:410
msgid "Organizational" msgid "Organizational"
msgstr "Organisatorisches" msgstr "Organisatorisches"
#: members/admin.py:260 #: members/admin.py:280
msgid "Compose new mail to selected members" msgid "Compose new mail to selected members"
msgstr "Neue Nachricht an ausgewählte Teilnehmer verfassen" msgstr "Neue Nachricht an ausgewählte Teilnehmer verfassen"
#: members/admin.py:266 #: members/admin.py:286
msgid "Echo required" msgid "Echo required"
msgstr "Rückmeldung erforderlich" msgstr "Rückmeldung erforderlich"
#: members/admin.py:268 #: members/admin.py:288
msgid "Successfully requested echo from selected members." msgid "Successfully requested echo from selected members."
msgstr "" msgstr ""
"Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer verschickt." "Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer verschickt."
#: members/admin.py:269 #: members/admin.py:289
msgid "Request echo from selected members" msgid "Request echo from selected members"
msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer verschicken" msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer verschicken"
#: members/admin.py:286 #: members/admin.py:295
#, python-format
msgid "Successfully invited %(name)s as user."
msgstr "Erfolgreich %(name)s aufgefordert Zugangsdaten zu wählen."
#: members/admin.py:297
msgid "Successfully invited selected members to join as users."
msgstr ""
"Erfolgreich ausgewählte Teilnehmer:innen aufgefordert Zugangsdaten zu wählen."
#: members/admin.py:304 members/admin.py:321
msgid "Permission denied."
msgstr "Fehlende Berechtigungen."
#: members/admin.py:311 members/admin.py:340
#: members/templates/admin/invite_as_user.html:21
msgid "Invite as user"
msgstr "Kompass Zugangsdaten wählen lassen"
#: members/admin.py:316
msgid "Invite selected members to join Kompass as users."
msgstr "Ausgewählte Teilnehmer:innen Kompass Zugangsdaten wählen lassen."
#: members/admin.py:327
msgid "Member not found."
msgstr "Teilnehmer:in nicht gefunden."
#: members/admin.py:331
#, python-format
msgid "%(name)s already has login data."
msgstr "%(name)s hat schon Zugangsdaten."
#: members/admin.py:345
#, python-format
msgid "%(name)s already has a pending invitation as user."
msgstr ""
"%(name)s hat bereits eine ausstehende Aufforderung Zugangsdaten zu wählen."
#: members/admin.py:363
msgid "activity" msgid "activity"
msgstr "Aktivität" msgstr "Aktivität"
#: members/admin.py:296 members/models.py:53 members/models.py:1364 #: members/admin.py:373 members/models.py:53 members/models.py:1379
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: members/admin.py:367 #: members/admin.py:444
msgid "Successfully requested mail confirmation from selected registrations." msgid "Successfully requested mail confirmation from selected registrations."
msgstr "Aufforderung zur Bestätigung der Email Adresse versendet." msgstr "Aufforderung zur Bestätigung der Email Adresse versendet."
#: members/admin.py:368 #: members/admin.py:445
msgid "Request mail confirmation from selected registrations" msgid "Request mail confirmation from selected registrations"
msgstr "Aufforderung zur Bestätigung der Email Adresse versenden" msgstr "Aufforderung zur Bestätigung der Email Adresse versenden"
#: members/admin.py:375 members/admin.py:409 #: members/admin.py:452 members/admin.py:486
#, python-format #, python-format
msgid "Successfully confirmed %(name)s." msgid "Successfully confirmed %(name)s."
msgstr "Registrierung von %(name)s erfolgreich bestätigt." msgstr "Registrierung von %(name)s erfolgreich bestätigt."
#: members/admin.py:379 members/admin.py:412 #: members/admin.py:456 members/admin.py:489
#, python-format #, python-format
msgid "Can't confirm. %(name)s has unconfirmed email addresses." msgid "Can't confirm. %(name)s has unconfirmed email addresses."
msgstr "Bestätigung nicht möglich. %(name)s hat unbestätigte Emailadressen." msgstr "Bestätigung nicht möglich. %(name)s hat unbestätigte Emailadressen."
#: members/admin.py:384 #: members/admin.py:461
msgid "Successfully confirmed multiple registrations." msgid "Successfully confirmed multiple registrations."
msgstr "Erfolgreich mehrere Registrierungen bestätigt." msgstr "Erfolgreich mehrere Registrierungen bestätigt."
#: members/admin.py:386 #: members/admin.py:463
msgid "" msgid ""
"Failed to confirm some registrations because of unconfirmed email addresses." "Failed to confirm some registrations because of unconfirmed email addresses."
msgstr "" msgstr ""
"Einige Bestätigungen fehlgeschlagen, weil Emailadressen noch nicht bestätigt " "Einige Bestätigungen fehlgeschlagen, weil Emailadressen noch nicht bestätigt "
"sind." "sind."
#: members/admin.py:387 #: members/admin.py:464
msgid "Confirm selected registrations" msgid "Confirm selected registrations"
msgstr "Ausgewählte Registrierungen bestätigen" msgstr "Ausgewählte Registrierungen bestätigen"
#: members/admin.py:403 #: members/admin.py:480
#, python-format #, python-format
msgid "Successfully demoted %(name)s to waiter." msgid "Successfully demoted %(name)s to waiter."
msgstr "%(name)s zurück auf die Warteliste gesetzt." msgstr "%(name)s zurück auf die Warteliste gesetzt."
#: members/admin.py:404 #: members/admin.py:481
msgid "Demote selected registrations to waiters." msgid "Demote selected registrations to waiters."
msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen." msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen."
#: members/admin.py:419 members/models.py:377 members/models.py:703 #: members/admin.py:496 members/models.py:378 members/models.py:718
#: members/models.py:1109 #: members/models.py:1124
msgid "Group" msgid "Group"
msgstr "Gruppe" msgstr "Gruppe"
#: members/admin.py:453 #: members/admin.py:530
#, python-format #, python-format
msgid "Successfully asked %(name)s to confirm their waiting status." msgid "Successfully asked %(name)s to confirm their waiting status."
msgstr "Erfolgreich %(name)s aufgefordert den Wartelistenplatz zu bestätigen." msgstr "Erfolgreich %(name)s aufgefordert den Wartelistenplatz zu bestätigen."
#: members/admin.py:454 #: members/admin.py:531
msgid "Ask selected waiters to confirm their waiting status" msgid "Ask selected waiters to confirm their waiting status"
msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen" msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen"
#: members/admin.py:463 members/admin.py:519 #: members/admin.py:540 members/admin.py:596
msgid "" msgid ""
"An error occurred while trying to invite said members. Please try again." "An error occurred while trying to invite said members. Please try again."
msgstr "" msgstr ""
"Beim Einladen dieser Personen ist ein Fehler aufgetreten. Bitte versuche es " "Beim Einladen dieser Personen ist ein Fehler aufgetreten. Bitte versuche es "
"nochmal. " "nochmal. "
#: members/admin.py:471 members/admin.py:526 #: members/admin.py:548 members/admin.py:603
#, python-format #, python-format
msgid "Successfully invited %(name)s to %(group)s." msgid "Successfully invited %(name)s to %(group)s."
msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen." msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen."
#: members/admin.py:475 members/admin.py:531 #: members/admin.py:552 members/admin.py:609
msgid "Select group for invitation" msgid "Select group for invitation"
msgstr "Wähle Gruppe für Einladung aus" msgstr "Wähle Gruppe für Einladung aus"
#: members/admin.py:482 #: members/admin.py:559
msgid "Offer waiter a place in a group." msgid "Offer waiter a place in a group."
msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten." msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten."
#: members/admin.py:572 #: members/admin.py:651
msgid "Difficulty" msgid "Difficulty"
msgstr "Schwierigkeit" msgstr "Schwierigkeit"
#: members/admin.py:575 #: members/admin.py:654
msgid "Tour type" msgid "Tour type"
msgstr "Art der Tour" msgstr "Art der Tour"
#: members/admin.py:578 members/models.py:919 #: members/admin.py:657 members/models.py:934
msgid "Means of transportation" msgid "Means of transportation"
msgstr "Verkehrsmittel" msgstr "Verkehrsmittel"
#: members/admin.py:673 #: members/admin.py:752
#, python-format #, python-format
msgid "You are not allowed to view all members on note list %(name)s." msgid "You are not allowed to view all members on note list %(name)s."
msgstr "" msgstr ""
"Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Notizliste " "Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Notizliste "
"%(name)s anzusehen." "%(name)s anzusehen."
#: members/admin.py:683 #: members/admin.py:762
msgid "Generate PDF summary" msgid "Generate PDF summary"
msgstr "Übersicht erstellen" msgstr "Übersicht erstellen"
#: members/admin.py:721 #: members/admin.py:800
#, python-format #, python-format
msgid "You are not allowed to view all members on excursion %(name)s." msgid "You are not allowed to view all members on excursion %(name)s."
msgstr "" msgstr ""
"Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Ausfahrt " "Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Ausfahrt "
"%(name)s anzusehen." "%(name)s anzusehen."
#: members/admin.py:731 #: members/admin.py:810
msgid "Generate crisis intervention list" msgid "Generate crisis intervention list"
msgstr "Kriseninterventionsliste erstellen" msgstr "Kriseninterventionsliste erstellen"
#: members/admin.py:741 #: members/admin.py:820
msgid "Generate overview" msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen" msgstr "Hinweise für Jugendleiter erstellen"
#: members/admin.py:751 #: members/admin.py:830
msgid "Generate seminar report" msgid "Generate seminar report"
msgstr "Seminarbericht erstellen" msgstr "Seminarbericht erstellen"
#: members/admin.py:765 #: members/admin.py:844
msgid "Generate SJR application" msgid "Generate SJR application"
msgstr "SJR Antrag erstellen" msgstr "SJR Antrag erstellen"
@ -229,11 +267,11 @@ msgstr "Samstag"
msgid "Sunday" msgid "Sunday"
msgstr "Sonntag" msgstr "Sonntag"
#: members/models.py:54 members/models.py:905 #: members/models.py:54 members/models.py:920
msgid "Description" msgid "Description"
msgstr "Beschreibung" msgstr "Beschreibung"
#: members/models.py:60 members/models.py:897 #: members/models.py:60 members/models.py:912
#: members/templates/members/change_member.html:18 #: members/templates/members/change_member.html:18
msgid "Activity" msgid "Activity"
msgstr "Aktivität" msgstr "Aktivität"
@ -266,7 +304,7 @@ msgstr "Bis Jahrgang"
msgid "youth leaders" msgid "youth leaders"
msgstr "Jugendleiter" msgstr "Jugendleiter"
#: members/models.py:77 members/models.py:1191 #: members/models.py:77 members/models.py:1206
msgid "Starting time" msgid "Starting time"
msgstr "Zeitpunkt" msgstr "Zeitpunkt"
@ -430,346 +468,379 @@ msgstr "Bestätigt"
msgid "Login data" msgid "Login data"
msgstr "Zugangsdaten" msgstr "Zugangsdaten"
#: members/models.py:306 #: members/models.py:307
msgid "Good conduct certificate valid" msgid "Good conduct certificate valid"
msgstr "Führungszeugnis gültig" msgstr "Führungszeugnis gültig"
#: members/models.py:380 #: members/models.py:381
msgid "member" msgid "member"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:381 #: members/models.py:382
msgid "members" msgid "members"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:453 #: members/models.py:455
#, python-format #, python-format
msgid "New unconfirmed registration for group %(group)s" msgid "New unconfirmed registration for group %(group)s"
msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s" msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s"
#: members/models.py:660 members/models.py:853 members/models.py:864 #: members/models.py:666
#: members/models.py:1140 members/models.py:1147 msgid "Set login data for Kompass"
msgstr "Zugangsdaten für Kompass wählen"
#: members/models.py:675 members/models.py:868 members/models.py:879
#: members/models.py:1155 members/models.py:1162
msgid "Member" msgid "Member"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:666 #: members/models.py:681
msgid "Emergency contact" msgid "Emergency contact"
msgstr "Notfallkontakt" msgstr "Notfallkontakt"
#: members/models.py:667 #: members/models.py:682
msgid "Emergency contacts" msgid "Emergency contacts"
msgstr "Notfallkontakte" msgstr "Notfallkontakte"
#: members/models.py:687 #: members/models.py:702
msgid "Unconfirmed registration" msgid "Unconfirmed registration"
msgstr "Unbestätigte Registrierung" msgstr "Unbestätigte Registrierung"
#: members/models.py:688 #: members/models.py:703
msgid "Unconfirmed registrations" msgid "Unconfirmed registrations"
msgstr "Unbestätigte Registrierungen" msgstr "Unbestätigte Registrierungen"
#: members/models.py:702 members/models.py:747 #: members/models.py:717 members/models.py:762
msgid "Waiter" msgid "Waiter"
msgstr "Wartende Person" msgstr "Wartende Person"
#: members/models.py:704 #: members/models.py:719
msgid "Invitation date" msgid "Invitation date"
msgstr "Einladungsdatum" msgstr "Einladungsdatum"
#: members/models.py:705 members/templates/members/reject_success.html:6 #: members/models.py:720 members/templates/members/reject_success.html:6
#: members/templates/members/reject_success.html:11 #: members/templates/members/reject_success.html:11
msgid "Invitation rejected" msgid "Invitation rejected"
msgstr "Einladung abgelehnt" msgstr "Einladung abgelehnt"
#: members/models.py:709 #: members/models.py:724
msgid "Invitation to group" msgid "Invitation to group"
msgstr "Gruppeneinladung" msgstr "Gruppeneinladung"
#: members/models.py:710 #: members/models.py:725
msgid "Invitations to groups" msgid "Invitations to groups"
msgstr "Gruppeneinladungen" msgstr "Gruppeneinladungen"
#: members/models.py:717 #: members/models.py:732
msgid "Rejected" msgid "Rejected"
msgstr "Abgelehnt" msgstr "Abgelehnt"
#: members/models.py:719 #: members/models.py:734
msgid "Expired" msgid "Expired"
msgstr "Abgelaufen" msgstr "Abgelaufen"
#: members/models.py:721 #: members/models.py:736
msgid "Undecided" msgid "Undecided"
msgstr "Ausstehend" msgstr "Ausstehend"
#: members/models.py:722 #: members/models.py:737
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: members/models.py:733 #: members/models.py:748
msgid "Do you want to tell us something else?" msgid "Do you want to tell us something else?"
msgstr "Möchtest du uns noch etwas mitteilen?" msgstr "Möchtest du uns noch etwas mitteilen?"
#: members/models.py:734 #: members/models.py:749
msgid "application date" msgid "application date"
msgstr "Bewerbungsdatum" msgstr "Bewerbungsdatum"
#: members/models.py:736 #: members/models.py:751
msgid "Last wait confirmation" msgid "Last wait confirmation"
msgstr "Letzte Wartebestätigung" msgstr "Letzte Wartebestätigung"
#: members/models.py:740 #: members/models.py:755
msgid "Last reminder" msgid "Last reminder"
msgstr "Letzte Erinnerung" msgstr "Letzte Erinnerung"
#: members/models.py:741 #: members/models.py:756
msgid "Missed reminders" msgid "Missed reminders"
msgstr "Verpasste Erinnerungen" msgstr "Verpasste Erinnerungen"
#: members/models.py:748 #: members/models.py:763
msgid "Waiters" msgid "Waiters"
msgstr "Warteliste" msgstr "Warteliste"
#: members/models.py:772 #: members/models.py:787
msgid "Waiting status confirmed" msgid "Waiting status confirmed"
msgstr "Wartelistenplatz bestätigt" msgstr "Wartelistenplatz bestätigt"
#: members/models.py:779 #: members/models.py:794
msgid "Waiting confirmation needed" msgid "Waiting confirmation needed"
msgstr "Wartelistenplatzbestätigung erforderlich" msgstr "Wartelistenplatzbestätigung erforderlich"
#: members/models.py:832 #: members/models.py:847
msgid "Invitation to trial group meeting" msgid "Invitation to trial group meeting"
msgstr "Einladung zu Schnupperstunde" msgstr "Einladung zu Schnupperstunde"
#: members/models.py:844 #: members/models.py:859
msgid "Unregistered from waiting list" msgid "Unregistered from waiting list"
msgstr "Von der Warteliste abgemeldet" msgstr "Von der Warteliste abgemeldet"
#: members/models.py:858 #: members/models.py:873
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: members/models.py:865 members/models.py:1148 #: members/models.py:880 members/models.py:1163
msgid "Members" msgid "Members"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:899 #: members/models.py:914
msgid "Place" msgid "Place"
msgstr "Stützpunkt / Ort" msgstr "Stützpunkt / Ort"
#: members/models.py:900 #: members/models.py:915
msgid "Destination (optional)" msgid "Destination (optional)"
msgstr "ggf. Ziel" msgstr "ggf. Ziel"
#: members/models.py:902 #: members/models.py:917
msgid "e.g. a peak" msgid "e.g. a peak"
msgstr "z.B. ein Gipfel" msgstr "z.B. ein Gipfel"
#: members/models.py:903 #: members/models.py:918
msgid "Begin" msgid "Begin"
msgstr "Anfang" msgstr "Anfang"
#: members/models.py:904 #: members/models.py:919
msgid "End (optional)" msgid "End (optional)"
msgstr "Ende" msgstr "Ende"
#: members/models.py:907 #: members/models.py:922
msgid "Groups" msgid "Groups"
msgstr "Gruppen" msgstr "Gruppen"
#: members/models.py:920 #: members/models.py:935
msgid "Kilometers traveled" msgid "Kilometers traveled"
msgstr "Fahrstrecke in Kilometer" msgstr "Fahrstrecke in Kilometer"
#: members/models.py:923 #: members/models.py:938
msgid "Categories" msgid "Categories"
msgstr "Kategorien" msgstr "Kategorien"
#: members/models.py:924 #: members/models.py:939
msgid "easy" msgid "easy"
msgstr "leicht" msgstr "leicht"
#: members/models.py:924 #: members/models.py:939
msgid "medium" msgid "medium"
msgstr "mittel" msgstr "mittel"
#: members/models.py:924 #: members/models.py:939
msgid "hard" msgid "hard"
msgstr "schwer" msgstr "schwer"
#: members/models.py:934 members/models.py:1171 #: members/models.py:949 members/models.py:1186
msgid "Excursion" msgid "Excursion"
msgstr "Ausfahrt" msgstr "Ausfahrt"
#: members/models.py:935 #: members/models.py:950
msgid "Excursions" msgid "Excursions"
msgstr "Ausfahrten" msgstr "Ausfahrten"
#: members/models.py:1086 members/models.py:1162 members/models.py:1378 #: members/models.py:1101 members/models.py:1177 members/models.py:1393
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
#: members/models.py:1087 members/models.py:1105 members/models.py:1379 #: members/models.py:1102 members/models.py:1120 members/models.py:1394
msgid "Date" msgid "Date"
msgstr "Datum" msgstr "Datum"
#: members/models.py:1106 #: members/models.py:1121
msgid "Location" msgid "Location"
msgstr "Ort" msgstr "Ort"
#: members/models.py:1107 #: members/models.py:1122
msgid "Topic" msgid "Topic"
msgstr "Thema" msgstr "Thema"
#: members/models.py:1131 #: members/models.py:1146
msgid "Jugendleiter" msgid "Jugendleiter"
msgstr "Jugendleiter" msgstr "Jugendleiter"
#: members/models.py:1134 #: members/models.py:1149
msgid "Klettertreff" msgid "Klettertreff"
msgstr "Klettertreff" msgstr "Klettertreff"
#: members/models.py:1135 #: members/models.py:1150
msgid "Klettertreffs" msgid "Klettertreffs"
msgstr "Klettertreffs" msgstr "Klettertreffs"
#: members/models.py:1153 #: members/models.py:1168
msgid "Password" msgid "Password"
msgstr "Passwort" msgstr "Passwort"
#: members/models.py:1156 #: members/models.py:1171
msgid "registration password" msgid "registration password"
msgstr "Registrierungspassort" msgstr "Registrierungspassort"
#: members/models.py:1157 #: members/models.py:1172
msgid "registration passwords" msgid "registration passwords"
msgstr "Registrierungspasswörter" msgstr "Registrierungspasswörter"
#: members/models.py:1164 #: members/models.py:1179
msgid "Alpinistic goals" msgid "Alpinistic goals"
msgstr "Alpintechnische Ziele" msgstr "Alpintechnische Ziele"
#: members/models.py:1165 #: members/models.py:1180
msgid "Pedagogic goals" msgid "Pedagogic goals"
msgstr "Pädagogische Ziele" msgstr "Pädagogische Ziele"
#: members/models.py:1166 #: members/models.py:1181
msgid "Content and methods" msgid "Content and methods"
msgstr "Inhalte und Methoden" msgstr "Inhalte und Methoden"
#: members/models.py:1167 #: members/models.py:1182
msgid "Evaluation" msgid "Evaluation"
msgstr "Wertung" msgstr "Wertung"
#: members/models.py:1168 #: members/models.py:1183
msgid "Experiences and possible improvements" msgid "Experiences and possible improvements"
msgstr "Erfahrungen und Verbesserungsvorschläge" msgstr "Erfahrungen und Verbesserungsvorschläge"
#: members/models.py:1177 members/models.py:1198 #: members/models.py:1192 members/models.py:1213
msgid "LJP Proposal" msgid "LJP Proposal"
msgstr "Seminarbericht" msgstr "Seminarbericht"
#: members/models.py:1178 #: members/models.py:1193
msgid "LJP Proposals" msgid "LJP Proposals"
msgstr "Seminarberichte" msgstr "Seminarberichte"
#: members/models.py:1192 #: members/models.py:1207
msgid "Duration in hours" msgid "Duration in hours"
msgstr "Dauer in Stunden" msgstr "Dauer in Stunden"
#: members/models.py:1195 #: members/models.py:1210
msgid "Activity and method" msgid "Activity and method"
msgstr "Art der Aktion inkl. Methode" msgstr "Art der Aktion inkl. Methode"
#: members/models.py:1203 #: members/models.py:1218
msgid "Intervention" msgid "Intervention"
msgstr "Aktion" msgstr "Aktion"
#: members/models.py:1204 #: members/models.py:1219
msgid "Interventions" msgid "Interventions"
msgstr "Aktionen" msgstr "Aktionen"
#: members/models.py:1306 members/models.py:1336 #: members/models.py:1321 members/models.py:1351
msgid "May list members" msgid "May list members"
msgstr "Darf folgende Teilnehmer:innen listen" msgstr "Darf folgende Teilnehmer:innen listen"
#: members/models.py:1308 members/models.py:1338 #: members/models.py:1323 members/models.py:1353
msgid "May view members" msgid "May view members"
msgstr "Darf folgende Teilnehmer:innen anzeigen" msgstr "Darf folgende Teilnehmer:innen anzeigen"
#: members/models.py:1310 members/models.py:1340 #: members/models.py:1325 members/models.py:1355
msgid "May change members" msgid "May change members"
msgstr "Darf folgende Teilnehmer:innen ändern" msgstr "Darf folgende Teilnehmer:innen ändern"
#: members/models.py:1312 members/models.py:1342 #: members/models.py:1327 members/models.py:1357
msgid "May delete members" msgid "May delete members"
msgstr "Darf folgende Teilnehmer:innen löschen" msgstr "Darf folgende Teilnehmer:innen löschen"
#: members/models.py:1316 members/models.py:1346 #: members/models.py:1331 members/models.py:1361
msgid "May list members of groups" msgid "May list members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen listen" msgstr "Darf Teilnehmer:innen folgender Gruppen listen"
#: members/models.py:1318 members/models.py:1348 #: members/models.py:1333 members/models.py:1363
msgid "May view members of groups" msgid "May view members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen anzeigen" msgstr "Darf Teilnehmer:innen folgender Gruppen anzeigen"
#: members/models.py:1320 members/models.py:1350 #: members/models.py:1335 members/models.py:1365
msgid "May change members of groups" msgid "May change members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen ändern" msgstr "Darf Teilnehmer:innen folgender Gruppen ändern"
#: members/models.py:1322 members/models.py:1352 #: members/models.py:1337 members/models.py:1367
msgid "May delete members of groups" msgid "May delete members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen löschen" msgstr "Darf Teilnehmer:innen folgender Gruppen löschen"
#: members/models.py:1325 members/models.py:1326 members/models.py:1329 #: members/models.py:1340 members/models.py:1341 members/models.py:1344
msgid "Permissions" msgid "Permissions"
msgstr "Berechtigungen" msgstr "Berechtigungen"
#: members/models.py:1355 members/models.py:1356 members/models.py:1359 #: members/models.py:1370 members/models.py:1371 members/models.py:1374
msgid "Group permissions" msgid "Group permissions"
msgstr "Gruppenberechtigungen" msgstr "Gruppenberechtigungen"
#: members/models.py:1365 #: members/models.py:1380
msgid "Permission needed" msgid "Permission needed"
msgstr "Freigabe erforderlich" msgstr "Freigabe erforderlich"
#: members/models.py:1368 #: members/models.py:1383
msgid "Training category" msgid "Training category"
msgstr "Fortbildungstyp" msgstr "Fortbildungstyp"
#: members/models.py:1369 #: members/models.py:1384
msgid "Training categories" msgid "Training categories"
msgstr "Fortbildungstypen" msgstr "Fortbildungstypen"
#: members/models.py:1380 #: members/models.py:1395
msgid "Category" msgid "Category"
msgstr "Kategorien" msgstr "Kategorien"
#: members/models.py:1381 #: members/models.py:1396
msgid "Comments" msgid "Comments"
msgstr "Kommentar" msgstr "Kommentar"
#: members/models.py:1382 #: members/models.py:1397
msgid "Participated" msgid "Participated"
msgstr "Teilgenommmen" msgstr "Teilgenommmen"
#: members/models.py:1383 #: members/models.py:1398
msgid "Passed" msgid "Passed"
msgstr "Bestanden" msgstr "Bestanden"
#: members/models.py:1386 #: members/models.py:1401
msgid "Training" msgid "Training"
msgstr "Fortbildung" msgstr "Fortbildung"
#: members/models.py:1387 #: members/models.py:1402
msgid "Trainings" msgid "Trainings"
msgstr "Fortbildungen" msgstr "Fortbildungen"
#: members/templates/admin/invite_as_user.html:17
#: members/templates/admin/invite_for_group.html:17 #: members/templates/admin/invite_for_group.html:17
#: members/templates/admin/invite_selected_as_user.html:17
#: members/templates/admin/invite_selected_for_group.html:17 #: members/templates/admin/invite_selected_for_group.html:17
msgid "Home" msgid "Home"
msgstr "Start" msgstr "Start"
#: members/templates/admin/invite_as_user.html:27
#, python-format
msgid ""
"Do you want to invite %(member)s to set their login data for Kompass? They "
"will\n"
"receive an email with a link to set their username and password after "
"entering one of the current\n"
"active registration passwords."
msgstr ""
"Möchtest du %(member)s auffordern Zugangsdaten für den Kompass zu wählen? "
"%(member)s wird eine E-Mail mit einem Link erhalten, um, nach Eingabe eines "
"der aktiven Registrierungspasswörter, Benutzername und Passwort zu setzen."
#: members/templates/admin/invite_as_user.html:36
#: members/templates/admin/invite_for_group.html:51
#: members/templates/admin/invite_selected_as_user.html:48
#: members/templates/admin/invite_selected_for_group.html:52
msgid "Invite"
msgstr "Einladen"
#: members/templates/admin/invite_as_user.html:37
#: members/templates/admin/invite_for_group.html:52
#: members/templates/admin/invite_selected_as_user.html:49
#: members/templates/admin/invite_selected_for_group.html:53
msgid "Cancel"
msgstr "Abbrechen"
#: members/templates/admin/invite_for_group.html:21 #: members/templates/admin/invite_for_group.html:21
msgid "Invite to group" msgid "Invite to group"
msgstr "Zu Gruppe einladen" msgstr "Zu Gruppe einladen"
@ -788,15 +859,26 @@ msgstr "Du lädst die folgende Person ein:"
msgid "Please choose the group that you want to invite %(waiter)s to." msgid "Please choose the group that you want to invite %(waiter)s to."
msgstr "Bitte wähle die Gruppe aus zu der du %(waiter)s einladen möchtest." msgstr "Bitte wähle die Gruppe aus zu der du %(waiter)s einladen möchtest."
#: members/templates/admin/invite_for_group.html:51 #: members/templates/admin/invite_selected_as_user.html:20
#: members/templates/admin/invite_selected_for_group.html:52 msgid "Invite multiple members as users"
msgid "Invite" msgstr "Mehrere Teilnehmer:innen Zugangsdaten wählen lassen"
msgstr "Einladen"
#: members/templates/admin/invite_for_group.html:52 #: members/templates/admin/invite_selected_as_user.html:26
#: members/templates/admin/invite_selected_for_group.html:53 msgid "You selected the following members:"
msgid "Cancel" msgstr "Du hast die folgenden Teilnehmer:innen ausgewählt:"
msgstr "Abbrechen"
#: members/templates/admin/invite_selected_as_user.html:38
msgid ""
"Do you want to invite these members to set their login data for Kompass? "
"They will\n"
"receive an email with a link to set their username and password after "
"entering one of the current\n"
"active registration passwords."
msgstr ""
"Möchtest du diese Teilnehmer:innen auffordern Zugangsdaten für den Kompass "
"zu wählen?Sie werden eine E-Mail mit einem Link erhalten, um, nach Eingabe "
"eines der aktiven Registrierungspasswörter, Benutzername und Passwort zu "
"setzen."
#: members/templates/admin/invite_selected_for_group.html:20 #: members/templates/admin/invite_selected_for_group.html:20
msgid "Invite multiple waiters" msgid "Invite multiple waiters"

@ -384,6 +384,7 @@ class Member(Person):
('may_see_qualities', 'Is allowed to see the quality overview'), ('may_see_qualities', 'Is allowed to see the quality overview'),
('may_set_auth_user', 'Is allowed to set auth user member connections.'), ('may_set_auth_user', 'Is allowed to set auth user member connections.'),
('change_member_group', 'Can change the group field'), ('change_member_group', 'Can change the group field'),
('may_invite_as_user', 'Is allowed to invite a member to set login data.'),
) )
rules_permissions = { rules_permissions = {
'members': rules.always_allow, 'members': rules.always_allow,
@ -653,6 +654,11 @@ class Member(Person):
return False return False
def suggested_username(self):
"""Returns a suggested username given by {prename}.{lastname}."""
raw = "{0}.{1}".format(self.prename.lower(), self.lastname.lower())
return raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue')
def invite_as_user(self): def invite_as_user(self):
"""Invites the member to join Kompass as a user.""" """Invites the member to join Kompass as a user."""
self.invite_as_user_key = uuid.uuid4().hex self.invite_as_user_key = uuid.uuid4().hex

@ -0,0 +1,40 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static %}
{% block extrahead %}
{{ block.super }}
{{ media }}
<script src="{% static 'admin/js/cancel.js' %}" async></script>
<script type="text/javascript" src="{% static "admin/js/vendor/jquery/jquery.js" %}"></script>
<script type="text/javascript" src="{% static "admin/js/jquery.init.js" %}"></script>
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} invite-waiter
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
&rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
&rsaquo; <a href="{% url opts|admin_urlname:'change' object.pk|admin_urlquote %}">{{ object|truncatewords:"18" }}</a>
&rsaquo; {% translate 'Invite as user' %}
</div>
{% endblock %}
{% block content %}
<p>
{% blocktrans %}Do you want to invite {{ member }} to set their login data for Kompass? They will
receive an email with a link to set their username and password after entering one of the current
active registration passwords.{% endblocktrans %}
</p>
<form action="" method="post">
{% csrf_token %}
<input type="hidden" name="action" value="invite_as_user">
<input class="default" style="color: $default-link-color" type="submit" name="apply"
value="{% translate 'Invite' %}">
<a href="#" class="button cancel-link">{% translate "Cancel" %}</a>
</form>
{% endblock %}

@ -0,0 +1,52 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static %}
{% block extrahead %}
{{ block.super }}
{{ media }}
<script src="{% static 'admin/js/cancel.js' %}" async></script>
<script type="text/javascript" src="{% static "admin/js/vendor/jquery/jquery.js" %}"></script>
<script type="text/javascript" src="{% static "admin/js/jquery.init.js" %}"></script>
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} invite-waiter
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
&rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
&rsaquo; {% translate 'Invite multiple members as users' %}
</div>
{% endblock %}
{% block content %}
<p>
{% trans "You selected the following members:" %}
</p>
<p>
{% for member in members %}
<ul>
<li>
<a href="{% url 'admin:members_member_change' member.id %}">{{ member }}</a>
</li>
</ul>
{% endfor %}
</p>
<p>
{% blocktrans %}Do you want to invite these members to set their login data for Kompass? They will
receive an email with a link to set their username and password after entering one of the current
active registration passwords.{% endblocktrans %}
</p>
<form action="" method="post">
{% csrf_token %}
{{form}}
<input type="hidden" name="action" value="invite_as_user_action">
<input class="default" style="color: $default-link-color" type="submit" name="apply"
value="{% translate 'Invite' %}">
<a href="#" class="button cancel-link">{% translate "Cancel" %}</a>
</form>
{% endblock %}

@ -3,9 +3,11 @@
{% block object-tools-items %} {% block object-tools-items %}
{% if perms.members.may_invite_as_user %}
<li> <li>
<a class="historylink" href="{% url 'admin:members_member_inviteasuser' original.pk %}">{% trans 'Invite as user' %}</a> <a class="historylink" href="{% url 'admin:members_member_inviteasuser' original.pk %}">{% trans 'Invite as user' %}</a>
</li> </li>
{% endif %}
{{block.super}} {{block.super}}

Loading…
Cancel
Save