Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • hansegucker/AlekSIS-Core
  • pinguin/AlekSIS-Core
  • AlekSIS/official/AlekSIS-Core
  • sunweaver/AlekSIS-Core
  • sggua/AlekSIS-Core
  • edward/AlekSIS-Core
  • magicfelix/AlekSIS-Core
7 results
Show changes
Commits on Source (99)
Showing
with 1066 additions and 720 deletions
......@@ -9,6 +9,52 @@ and this project adheres to `Semantic Versioning`_.
Unreleased
----------
Added
~~~~~
* Use identicons where avatars are missing.
* Display personal photos instead of avatars based on a site preference.
* Add an account menu in the top navbar.
* Create a reusable snippet for avatar content.
* Allow to configure if additional field is required
* Allow to configure description of additional fields
* Allow configuring regex for allowed usernames
* [Dev] Support scheduled notifications.
* Implement StaticContentWidget
* Allow to enable password change independently of password reset
Changed
~~~~~~~
* Added a `Retry` button to the server error page
Fixed
~~~~~
* The ``reset password`` button on the login site used to overflow the card on smaller devices.
`2.7.4`_ - 2022-02-09
---------------------
Changed
~~~~~~~
* Allow disabling query caching with cachalot
* Add invitation key to success message when a person without e-mail address is invited by id
Fixed
~~~~~
* Only exactly one person without e-mail address could be invited
* No person was created and linked to the PersonInvitation object when invite by e-mail is used
* No valid data in the second e-mail field of the signup form when it was disabled
* Invitation options were displayed to superusers even when the feature was disabled
* Inviting newly created persons for registration failed
* Invited person was not displayed correctly in list of sent invitations
* [Docker] Do not clear cache in migration container die to session invalidation issues
* Notification email about user changes was broken
* SQL cache invalidation could fail when hitting OOT database
`2.7.3`_ - 2022-02-03
---------------------
......@@ -730,3 +776,4 @@ Fixed
.. _2.7.1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.7.1
.. _2.7.2: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.7.2
.. _2.7.3: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.7.3
.. _2.7.4: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.7.4
......@@ -18,6 +18,7 @@ from dj_cleavejs import CleaveWidget
from django_select2.forms import ModelSelect2MultipleWidget, ModelSelect2Widget, Select2Widget
from dynamic_preferences.forms import PreferenceForm
from guardian.shortcuts import assign_perm
from invitations.forms import InviteForm
from material import Fieldset, Layout, Row
from .mixins import ExtensibleForm, SchoolTermRelatedExtensibleForm
......@@ -29,6 +30,7 @@ from .models import (
GroupType,
OAuthApplication,
Person,
PersonInvitation,
SchoolTerm,
)
from .registries import (
......@@ -410,6 +412,31 @@ class InvitationCodeForm(forms.Form):
self.fields["code"].widget = CleaveWidget(blocks=blocks, delimiter="-", uppercase=True)
class PersonCreateInviteForm(InviteForm):
"""Custom form to create a person and invite them."""
first_name = forms.CharField(label=_("First name"), required=True)
last_name = forms.CharField(label=_("Last name"), required=True)
layout = Layout(
Row("first_name", "last_name"),
Row("email"),
)
def clean_email(self):
if Person.objects.filter(email=self.cleaned_data["email"]).exists():
raise ValidationError(_("A person is using this e-mail address"))
return super().clean_email()
def save(self, email):
person = Person.objects.create(
first_name=self.cleaned_data["first_name"],
last_name=self.cleaned_data["last_name"],
email=email,
)
return PersonInvitation.create(email=email, person=person)
class SelectPermissionForm(forms.Form):
"""Select a permission to assign."""
......@@ -597,6 +624,7 @@ class AccountRegisterForm(SignupForm, ExtensibleForm):
if person:
available_fields = [field.name for field in Person._meta.get_fields()]
self.fields["email2"].initial = person.email
for field in self.fields:
if field in available_fields and getattr(person, field):
self.fields[field].disabled = True
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: AlekSIS (School Information System) 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......@@ -38,7 +38,7 @@ msgstr ""
msgid "Home and mobile phone"
msgstr ""
#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
#: aleksis/core/templates/core/group/list.html:9
#: aleksis/core/templates/core/person/full.html:250
......@@ -99,145 +99,157 @@ msgstr ""
msgid "Group"
msgstr ""
#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
#: aleksis/core/forms.py:50 aleksis/core/forms.py:581
msgid "Base data"
msgstr ""
#: aleksis/core/forms.py:53
#: aleksis/core/forms.py:55
msgid "Address"
msgstr ""
#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
#: aleksis/core/forms.py:56 aleksis/core/forms.py:590
msgid "Contact data"
msgstr ""
#: aleksis/core/forms.py:56
#: aleksis/core/forms.py:58
msgid "Advanced personal data"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "New user"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "Create a new account"
msgstr ""
#: aleksis/core/forms.py:130
#: aleksis/core/forms.py:132
msgid "You cannot set a new username when also selecting an existing user."
msgstr ""
#: aleksis/core/forms.py:134
#: aleksis/core/forms.py:136
msgid "This username is already in use."
msgstr ""
#: aleksis/core/forms.py:151 aleksis/core/models.py:130
#: aleksis/core/forms.py:153 aleksis/core/models.py:130
msgid "School term"
msgstr ""
#: aleksis/core/forms.py:152
#: aleksis/core/forms.py:154
msgid "Common data"
msgstr ""
#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
#: aleksis/core/forms.py:155 aleksis/core/forms.py:207
#: aleksis/core/menus.py:254 aleksis/core/models.py:153
#: aleksis/core/templates/core/person/list.html:8
#: aleksis/core/templates/core/person/list.html:9
msgid "Persons"
msgstr ""
#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
#: aleksis/core/forms.py:156 aleksis/core/forms.py:592
msgid "Additional data"
msgstr ""
#: aleksis/core/forms.py:155 aleksis/core/models.py:206
#: aleksis/core/forms.py:157 aleksis/core/models.py:206
#: aleksis/core/models.py:514
msgid "Photo"
msgstr ""
#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
#: aleksis/core/forms.py:199 aleksis/core/forms.py:202
#: aleksis/core/models.py:73
msgid "Date"
msgstr ""
#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
#: aleksis/core/models.py:81
msgid "Time"
msgstr ""
#: aleksis/core/forms.py:231
#: aleksis/core/forms.py:233
msgid "From when until when should the announcement be displayed?"
msgstr ""
#: aleksis/core/forms.py:234
#: aleksis/core/forms.py:236
msgid "Who should see the announcement?"
msgstr ""
#: aleksis/core/forms.py:235
#: aleksis/core/forms.py:237
msgid "Write your announcement:"
msgstr ""
#: aleksis/core/forms.py:274
#: aleksis/core/forms.py:276
msgid "You are not allowed to create announcements which are only valid in the past."
msgstr ""
#: aleksis/core/forms.py:278
#: aleksis/core/forms.py:280
msgid "The from date and time must be earlier then the until date and time."
msgstr ""
#: aleksis/core/forms.py:287
#: aleksis/core/forms.py:289
msgid "You need at least one recipient."
msgstr ""
#: aleksis/core/forms.py:396
#: aleksis/core/forms.py:398
msgid "Invitation code"
msgstr ""
#: aleksis/core/forms.py:397
#: aleksis/core/forms.py:399
msgid "Please enter your invitation code."
msgstr ""
#: aleksis/core/forms.py:429
#: aleksis/core/forms.py:418 aleksis/core/models.py:181
msgid "First name"
msgstr ""
#: aleksis/core/forms.py:419 aleksis/core/models.py:182
msgid "Last name"
msgstr ""
#: aleksis/core/forms.py:428
msgid "A person is using this e-mail address"
msgstr ""
#: aleksis/core/forms.py:456
msgid "Who should get the permission?"
msgstr ""
#: aleksis/core/forms.py:430
#: aleksis/core/forms.py:457
msgid "On what?"
msgstr ""
#: aleksis/core/forms.py:456
#: aleksis/core/forms.py:483
msgid "Select objects which the permission should be granted for:"
msgstr ""
#: aleksis/core/forms.py:459
#: aleksis/core/forms.py:486
msgid "Grant the permission for all objects"
msgstr ""
#: aleksis/core/forms.py:467
#: aleksis/core/forms.py:494
msgid "You must select at least one group or person which should get the permission."
msgstr ""
#: aleksis/core/forms.py:472
#: aleksis/core/forms.py:499
msgid "You must grant the permission to all objects and/or to some objects."
msgstr ""
#: aleksis/core/forms.py:559
#: aleksis/core/forms.py:586
msgid "Adress data"
msgstr ""
#: aleksis/core/forms.py:571
#: aleksis/core/forms.py:598
msgid "Account data"
msgstr ""
#: aleksis/core/forms.py:578
#: aleksis/core/forms.py:605
msgid "Password"
msgstr ""
#: aleksis/core/forms.py:581
#: aleksis/core/forms.py:608
msgid "Password (again)"
msgstr ""
#: aleksis/core/forms.py:747
#: aleksis/core/forms.py:775
msgid "No valid selection."
msgstr ""
......@@ -267,7 +279,7 @@ msgstr ""
msgid "Login"
msgstr ""
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:20
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
#: aleksis/core/templates/socialaccount/signup.html:23
msgid "Sign up"
msgstr ""
......@@ -522,18 +534,10 @@ msgstr ""
msgid "male"
msgstr ""
#: aleksis/core/models.py:178 aleksis/core/models.py:1219
#: aleksis/core/models.py:178 aleksis/core/models.py:1227
msgid "Linked user"
msgstr ""
#: aleksis/core/models.py:181
msgid "First name"
msgstr ""
#: aleksis/core/models.py:182
msgid "Last name"
msgstr ""
#: aleksis/core/models.py:184
msgid "Additional name(s)"
msgstr ""
......@@ -822,7 +826,7 @@ msgstr ""
msgid "Menu"
msgstr ""
#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
#: aleksis/core/templates/oauth2_provider/application/detail.html:26
msgid "Icon"
msgstr ""
......@@ -911,55 +915,55 @@ msgstr ""
msgid "E-Mail address"
msgstr ""
#: aleksis/core/models.py:1169
#: aleksis/core/models.py:1177
msgid "Owner"
msgstr ""
#: aleksis/core/models.py:1173
#: aleksis/core/models.py:1181
msgid "File expires at"
msgstr ""
#: aleksis/core/models.py:1175
#: aleksis/core/models.py:1183
msgid "Generated HTML file"
msgstr ""
#: aleksis/core/models.py:1177
#: aleksis/core/models.py:1185
msgid "Generated PDF file"
msgstr ""
#: aleksis/core/models.py:1184
#: aleksis/core/models.py:1192
msgid "PDF file"
msgstr ""
#: aleksis/core/models.py:1185
#: aleksis/core/models.py:1193
msgid "PDF files"
msgstr ""
#: aleksis/core/models.py:1190
#: aleksis/core/models.py:1198
msgid "Task result"
msgstr ""
#: aleksis/core/models.py:1193
#: aleksis/core/models.py:1201
msgid "Task user"
msgstr ""
#: aleksis/core/models.py:1205
#: aleksis/core/models.py:1213
msgid "Task user assignment"
msgstr ""
#: aleksis/core/models.py:1206
#: aleksis/core/models.py:1214
msgid "Task user assignments"
msgstr ""
#: aleksis/core/models.py:1222
#: aleksis/core/models.py:1230
msgid "Additional attributes"
msgstr ""
#: aleksis/core/models.py:1260
#: aleksis/core/models.py:1268
msgid "Allowed scopes that clients can request"
msgstr ""
#: aleksis/core/models.py:1270
#: aleksis/core/models.py:1278
msgid "This image will be shown as icon in the authorization flow. It should be squared."
msgstr ""
......@@ -1155,11 +1159,11 @@ msgstr ""
msgid "Country for phone number parsing"
msgstr ""
#: aleksis/core/settings.py:526
#: aleksis/core/settings.py:529
msgid "English"
msgstr ""
#: aleksis/core/settings.py:527
#: aleksis/core/settings.py:530
msgid "German"
msgstr ""
......@@ -1173,14 +1177,14 @@ msgid "Edit"
msgstr ""
#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
#: aleksis/core/tables.py:137
#: aleksis/core/tables.py:138
#: aleksis/core/templates/core/announcement/list.html:22
msgid "Actions"
msgstr ""
#: aleksis/core/tables.py:61 aleksis/core/tables.py:62
#: aleksis/core/tables.py:76 aleksis/core/tables.py:92
#: aleksis/core/tables.py:135
#: aleksis/core/tables.py:136
#: aleksis/core/templates/core/announcement/list.html:42
#: aleksis/core/templates/core/group/full.html:31
#: aleksis/core/templates/core/pages/delete.html:22
......@@ -2177,6 +2181,22 @@ msgstr ""
msgid "Save preferences"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:5
msgid "The invite feature is disabled"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:13
msgid "The invite feature is disabled."
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:15
msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:16
msgid "site preferences page"
msgstr ""
#: aleksis/core/templates/invitations/enter.html:21
msgid "Accept your invitation"
msgstr ""
......@@ -2555,17 +2575,17 @@ msgid ""
" "
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:3
#: aleksis/core/templates/templated_email/person_changed.email:4
#, python-format
msgid "%(person)s changed their data!"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:6
#: aleksis/core/templates/templated_email/person_changed.email:7
#, python-format
msgid "the person %(person)s recently changed the following fields:"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:14
#: aleksis/core/templates/templated_email/person_changed.email:15
#, python-format
msgid ""
"\n"
......@@ -2965,148 +2985,148 @@ msgstr ""
msgid "The school term has been saved."
msgstr ""
#: aleksis/core/views.py:414
#: aleksis/core/views.py:417
msgid "The child groups were successfully saved."
msgstr ""
#: aleksis/core/views.py:433 aleksis/core/views.py:443
#: aleksis/core/views.py:436 aleksis/core/views.py:446
msgid "The person has been saved."
msgstr ""
#: aleksis/core/views.py:493
#: aleksis/core/views.py:496
msgid "The group has been saved."
msgstr ""
#: aleksis/core/views.py:590
#: aleksis/core/views.py:593
msgid "The announcement has been saved."
msgstr ""
#: aleksis/core/views.py:606
#: aleksis/core/views.py:609
msgid "The announcement has been deleted."
msgstr ""
#: aleksis/core/views.py:674
#: aleksis/core/views.py:677
msgid "The requested preference registry does not exist"
msgstr ""
#: aleksis/core/views.py:693
#: aleksis/core/views.py:696
msgid "The preferences have been saved successfully."
msgstr ""
#: aleksis/core/views.py:717
#: aleksis/core/views.py:720
msgid "The person has been deleted."
msgstr ""
#: aleksis/core/views.py:731
#: aleksis/core/views.py:734
msgid "The group has been deleted."
msgstr ""
#: aleksis/core/views.py:763
#: aleksis/core/views.py:766
msgid "The additional_field has been saved."
msgstr ""
#: aleksis/core/views.py:797
#: aleksis/core/views.py:800
msgid "The additional field has been deleted."
msgstr ""
#: aleksis/core/views.py:822
#: aleksis/core/views.py:825
msgid "The group type has been saved."
msgstr ""
#: aleksis/core/views.py:852
#: aleksis/core/views.py:855
msgid "The group type has been deleted."
msgstr ""
#: aleksis/core/views.py:885
#: aleksis/core/views.py:888
msgid "Progress: Run data checks"
msgstr ""
#: aleksis/core/views.py:886
#: aleksis/core/views.py:889
msgid "Run data checks …"
msgstr ""
#: aleksis/core/views.py:887
#: aleksis/core/views.py:890
msgid "The data checks were run successfully."
msgstr ""
#: aleksis/core/views.py:888
#: aleksis/core/views.py:891
msgid "There was a problem while running data checks."
msgstr ""
#: aleksis/core/views.py:904
#: aleksis/core/views.py:907
#, python-brace-format
msgid "The solve option '{solve_option_obj.verbose_name}' "
msgstr ""
#: aleksis/core/views.py:914
#: aleksis/core/views.py:917
msgid "The requested solve option does not exist"
msgstr ""
#: aleksis/core/views.py:946
#: aleksis/core/views.py:949
msgid "The dashboard widget has been saved."
msgstr ""
#: aleksis/core/views.py:976
#: aleksis/core/views.py:979
msgid "The dashboard widget has been created."
msgstr ""
#: aleksis/core/views.py:986
#: aleksis/core/views.py:989
msgid "The dashboard widget has been deleted."
msgstr ""
#: aleksis/core/views.py:1057
#: aleksis/core/views.py:1060
msgid "Your dashboard configuration has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1059
#: aleksis/core/views.py:1062
msgid "The configuration of the default dashboard has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1129
#: aleksis/core/views.py:1138
#, python-brace-format
msgid "The invitation was successfully created. The invitation code is {code}"
msgstr ""
#: aleksis/core/views.py:1220
#: aleksis/core/views.py:1229
msgid "We have successfully assigned the permissions."
msgstr ""
#: aleksis/core/views.py:1230
#: aleksis/core/views.py:1239
msgid "The global user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1240
#: aleksis/core/views.py:1249
msgid "The global group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1250
#: aleksis/core/views.py:1259
msgid "The object user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1260
#: aleksis/core/views.py:1269
msgid "The object group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1328
#: aleksis/core/views.py:1337
msgid "The requested PDF file does not exist"
msgstr ""
#: aleksis/core/views.py:1337 aleksis/core/views.py:1341
#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
msgid "The requested task does not exist or is not accessible"
msgstr ""
#: aleksis/core/views.py:1379
#: aleksis/core/views.py:1388
msgid "The third-party account could not be disconnected because it is the only login method available."
msgstr ""
#: aleksis/core/views.py:1386
#: aleksis/core/views.py:1395
msgid "The third-party account has been successfully disconnected."
msgstr ""
#: aleksis/core/views.py:1445
msgid "Person was invited successfully."
#: aleksis/core/views.py:1466
msgid "Person was invited successfully and an email with further instructions has been send to them."
msgstr ""
#: aleksis/core/views.py:1447
#: aleksis/core/views.py:1477
msgid "Person was already invited."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......
......@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: AlekSIS (School Information System) 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"PO-Revision-Date: 2022-01-31 16:15+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"POT-Creation-Date: 2022-02-08 23:16+0000\n"
"PO-Revision-Date: 2022-02-08 23:24+0000\n"
"Last-Translator: Tom Teichler <tom.teichler@teckids.org>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
"aleksis-core/de/>\n"
"Language: de_DE\n"
......@@ -25,7 +25,7 @@ msgstr "OpenID-Connect-Scope"
#: aleksis/core/apps.py:167
msgid "Given name, family name, link to profile and picture if existing."
msgstr "Vorname, Nachname, Link zum Profil und Bild falls vorhanden"
msgstr "Vorname, Nachname, Link zum Profil und Bild falls vorhanden."
#: aleksis/core/apps.py:168
msgid "Full home postal address"
......@@ -39,7 +39,7 @@ msgstr "E-Mail-Adresse"
msgid "Home and mobile phone"
msgstr "Festnetz- und Mobilfunknummer"
#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
#: aleksis/core/templates/core/group/list.html:9
#: aleksis/core/templates/core/person/full.html:250
......@@ -100,145 +100,157 @@ msgstr "Benutzer"
msgid "Group"
msgstr "Gruppe"
#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
#: aleksis/core/forms.py:50 aleksis/core/forms.py:581
msgid "Base data"
msgstr "Basisdaten"
#: aleksis/core/forms.py:53
#: aleksis/core/forms.py:55
msgid "Address"
msgstr "Adresse"
#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
#: aleksis/core/forms.py:56 aleksis/core/forms.py:590
msgid "Contact data"
msgstr "Kontaktdaten"
#: aleksis/core/forms.py:56
#: aleksis/core/forms.py:58
msgid "Advanced personal data"
msgstr "Zusätzliche persönliche Daten"
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "New user"
msgstr "Neuer Benutzer"
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "Create a new account"
msgstr "Neues Benutzerkonto erstellen"
#: aleksis/core/forms.py:130
#: aleksis/core/forms.py:132
msgid "You cannot set a new username when also selecting an existing user."
msgstr "Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen existierenden Benutzer auswählen."
#: aleksis/core/forms.py:134
#: aleksis/core/forms.py:136
msgid "This username is already in use."
msgstr "Dieser Benutzername wird bereits genutzt."
#: aleksis/core/forms.py:151 aleksis/core/models.py:130
#: aleksis/core/forms.py:153 aleksis/core/models.py:130
msgid "School term"
msgstr "Schuljahr"
#: aleksis/core/forms.py:152
#: aleksis/core/forms.py:154
msgid "Common data"
msgstr "Allgemeine Daten"
#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
#: aleksis/core/forms.py:155 aleksis/core/forms.py:207
#: aleksis/core/menus.py:254 aleksis/core/models.py:153
#: aleksis/core/templates/core/person/list.html:8
#: aleksis/core/templates/core/person/list.html:9
msgid "Persons"
msgstr "Personen"
#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
#: aleksis/core/forms.py:156 aleksis/core/forms.py:592
msgid "Additional data"
msgstr "Zusätzliche Datne"
#: aleksis/core/forms.py:155 aleksis/core/models.py:206
#: aleksis/core/forms.py:157 aleksis/core/models.py:206
#: aleksis/core/models.py:514
msgid "Photo"
msgstr "Foto"
#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
#: aleksis/core/forms.py:199 aleksis/core/forms.py:202
#: aleksis/core/models.py:73
msgid "Date"
msgstr "Datum"
#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
#: aleksis/core/models.py:81
msgid "Time"
msgstr "Zeit"
#: aleksis/core/forms.py:231
#: aleksis/core/forms.py:233
msgid "From when until when should the announcement be displayed?"
msgstr "Von wann bis wann soll die Ankündigung angezeigt werden?"
#: aleksis/core/forms.py:234
#: aleksis/core/forms.py:236
msgid "Who should see the announcement?"
msgstr "Wer soll die Ankündigung sehen?"
#: aleksis/core/forms.py:235
#: aleksis/core/forms.py:237
msgid "Write your announcement:"
msgstr "Schreiben Sie ihre Ankündigung:"
#: aleksis/core/forms.py:274
#: aleksis/core/forms.py:276
msgid "You are not allowed to create announcements which are only valid in the past."
msgstr "Sie dürfen keine Ankündigungen erstellen, die nur für die Vergangenheit gültig sind."
#: aleksis/core/forms.py:278
#: aleksis/core/forms.py:280
msgid "The from date and time must be earlier then the until date and time."
msgstr "Das Startdatum und die Startzeit müssen vor dem Enddatum und der Endzeit sein."
#: aleksis/core/forms.py:287
#: aleksis/core/forms.py:289
msgid "You need at least one recipient."
msgstr "Sie benötigen mindestens einen Empfänger."
#: aleksis/core/forms.py:396
#: aleksis/core/forms.py:398
msgid "Invitation code"
msgstr "Einladungscode"
#: aleksis/core/forms.py:397
#: aleksis/core/forms.py:399
msgid "Please enter your invitation code."
msgstr "Bitte geben Sie Ihren Einladungscode ein."
#: aleksis/core/forms.py:429
#: aleksis/core/forms.py:418 aleksis/core/models.py:181
msgid "First name"
msgstr "Vorname"
#: aleksis/core/forms.py:419 aleksis/core/models.py:182
msgid "Last name"
msgstr "Nachname"
#: aleksis/core/forms.py:428
msgid "A person is using this e-mail address"
msgstr "Eine Person nutzt diese E-Mail-Adresse"
#: aleksis/core/forms.py:456
msgid "Who should get the permission?"
msgstr "Wer soll die Berechtigung erhalten?"
#: aleksis/core/forms.py:430
#: aleksis/core/forms.py:457
msgid "On what?"
msgstr "Auf was?"
#: aleksis/core/forms.py:456
#: aleksis/core/forms.py:483
msgid "Select objects which the permission should be granted for:"
msgstr "Wählen Sie die Objekte aus, für welche die Berechtigung vergeben werden soll:"
#: aleksis/core/forms.py:459
#: aleksis/core/forms.py:486
msgid "Grant the permission for all objects"
msgstr "Vergebe die Berechtigung für alle Objekte"
#: aleksis/core/forms.py:467
#: aleksis/core/forms.py:494
msgid "You must select at least one group or person which should get the permission."
msgstr "Sie müssen mindestens eine Gruppe oder Person auswählen, welche die Berechtigung erhalten soll."
#: aleksis/core/forms.py:472
#: aleksis/core/forms.py:499
msgid "You must grant the permission to all objects and/or to some objects."
msgstr "Sie müssen die Berechtigung auf alle Objekte und/oder für einige Objekte vergeben."
#: aleksis/core/forms.py:559
#: aleksis/core/forms.py:586
msgid "Adress data"
msgstr "Adressdaten"
#: aleksis/core/forms.py:571
#: aleksis/core/forms.py:598
msgid "Account data"
msgstr "Kontodaten"
#: aleksis/core/forms.py:578
#: aleksis/core/forms.py:605
msgid "Password"
msgstr "Passwort"
#: aleksis/core/forms.py:581
#: aleksis/core/forms.py:608
msgid "Password (again)"
msgstr "Passwort wiederholen"
#: aleksis/core/forms.py:747
#: aleksis/core/forms.py:775
msgid "No valid selection."
msgstr "Keine gültige Auswahl."
......@@ -268,7 +280,7 @@ msgstr "Kein Backupergebnis gefunden!"
msgid "Login"
msgstr "Anmelden"
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:20
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
#: aleksis/core/templates/socialaccount/signup.html:23
msgid "Sign up"
msgstr "Registrieren"
......@@ -523,18 +535,10 @@ msgstr "weiblich"
msgid "male"
msgstr "männlich"
#: aleksis/core/models.py:178 aleksis/core/models.py:1219
#: aleksis/core/models.py:178 aleksis/core/models.py:1227
msgid "Linked user"
msgstr "Verknüpfter Benutzer"
#: aleksis/core/models.py:181
msgid "First name"
msgstr "Vorname"
#: aleksis/core/models.py:182
msgid "Last name"
msgstr "Nachname"
#: aleksis/core/models.py:184
msgid "Additional name(s)"
msgstr "Zusätzliche Namen"
......@@ -823,7 +827,7 @@ msgstr "Benutzerdefinierte Menüs"
msgid "Menu"
msgstr "Menü"
#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
#: aleksis/core/templates/oauth2_provider/application/detail.html:26
msgid "Icon"
msgstr "Symbol"
......@@ -912,55 +916,55 @@ msgstr "Kann Datenprüfungsprobleme lösen"
msgid "E-Mail address"
msgstr "E-Mail-Adresse"
#: aleksis/core/models.py:1169
#: aleksis/core/models.py:1177
msgid "Owner"
msgstr "Leiter"
#: aleksis/core/models.py:1173
#: aleksis/core/models.py:1181
msgid "File expires at"
msgstr "Datei abgelaufen am"
#: aleksis/core/models.py:1175
#: aleksis/core/models.py:1183
msgid "Generated HTML file"
msgstr "Generierte HTML-Datei"
#: aleksis/core/models.py:1177
#: aleksis/core/models.py:1185
msgid "Generated PDF file"
msgstr "Generierte PDF-Datei"
#: aleksis/core/models.py:1184
#: aleksis/core/models.py:1192
msgid "PDF file"
msgstr "PDF-Datei"
#: aleksis/core/models.py:1185
#: aleksis/core/models.py:1193
msgid "PDF files"
msgstr "PDF-Dateien"
#: aleksis/core/models.py:1190
#: aleksis/core/models.py:1198
msgid "Task result"
msgstr "Task-Ergebnis"
#: aleksis/core/models.py:1193
#: aleksis/core/models.py:1201
msgid "Task user"
msgstr "Task-Benutzer"
#: aleksis/core/models.py:1205
#: aleksis/core/models.py:1213
msgid "Task user assignment"
msgstr "Task-Benutzer-Zuordnung"
#: aleksis/core/models.py:1206
#: aleksis/core/models.py:1214
msgid "Task user assignments"
msgstr "Task-Benutzer-Zuordnungen"
#: aleksis/core/models.py:1222
#: aleksis/core/models.py:1230
msgid "Additional attributes"
msgstr "Zusätzliche Attribute"
#: aleksis/core/models.py:1260
#: aleksis/core/models.py:1268
msgid "Allowed scopes that clients can request"
msgstr "Erlaubte Scopes, die ein Client anfordern kann"
#: aleksis/core/models.py:1270
#: aleksis/core/models.py:1278
msgid "This image will be shown as icon in the authorization flow. It should be squared."
msgstr "Dieses Bild wird im Autorisierungs-Vorgang als Symbol angezeigt werden. Es sollte rechteckig sein."
......@@ -1156,11 +1160,11 @@ msgstr "Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganze
msgid "Country for phone number parsing"
msgstr "Land für das Einlesen von Telefonnummern"
#: aleksis/core/settings.py:526
#: aleksis/core/settings.py:529
msgid "English"
msgstr "Englisch"
#: aleksis/core/settings.py:527
#: aleksis/core/settings.py:530
msgid "German"
msgstr "Deutsch"
......@@ -1174,14 +1178,14 @@ msgid "Edit"
msgstr "Bearbeiten"
#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
#: aleksis/core/tables.py:137
#: aleksis/core/tables.py:138
#: aleksis/core/templates/core/announcement/list.html:22
msgid "Actions"
msgstr "Aktionen"
#: aleksis/core/tables.py:61 aleksis/core/tables.py:62
#: aleksis/core/tables.py:76 aleksis/core/tables.py:92
#: aleksis/core/tables.py:135
#: aleksis/core/tables.py:136
#: aleksis/core/templates/core/announcement/list.html:42
#: aleksis/core/templates/core/group/full.html:31
#: aleksis/core/templates/core/pages/delete.html:22
......@@ -2323,6 +2327,24 @@ msgstr "Einstellungen für %(instance)s"
msgid "Save preferences"
msgstr "Einstellungen speichern"
#: aleksis/core/templates/invitations/disabled.html:5
msgid "The invite feature is disabled"
msgstr "Die Einladungsfunktion ist deaktiviert"
#: aleksis/core/templates/invitations/disabled.html:13
msgid "The invite feature is disabled."
msgstr "Die Einladungsfunktion ist deaktiviert."
#: aleksis/core/templates/invitations/disabled.html:15
msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
msgstr ""
"Um sie zu aktivieren, nutzen Sie die Checkbox im Abschnitt \"Authentifikation"
"\" der "
#: aleksis/core/templates/invitations/disabled.html:16
msgid "site preferences page"
msgstr "Seiteneinstellungen"
#: aleksis/core/templates/invitations/enter.html:21
msgid "Accept your invitation"
msgstr "Ihre Einladung akzeptieren"
......@@ -2742,17 +2764,17 @@ msgstr ""
" Von %(trans_sender)s um %(trans_created_at)s\n"
" "
#: aleksis/core/templates/templated_email/person_changed.email:3
#: aleksis/core/templates/templated_email/person_changed.email:4
#, python-format
msgid "%(person)s changed their data!"
msgstr "%(person)s hat Daten verändert!"
#: aleksis/core/templates/templated_email/person_changed.email:6
#: aleksis/core/templates/templated_email/person_changed.email:7
#, python-format
msgid "the person %(person)s recently changed the following fields:"
msgstr "die Person %(person)s hat kürzlich die folgenden Felder geändert:"
#: aleksis/core/templates/templated_email/person_changed.email:14
#: aleksis/core/templates/templated_email/person_changed.email:15
#, python-format
msgid ""
"\n"
......@@ -3255,152 +3277,157 @@ msgstr "Das Schuljahr wurde erstellt."
msgid "The school term has been saved."
msgstr "Das Schuljahr wurde gespeichert."
#: aleksis/core/views.py:414
#: aleksis/core/views.py:417
msgid "The child groups were successfully saved."
msgstr "Die Untergruppen wurden gespeichert."
#: aleksis/core/views.py:433 aleksis/core/views.py:443
#: aleksis/core/views.py:436 aleksis/core/views.py:446
msgid "The person has been saved."
msgstr "Die Person wurde gespeichert."
#: aleksis/core/views.py:493
#: aleksis/core/views.py:496
msgid "The group has been saved."
msgstr "Die Gruppe wurde gespeichert."
#: aleksis/core/views.py:590
#: aleksis/core/views.py:593
msgid "The announcement has been saved."
msgstr "Die Ankündigung wurde gespeichert."
#: aleksis/core/views.py:606
#: aleksis/core/views.py:609
msgid "The announcement has been deleted."
msgstr "Ankündigung wurde gelöscht."
#: aleksis/core/views.py:674
#: aleksis/core/views.py:677
msgid "The requested preference registry does not exist"
msgstr "Das angeforderte Einstellungsregister existiert nicht"
#: aleksis/core/views.py:693
#: aleksis/core/views.py:696
msgid "The preferences have been saved successfully."
msgstr "Die Einstellungen wurde gespeichert."
#: aleksis/core/views.py:717
#: aleksis/core/views.py:720
msgid "The person has been deleted."
msgstr "Die Person wurde gelöscht."
#: aleksis/core/views.py:731
#: aleksis/core/views.py:734
msgid "The group has been deleted."
msgstr "Die Gruppe wurde gelöscht."
#: aleksis/core/views.py:763
#: aleksis/core/views.py:766
msgid "The additional_field has been saved."
msgstr "Das zusätzliche Feld wurde gespeichert."
#: aleksis/core/views.py:797
#: aleksis/core/views.py:800
msgid "The additional field has been deleted."
msgstr "Das zusätzliche Feld wurde gelöscht."
#: aleksis/core/views.py:822
#: aleksis/core/views.py:825
msgid "The group type has been saved."
msgstr "Der Gruppentyp wurde gespeichert."
#: aleksis/core/views.py:852
#: aleksis/core/views.py:855
msgid "The group type has been deleted."
msgstr "Der Gruppentyp wurde gelöscht."
#: aleksis/core/views.py:885
#: aleksis/core/views.py:888
msgid "Progress: Run data checks"
msgstr "Fortschritt: Datenprüfungen ausführen"
#: aleksis/core/views.py:886
#: aleksis/core/views.py:889
msgid "Run data checks …"
msgstr "Datenprüfungen laufen …"
#: aleksis/core/views.py:887
#: aleksis/core/views.py:890
msgid "The data checks were run successfully."
msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt."
#: aleksis/core/views.py:888
#: aleksis/core/views.py:891
msgid "There was a problem while running data checks."
msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen."
#: aleksis/core/views.py:904
#: aleksis/core/views.py:907
#, python-brace-format
msgid "The solve option '{solve_option_obj.verbose_name}' "
msgstr "Die Lösungsoption \"{solve_option_obj.verbose_name}\" "
#: aleksis/core/views.py:914
#: aleksis/core/views.py:917
msgid "The requested solve option does not exist"
msgstr "Die angeforderte Lösungsoption existiert nicht"
#: aleksis/core/views.py:946
#: aleksis/core/views.py:949
msgid "The dashboard widget has been saved."
msgstr "Das Dashboard-Widget wurde gespeichert."
#: aleksis/core/views.py:976
#: aleksis/core/views.py:979
msgid "The dashboard widget has been created."
msgstr "Das Dashboard-Widget wurde erstellt."
#: aleksis/core/views.py:986
#: aleksis/core/views.py:989
msgid "The dashboard widget has been deleted."
msgstr "Das Dashboard-Widget wurde gelöscht."
#: aleksis/core/views.py:1057
#: aleksis/core/views.py:1060
msgid "Your dashboard configuration has been saved successfully."
msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert."
#: aleksis/core/views.py:1059
#: aleksis/core/views.py:1062
msgid "The configuration of the default dashboard has been saved successfully."
msgstr "Die Konfiguration des Standard-Dashboardes wurde erfolgreich gespeichert."
#: aleksis/core/views.py:1129
#: aleksis/core/views.py:1138
#, python-brace-format
msgid "The invitation was successfully created. The invitation code is {code}"
msgstr "Die Einladung wurde erfolgreich erstellt. Der Einladungscode ist {code}"
#: aleksis/core/views.py:1220
#: aleksis/core/views.py:1229
msgid "We have successfully assigned the permissions."
msgstr "Wir haben die Berechtigungen erfolgreich zugewiesen."
#: aleksis/core/views.py:1230
#: aleksis/core/views.py:1239
msgid "The global user permission has been deleted."
msgstr "Die globale Benutzerberechtigung wurde gelöscht."
#: aleksis/core/views.py:1240
#: aleksis/core/views.py:1249
msgid "The global group permission has been deleted."
msgstr "Die globale Gruppenberechtigung wurde gelöscht."
#: aleksis/core/views.py:1250
#: aleksis/core/views.py:1259
msgid "The object user permission has been deleted."
msgstr "Die Objekt-Benutzerberechtigung wurde gelöscht."
#: aleksis/core/views.py:1260
#: aleksis/core/views.py:1269
msgid "The object group permission has been deleted."
msgstr "Die Objekt-Gruppenberechtigung wurde gelöscht."
#: aleksis/core/views.py:1328
#: aleksis/core/views.py:1337
msgid "The requested PDF file does not exist"
msgstr "Die angeforderte PDF-Datei existiert nicht"
#: aleksis/core/views.py:1337 aleksis/core/views.py:1341
#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
msgid "The requested task does not exist or is not accessible"
msgstr "Der angeforderte Task existiert nicht oder ist nicht abrufbar"
#: aleksis/core/views.py:1379
#: aleksis/core/views.py:1388
msgid "The third-party account could not be disconnected because it is the only login method available."
msgstr "Das Drittanbieter-Konto konnte nicht deaktiviert werden, weil es die einzige verfügbare Anmeldeoption ist."
#: aleksis/core/views.py:1386
#: aleksis/core/views.py:1395
msgid "The third-party account has been successfully disconnected."
msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt."
#: aleksis/core/views.py:1445
msgid "Person was invited successfully."
msgstr "Person wurde erfolgreich eingeladen."
#: aleksis/core/views.py:1466
msgid "Person was invited successfully and an email with further instructions has been send to them."
msgstr ""
"Die Person wurde erfolgreich eingeladen und eine E-Mail mit weiteren "
"Anweisungen wurde an sie verschickt."
#: aleksis/core/views.py:1447
#: aleksis/core/views.py:1477
msgid "Person was already invited."
msgstr "Person wurde bereits eingeladen."
#~ msgid "Person was invited successfully."
#~ msgstr "Person wurde erfolgreich eingeladen."
#, python-brace-format
#~ msgid "Last backup {time_gone_since_backup}!"
#~ msgstr "Letztes Backup: {time_gone_since_backup}!"
......
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+0000\n"
"PO-Revision-Date: 2021-10-28 14:37+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-core-js/de/>\n"
......
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: AlekSIS (School Information System) 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+0000\n"
"PO-Revision-Date: 2021-06-16 12:00+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis/fr/>\n"
......@@ -40,7 +40,7 @@ msgstr "Détails de contact"
msgid "Home and mobile phone"
msgstr ""
#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
#: aleksis/core/templates/core/group/list.html:9
#: aleksis/core/templates/core/person/full.html:250
......@@ -105,53 +105,53 @@ msgstr ""
msgid "Group"
msgstr "groupe"
#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
#: aleksis/core/forms.py:50 aleksis/core/forms.py:581
msgid "Base data"
msgstr ""
#: aleksis/core/forms.py:53
#: aleksis/core/forms.py:55
msgid "Address"
msgstr ""
#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
#: aleksis/core/forms.py:56 aleksis/core/forms.py:590
#, fuzzy
#| msgid "Contact details"
msgid "Contact data"
msgstr "Détails de contact"
#: aleksis/core/forms.py:56
#: aleksis/core/forms.py:58
#, fuzzy
#| msgid "Contact details"
msgid "Advanced personal data"
msgstr "Détails de contact"
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "New user"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "Create a new account"
msgstr ""
#: aleksis/core/forms.py:130
#: aleksis/core/forms.py:132
msgid "You cannot set a new username when also selecting an existing user."
msgstr ""
#: aleksis/core/forms.py:134
#: aleksis/core/forms.py:136
msgid "This username is already in use."
msgstr "Cet nom est deja en utilisation."
#: aleksis/core/forms.py:151 aleksis/core/models.py:130
#: aleksis/core/forms.py:153 aleksis/core/models.py:130
msgid "School term"
msgstr ""
#: aleksis/core/forms.py:152
#: aleksis/core/forms.py:154
#, fuzzy
#| msgid "Contact details"
msgid "Common data"
msgstr "Détails de contact"
#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
#: aleksis/core/forms.py:155 aleksis/core/forms.py:207
#: aleksis/core/menus.py:254 aleksis/core/models.py:153
#: aleksis/core/templates/core/person/list.html:8
#: aleksis/core/templates/core/person/list.html:9
......@@ -160,102 +160,114 @@ msgstr "Détails de contact"
msgid "Persons"
msgstr "Personne"
#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
#: aleksis/core/forms.py:156 aleksis/core/forms.py:592
#, fuzzy
#| msgid "Contact details"
msgid "Additional data"
msgstr "Détails de contact"
#: aleksis/core/forms.py:155 aleksis/core/models.py:206
#: aleksis/core/forms.py:157 aleksis/core/models.py:206
#: aleksis/core/models.py:514
msgid "Photo"
msgstr ""
#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
#: aleksis/core/forms.py:199 aleksis/core/forms.py:202
#: aleksis/core/models.py:73
msgid "Date"
msgstr "Date"
#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
#: aleksis/core/models.py:81
msgid "Time"
msgstr ""
#: aleksis/core/forms.py:231
#: aleksis/core/forms.py:233
msgid "From when until when should the announcement be displayed?"
msgstr ""
#: aleksis/core/forms.py:234
#: aleksis/core/forms.py:236
msgid "Who should see the announcement?"
msgstr ""
#: aleksis/core/forms.py:235
#: aleksis/core/forms.py:237
msgid "Write your announcement:"
msgstr ""
#: aleksis/core/forms.py:274
#: aleksis/core/forms.py:276
msgid "You are not allowed to create announcements which are only valid in the past."
msgstr ""
#: aleksis/core/forms.py:278
#: aleksis/core/forms.py:280
msgid "The from date and time must be earlier then the until date and time."
msgstr ""
#: aleksis/core/forms.py:287
#: aleksis/core/forms.py:289
msgid "You need at least one recipient."
msgstr ""
#: aleksis/core/forms.py:396
#: aleksis/core/forms.py:398
msgid "Invitation code"
msgstr ""
#: aleksis/core/forms.py:397
#: aleksis/core/forms.py:399
msgid "Please enter your invitation code."
msgstr ""
#: aleksis/core/forms.py:429
#: aleksis/core/forms.py:418 aleksis/core/models.py:181
msgid "First name"
msgstr "Prénom"
#: aleksis/core/forms.py:419 aleksis/core/models.py:182
msgid "Last name"
msgstr "Nom de famille"
#: aleksis/core/forms.py:428
msgid "A person is using this e-mail address"
msgstr ""
#: aleksis/core/forms.py:456
msgid "Who should get the permission?"
msgstr ""
#: aleksis/core/forms.py:430
#: aleksis/core/forms.py:457
msgid "On what?"
msgstr ""
#: aleksis/core/forms.py:456
#: aleksis/core/forms.py:483
msgid "Select objects which the permission should be granted for:"
msgstr ""
#: aleksis/core/forms.py:459
#: aleksis/core/forms.py:486
msgid "Grant the permission for all objects"
msgstr ""
#: aleksis/core/forms.py:467
#: aleksis/core/forms.py:494
msgid "You must select at least one group or person which should get the permission."
msgstr ""
#: aleksis/core/forms.py:472
#: aleksis/core/forms.py:499
msgid "You must grant the permission to all objects and/or to some objects."
msgstr ""
#: aleksis/core/forms.py:559
#: aleksis/core/forms.py:586
msgid "Adress data"
msgstr ""
#: aleksis/core/forms.py:571
#: aleksis/core/forms.py:598
#, fuzzy
#| msgid "Contact details"
msgid "Account data"
msgstr "Détails de contact"
#: aleksis/core/forms.py:578
#: aleksis/core/forms.py:605
msgid "Password"
msgstr ""
#: aleksis/core/forms.py:581
#: aleksis/core/forms.py:608
msgid "Password (again)"
msgstr ""
#: aleksis/core/forms.py:747
#: aleksis/core/forms.py:775
msgid "No valid selection."
msgstr ""
......@@ -285,7 +297,7 @@ msgstr ""
msgid "Login"
msgstr ""
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:20
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
#: aleksis/core/templates/socialaccount/signup.html:23
msgid "Sign up"
msgstr ""
......@@ -558,18 +570,10 @@ msgstr ""
msgid "male"
msgstr ""
#: aleksis/core/models.py:178 aleksis/core/models.py:1219
#: aleksis/core/models.py:178 aleksis/core/models.py:1227
msgid "Linked user"
msgstr ""
#: aleksis/core/models.py:181
msgid "First name"
msgstr "Prénom"
#: aleksis/core/models.py:182
msgid "Last name"
msgstr "Nom de famille"
#: aleksis/core/models.py:184
msgid "Additional name(s)"
msgstr ""
......@@ -866,7 +870,7 @@ msgstr ""
msgid "Menu"
msgstr ""
#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
#: aleksis/core/templates/oauth2_provider/application/detail.html:26
msgid "Icon"
msgstr ""
......@@ -965,59 +969,59 @@ msgstr ""
msgid "E-Mail address"
msgstr "Détails de contact"
#: aleksis/core/models.py:1169
#: aleksis/core/models.py:1177
#, fuzzy
#| msgid "Owners"
msgid "Owner"
msgstr "Propriétaires"
#: aleksis/core/models.py:1173
#: aleksis/core/models.py:1181
msgid "File expires at"
msgstr ""
#: aleksis/core/models.py:1175
#: aleksis/core/models.py:1183
msgid "Generated HTML file"
msgstr ""
#: aleksis/core/models.py:1177
#: aleksis/core/models.py:1185
msgid "Generated PDF file"
msgstr ""
#: aleksis/core/models.py:1184
#: aleksis/core/models.py:1192
msgid "PDF file"
msgstr ""
#: aleksis/core/models.py:1185
#: aleksis/core/models.py:1193
msgid "PDF files"
msgstr ""
#: aleksis/core/models.py:1190
#: aleksis/core/models.py:1198
msgid "Task result"
msgstr ""
#: aleksis/core/models.py:1193
#: aleksis/core/models.py:1201
msgid "Task user"
msgstr ""
#: aleksis/core/models.py:1205
#: aleksis/core/models.py:1213
msgid "Task user assignment"
msgstr ""
#: aleksis/core/models.py:1206
#: aleksis/core/models.py:1214
msgid "Task user assignments"
msgstr ""
#: aleksis/core/models.py:1222
#: aleksis/core/models.py:1230
#, fuzzy
#| msgid "Contact details"
msgid "Additional attributes"
msgstr "Détails de contact"
#: aleksis/core/models.py:1260
#: aleksis/core/models.py:1268
msgid "Allowed scopes that clients can request"
msgstr ""
#: aleksis/core/models.py:1270
#: aleksis/core/models.py:1278
msgid "This image will be shown as icon in the authorization flow. It should be squared."
msgstr ""
......@@ -1221,11 +1225,11 @@ msgstr ""
msgid "Country for phone number parsing"
msgstr ""
#: aleksis/core/settings.py:526
#: aleksis/core/settings.py:529
msgid "English"
msgstr ""
#: aleksis/core/settings.py:527
#: aleksis/core/settings.py:530
msgid "German"
msgstr ""
......@@ -1239,14 +1243,14 @@ msgid "Edit"
msgstr ""
#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
#: aleksis/core/tables.py:137
#: aleksis/core/tables.py:138
#: aleksis/core/templates/core/announcement/list.html:22
msgid "Actions"
msgstr ""
#: aleksis/core/tables.py:61 aleksis/core/tables.py:62
#: aleksis/core/tables.py:76 aleksis/core/tables.py:92
#: aleksis/core/tables.py:135
#: aleksis/core/tables.py:136
#: aleksis/core/templates/core/announcement/list.html:42
#: aleksis/core/templates/core/group/full.html:31
#: aleksis/core/templates/core/pages/delete.html:22
......@@ -2261,6 +2265,22 @@ msgstr ""
msgid "Save preferences"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:5
msgid "The invite feature is disabled"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:13
msgid "The invite feature is disabled."
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:15
msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:16
msgid "site preferences page"
msgstr ""
#: aleksis/core/templates/invitations/enter.html:21
msgid "Accept your invitation"
msgstr ""
......@@ -2656,17 +2676,17 @@ msgid ""
" "
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:3
#: aleksis/core/templates/templated_email/person_changed.email:4
#, python-format
msgid "%(person)s changed their data!"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:6
#: aleksis/core/templates/templated_email/person_changed.email:7
#, python-format
msgid "the person %(person)s recently changed the following fields:"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:14
#: aleksis/core/templates/templated_email/person_changed.email:15
#, python-format
msgid ""
"\n"
......@@ -3063,149 +3083,149 @@ msgstr ""
msgid "The school term has been saved."
msgstr ""
#: aleksis/core/views.py:414
#: aleksis/core/views.py:417
msgid "The child groups were successfully saved."
msgstr ""
#: aleksis/core/views.py:433 aleksis/core/views.py:443
#: aleksis/core/views.py:436 aleksis/core/views.py:446
msgid "The person has been saved."
msgstr ""
#: aleksis/core/views.py:493
#: aleksis/core/views.py:496
msgid "The group has been saved."
msgstr ""
#: aleksis/core/views.py:590
#: aleksis/core/views.py:593
msgid "The announcement has been saved."
msgstr ""
#: aleksis/core/views.py:606
#: aleksis/core/views.py:609
msgid "The announcement has been deleted."
msgstr ""
#: aleksis/core/views.py:674
#: aleksis/core/views.py:677
msgid "The requested preference registry does not exist"
msgstr ""
#: aleksis/core/views.py:693
#: aleksis/core/views.py:696
msgid "The preferences have been saved successfully."
msgstr ""
#: aleksis/core/views.py:717
#: aleksis/core/views.py:720
msgid "The person has been deleted."
msgstr ""
#: aleksis/core/views.py:731
#: aleksis/core/views.py:734
msgid "The group has been deleted."
msgstr ""
#: aleksis/core/views.py:763
#: aleksis/core/views.py:766
msgid "The additional_field has been saved."
msgstr ""
#: aleksis/core/views.py:797
#: aleksis/core/views.py:800
msgid "The additional field has been deleted."
msgstr ""
#: aleksis/core/views.py:822
#: aleksis/core/views.py:825
msgid "The group type has been saved."
msgstr ""
#: aleksis/core/views.py:852
#: aleksis/core/views.py:855
msgid "The group type has been deleted."
msgstr ""
#: aleksis/core/views.py:885
#: aleksis/core/views.py:888
msgid "Progress: Run data checks"
msgstr ""
#: aleksis/core/views.py:886
#: aleksis/core/views.py:889
msgid "Run data checks …"
msgstr ""
#: aleksis/core/views.py:887
#: aleksis/core/views.py:890
msgid "The data checks were run successfully."
msgstr ""
#: aleksis/core/views.py:888
#: aleksis/core/views.py:891
msgid "There was a problem while running data checks."
msgstr ""
#: aleksis/core/views.py:904
#: aleksis/core/views.py:907
#, python-brace-format
msgid "The solve option '{solve_option_obj.verbose_name}' "
msgstr ""
#: aleksis/core/views.py:914
#: aleksis/core/views.py:917
msgid "The requested solve option does not exist"
msgstr ""
#: aleksis/core/views.py:946
#: aleksis/core/views.py:949
msgid "The dashboard widget has been saved."
msgstr ""
#: aleksis/core/views.py:976
#: aleksis/core/views.py:979
msgid "The dashboard widget has been created."
msgstr ""
#: aleksis/core/views.py:986
#: aleksis/core/views.py:989
msgid "The dashboard widget has been deleted."
msgstr ""
#: aleksis/core/views.py:1057
#: aleksis/core/views.py:1060
msgid "Your dashboard configuration has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1059
#: aleksis/core/views.py:1062
msgid "The configuration of the default dashboard has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1129
#: aleksis/core/views.py:1138
#, python-brace-format
msgid "The invitation was successfully created. The invitation code is {code}"
msgstr ""
#: aleksis/core/views.py:1220
#: aleksis/core/views.py:1229
msgid "We have successfully assigned the permissions."
msgstr ""
#: aleksis/core/views.py:1230
#: aleksis/core/views.py:1239
msgid "The global user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1240
#: aleksis/core/views.py:1249
msgid "The global group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1250
#: aleksis/core/views.py:1259
msgid "The object user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1260
#: aleksis/core/views.py:1269
msgid "The object group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1328
#: aleksis/core/views.py:1337
msgid "The requested PDF file does not exist"
msgstr ""
#: aleksis/core/views.py:1337 aleksis/core/views.py:1341
#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
msgid "The requested task does not exist or is not accessible"
msgstr ""
#: aleksis/core/views.py:1379
#: aleksis/core/views.py:1388
msgid "The third-party account could not be disconnected because it is the only login method available."
msgstr ""
#: aleksis/core/views.py:1386
#: aleksis/core/views.py:1395
msgid "The third-party account has been successfully disconnected."
msgstr ""
#: aleksis/core/views.py:1445
msgid "Person was invited successfully."
#: aleksis/core/views.py:1466
msgid "Person was invited successfully and an email with further instructions has been send to them."
msgstr ""
#: aleksis/core/views.py:1447
#: aleksis/core/views.py:1477
#, fuzzy
#| msgid "This username is already in use."
msgid "Person was already invited."
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......
......@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+0000\n"
"PO-Revision-Date: 2020-12-19 12:57+0000\n"
"Last-Translator: Julian <leuckerj@gmail.com>\n"
"Language-Team: Latin <https://translate.edugit.org/projects/aleksis/aleksis/la/>\n"
......@@ -44,7 +44,7 @@ msgstr "Inscriptio electronica"
msgid "Home and mobile phone"
msgstr "Numerus telephoni mobilis"
#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
#: aleksis/core/templates/core/group/list.html:9
#: aleksis/core/templates/core/person/full.html:250
......@@ -109,159 +109,173 @@ msgstr ""
msgid "Group"
msgstr "Grex"
#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
#: aleksis/core/forms.py:50 aleksis/core/forms.py:581
msgid "Base data"
msgstr ""
#: aleksis/core/forms.py:53
#: aleksis/core/forms.py:55
#, fuzzy
#| msgid "E-mail address"
msgid "Address"
msgstr "Inscriptio electronica"
#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
#: aleksis/core/forms.py:56 aleksis/core/forms.py:590
msgid "Contact data"
msgstr ""
#: aleksis/core/forms.py:56
#: aleksis/core/forms.py:58
msgid "Advanced personal data"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "New user"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
#, fuzzy
#| msgid "Persons and accounts"
msgid "Create a new account"
msgstr "Personae et computi"
#: aleksis/core/forms.py:130
#: aleksis/core/forms.py:132
msgid "You cannot set a new username when also selecting an existing user."
msgstr ""
#: aleksis/core/forms.py:134
#: aleksis/core/forms.py:136
msgid "This username is already in use."
msgstr ""
#: aleksis/core/forms.py:151 aleksis/core/models.py:130
#: aleksis/core/forms.py:153 aleksis/core/models.py:130
msgid "School term"
msgstr "Anus scolae"
#: aleksis/core/forms.py:152
#: aleksis/core/forms.py:154
#, fuzzy
#| msgid "Data management"
msgid "Common data"
msgstr "Adminstratio datarum"
#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
#: aleksis/core/forms.py:155 aleksis/core/forms.py:207
#: aleksis/core/menus.py:254 aleksis/core/models.py:153
#: aleksis/core/templates/core/person/list.html:8
#: aleksis/core/templates/core/person/list.html:9
msgid "Persons"
msgstr "personae"
#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
#: aleksis/core/forms.py:156 aleksis/core/forms.py:592
#, fuzzy
#| msgid "Additional name(s)"
msgid "Additional data"
msgstr "addita nomines"
#: aleksis/core/forms.py:155 aleksis/core/models.py:206
#: aleksis/core/forms.py:157 aleksis/core/models.py:206
#: aleksis/core/models.py:514
msgid "Photo"
msgstr "Photographia"
#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
#: aleksis/core/forms.py:199 aleksis/core/forms.py:202
#: aleksis/core/models.py:73
msgid "Date"
msgstr "dies"
#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
#: aleksis/core/models.py:81
msgid "Time"
msgstr "tempus"
#: aleksis/core/forms.py:231
#: aleksis/core/forms.py:233
msgid "From when until when should the announcement be displayed?"
msgstr ""
#: aleksis/core/forms.py:234
#: aleksis/core/forms.py:236
msgid "Who should see the announcement?"
msgstr "Quis nuntium videatne?"
#: aleksis/core/forms.py:235
#: aleksis/core/forms.py:237
msgid "Write your announcement:"
msgstr "Scribe nuntium:"
#: aleksis/core/forms.py:274
#: aleksis/core/forms.py:276
msgid "You are not allowed to create announcements which are only valid in the past."
msgstr ""
#: aleksis/core/forms.py:278
#: aleksis/core/forms.py:280
msgid "The from date and time must be earlier then the until date and time."
msgstr ""
#: aleksis/core/forms.py:287
#: aleksis/core/forms.py:289
msgid "You need at least one recipient."
msgstr ""
#: aleksis/core/forms.py:396
#: aleksis/core/forms.py:398
msgid "Invitation code"
msgstr ""
#: aleksis/core/forms.py:397
#: aleksis/core/forms.py:399
msgid "Please enter your invitation code."
msgstr ""
#: aleksis/core/forms.py:429
#: aleksis/core/forms.py:418 aleksis/core/models.py:181
msgid "First name"
msgstr "Primus nomen"
#: aleksis/core/forms.py:419 aleksis/core/models.py:182
msgid "Last name"
msgstr "Secondus nomen"
#: aleksis/core/forms.py:428
#, fuzzy
#| msgid "E-mail address"
msgid "A person is using this e-mail address"
msgstr "Inscriptio electronica"
#: aleksis/core/forms.py:456
#, fuzzy
#| msgid "Who should see the announcement?"
msgid "Who should get the permission?"
msgstr "Quis nuntium videatne?"
#: aleksis/core/forms.py:430
#: aleksis/core/forms.py:457
msgid "On what?"
msgstr ""
#: aleksis/core/forms.py:456
#: aleksis/core/forms.py:483
msgid "Select objects which the permission should be granted for:"
msgstr ""
#: aleksis/core/forms.py:459
#: aleksis/core/forms.py:486
msgid "Grant the permission for all objects"
msgstr ""
#: aleksis/core/forms.py:467
#: aleksis/core/forms.py:494
msgid "You must select at least one group or person which should get the permission."
msgstr ""
#: aleksis/core/forms.py:472
#: aleksis/core/forms.py:499
msgid "You must grant the permission to all objects and/or to some objects."
msgstr ""
#: aleksis/core/forms.py:559
#: aleksis/core/forms.py:586
#, fuzzy
#| msgid "E-mail address"
msgid "Adress data"
msgstr "Inscriptio electronica"
#: aleksis/core/forms.py:571
#: aleksis/core/forms.py:598
#, fuzzy
#| msgid "Data management"
msgid "Account data"
msgstr "Adminstratio datarum"
#: aleksis/core/forms.py:578
#: aleksis/core/forms.py:605
msgid "Password"
msgstr ""
#: aleksis/core/forms.py:581
#: aleksis/core/forms.py:608
msgid "Password (again)"
msgstr ""
#: aleksis/core/forms.py:747
#: aleksis/core/forms.py:775
msgid "No valid selection."
msgstr ""
......@@ -293,7 +307,7 @@ msgstr ""
msgid "Login"
msgstr "nomen profiteri"
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:20
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
#: aleksis/core/templates/socialaccount/signup.html:23
msgid "Sign up"
msgstr ""
......@@ -584,18 +598,10 @@ msgstr "femininum"
msgid "male"
msgstr "maskulinum"
#: aleksis/core/models.py:178 aleksis/core/models.py:1219
#: aleksis/core/models.py:178 aleksis/core/models.py:1227
msgid "Linked user"
msgstr ""
#: aleksis/core/models.py:181
msgid "First name"
msgstr "Primus nomen"
#: aleksis/core/models.py:182
msgid "Last name"
msgstr "Secondus nomen"
#: aleksis/core/models.py:184
msgid "Additional name(s)"
msgstr "addita nomines"
......@@ -920,7 +926,7 @@ msgstr ""
msgid "Menu"
msgstr ""
#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
#: aleksis/core/templates/oauth2_provider/application/detail.html:26
msgid "Icon"
msgstr "Nota"
......@@ -1023,57 +1029,57 @@ msgstr ""
msgid "E-Mail address"
msgstr "Inscriptio electronica"
#: aleksis/core/models.py:1169
#: aleksis/core/models.py:1177
msgid "Owner"
msgstr ""
#: aleksis/core/models.py:1173
#: aleksis/core/models.py:1181
msgid "File expires at"
msgstr ""
#: aleksis/core/models.py:1175
#: aleksis/core/models.py:1183
msgid "Generated HTML file"
msgstr ""
#: aleksis/core/models.py:1177
#: aleksis/core/models.py:1185
msgid "Generated PDF file"
msgstr ""
#: aleksis/core/models.py:1184
#: aleksis/core/models.py:1192
msgid "PDF file"
msgstr ""
#: aleksis/core/models.py:1185
#: aleksis/core/models.py:1193
msgid "PDF files"
msgstr ""
#: aleksis/core/models.py:1190
#: aleksis/core/models.py:1198
msgid "Task result"
msgstr ""
#: aleksis/core/models.py:1193
#: aleksis/core/models.py:1201
msgid "Task user"
msgstr ""
#: aleksis/core/models.py:1205
#: aleksis/core/models.py:1213
msgid "Task user assignment"
msgstr ""
#: aleksis/core/models.py:1206
#: aleksis/core/models.py:1214
msgid "Task user assignments"
msgstr ""
#: aleksis/core/models.py:1222
#: aleksis/core/models.py:1230
#, fuzzy
#| msgid "Additional name(s)"
msgid "Additional attributes"
msgstr "addita nomines"
#: aleksis/core/models.py:1260
#: aleksis/core/models.py:1268
msgid "Allowed scopes that clients can request"
msgstr ""
#: aleksis/core/models.py:1270
#: aleksis/core/models.py:1278
msgid "This image will be shown as icon in the authorization flow. It should be squared."
msgstr ""
......@@ -1285,11 +1291,11 @@ msgstr ""
msgid "Country for phone number parsing"
msgstr ""
#: aleksis/core/settings.py:526
#: aleksis/core/settings.py:529
msgid "English"
msgstr "Britannicus"
#: aleksis/core/settings.py:527
#: aleksis/core/settings.py:530
msgid "German"
msgstr "Germanus"
......@@ -1303,7 +1309,7 @@ msgid "Edit"
msgstr ""
#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
#: aleksis/core/tables.py:137
#: aleksis/core/tables.py:138
#: aleksis/core/templates/core/announcement/list.html:22
#, fuzzy
#| msgid "Notifications"
......@@ -1312,7 +1318,7 @@ msgstr "Nuntii"
#: aleksis/core/tables.py:61 aleksis/core/tables.py:62
#: aleksis/core/tables.py:76 aleksis/core/tables.py:92
#: aleksis/core/tables.py:135
#: aleksis/core/tables.py:136
#: aleksis/core/templates/core/announcement/list.html:42
#: aleksis/core/templates/core/group/full.html:31
#: aleksis/core/templates/core/pages/delete.html:22
......@@ -2373,6 +2379,22 @@ msgstr ""
msgid "Save preferences"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:5
msgid "The invite feature is disabled"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:13
msgid "The invite feature is disabled."
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:15
msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:16
msgid "site preferences page"
msgstr ""
#: aleksis/core/templates/invitations/enter.html:21
msgid "Accept your invitation"
msgstr ""
......@@ -2781,17 +2803,17 @@ msgid ""
" "
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:3
#: aleksis/core/templates/templated_email/person_changed.email:4
#, python-format
msgid "%(person)s changed their data!"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:6
#: aleksis/core/templates/templated_email/person_changed.email:7
#, python-format
msgid "the person %(person)s recently changed the following fields:"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:14
#: aleksis/core/templates/templated_email/person_changed.email:15
#, python-format
msgid ""
"\n"
......@@ -3188,151 +3210,151 @@ msgstr ""
msgid "The school term has been saved."
msgstr ""
#: aleksis/core/views.py:414
#: aleksis/core/views.py:417
msgid "The child groups were successfully saved."
msgstr ""
#: aleksis/core/views.py:433 aleksis/core/views.py:443
#: aleksis/core/views.py:436 aleksis/core/views.py:446
msgid "The person has been saved."
msgstr ""
#: aleksis/core/views.py:493
#: aleksis/core/views.py:496
msgid "The group has been saved."
msgstr ""
#: aleksis/core/views.py:590
#: aleksis/core/views.py:593
msgid "The announcement has been saved."
msgstr ""
#: aleksis/core/views.py:606
#: aleksis/core/views.py:609
msgid "The announcement has been deleted."
msgstr ""
#: aleksis/core/views.py:674
#: aleksis/core/views.py:677
msgid "The requested preference registry does not exist"
msgstr ""
#: aleksis/core/views.py:693
#: aleksis/core/views.py:696
msgid "The preferences have been saved successfully."
msgstr ""
#: aleksis/core/views.py:717
#: aleksis/core/views.py:720
msgid "The person has been deleted."
msgstr ""
#: aleksis/core/views.py:731
#: aleksis/core/views.py:734
msgid "The group has been deleted."
msgstr ""
#: aleksis/core/views.py:763
#: aleksis/core/views.py:766
msgid "The additional_field has been saved."
msgstr ""
#: aleksis/core/views.py:797
#: aleksis/core/views.py:800
msgid "The additional field has been deleted."
msgstr ""
#: aleksis/core/views.py:822
#: aleksis/core/views.py:825
msgid "The group type has been saved."
msgstr ""
#: aleksis/core/views.py:852
#: aleksis/core/views.py:855
msgid "The group type has been deleted."
msgstr ""
#: aleksis/core/views.py:885
#: aleksis/core/views.py:888
msgid "Progress: Run data checks"
msgstr ""
#: aleksis/core/views.py:886
#: aleksis/core/views.py:889
#, fuzzy
#| msgid "System status"
msgid "Run data checks …"
msgstr "Status systemae"
#: aleksis/core/views.py:887
#: aleksis/core/views.py:890
msgid "The data checks were run successfully."
msgstr ""
#: aleksis/core/views.py:888
#: aleksis/core/views.py:891
msgid "There was a problem while running data checks."
msgstr ""
#: aleksis/core/views.py:904
#: aleksis/core/views.py:907
#, python-brace-format
msgid "The solve option '{solve_option_obj.verbose_name}' "
msgstr ""
#: aleksis/core/views.py:914
#: aleksis/core/views.py:917
msgid "The requested solve option does not exist"
msgstr ""
#: aleksis/core/views.py:946
#: aleksis/core/views.py:949
msgid "The dashboard widget has been saved."
msgstr ""
#: aleksis/core/views.py:976
#: aleksis/core/views.py:979
msgid "The dashboard widget has been created."
msgstr ""
#: aleksis/core/views.py:986
#: aleksis/core/views.py:989
msgid "The dashboard widget has been deleted."
msgstr ""
#: aleksis/core/views.py:1057
#: aleksis/core/views.py:1060
msgid "Your dashboard configuration has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1059
#: aleksis/core/views.py:1062
msgid "The configuration of the default dashboard has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1129
#: aleksis/core/views.py:1138
#, python-brace-format
msgid "The invitation was successfully created. The invitation code is {code}"
msgstr ""
#: aleksis/core/views.py:1220
#: aleksis/core/views.py:1229
msgid "We have successfully assigned the permissions."
msgstr ""
#: aleksis/core/views.py:1230
#: aleksis/core/views.py:1239
msgid "The global user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1240
#: aleksis/core/views.py:1249
msgid "The global group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1250
#: aleksis/core/views.py:1259
msgid "The object user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1260
#: aleksis/core/views.py:1269
msgid "The object group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1328
#: aleksis/core/views.py:1337
msgid "The requested PDF file does not exist"
msgstr ""
#: aleksis/core/views.py:1337 aleksis/core/views.py:1341
#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
msgid "The requested task does not exist or is not accessible"
msgstr ""
#: aleksis/core/views.py:1379
#: aleksis/core/views.py:1388
msgid "The third-party account could not be disconnected because it is the only login method available."
msgstr ""
#: aleksis/core/views.py:1386
#: aleksis/core/views.py:1395
msgid "The third-party account has been successfully disconnected."
msgstr ""
#: aleksis/core/views.py:1445
msgid "Person was invited successfully."
#: aleksis/core/views.py:1466
msgid "Person was invited successfully and an email with further instructions has been send to them."
msgstr ""
#: aleksis/core/views.py:1447
#: aleksis/core/views.py:1477
msgid "Person was already invited."
msgstr ""
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: AlekSIS (School Information System) 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......@@ -37,7 +37,7 @@ msgstr ""
msgid "Home and mobile phone"
msgstr ""
#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
#: aleksis/core/templates/core/group/list.html:9
#: aleksis/core/templates/core/person/full.html:250
......@@ -98,145 +98,157 @@ msgstr ""
msgid "Group"
msgstr ""
#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
#: aleksis/core/forms.py:50 aleksis/core/forms.py:581
msgid "Base data"
msgstr ""
#: aleksis/core/forms.py:53
#: aleksis/core/forms.py:55
msgid "Address"
msgstr ""
#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
#: aleksis/core/forms.py:56 aleksis/core/forms.py:590
msgid "Contact data"
msgstr ""
#: aleksis/core/forms.py:56
#: aleksis/core/forms.py:58
msgid "Advanced personal data"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "New user"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "Create a new account"
msgstr ""
#: aleksis/core/forms.py:130
#: aleksis/core/forms.py:132
msgid "You cannot set a new username when also selecting an existing user."
msgstr ""
#: aleksis/core/forms.py:134
#: aleksis/core/forms.py:136
msgid "This username is already in use."
msgstr ""
#: aleksis/core/forms.py:151 aleksis/core/models.py:130
#: aleksis/core/forms.py:153 aleksis/core/models.py:130
msgid "School term"
msgstr ""
#: aleksis/core/forms.py:152
#: aleksis/core/forms.py:154
msgid "Common data"
msgstr ""
#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
#: aleksis/core/forms.py:155 aleksis/core/forms.py:207
#: aleksis/core/menus.py:254 aleksis/core/models.py:153
#: aleksis/core/templates/core/person/list.html:8
#: aleksis/core/templates/core/person/list.html:9
msgid "Persons"
msgstr ""
#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
#: aleksis/core/forms.py:156 aleksis/core/forms.py:592
msgid "Additional data"
msgstr ""
#: aleksis/core/forms.py:155 aleksis/core/models.py:206
#: aleksis/core/forms.py:157 aleksis/core/models.py:206
#: aleksis/core/models.py:514
msgid "Photo"
msgstr ""
#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
#: aleksis/core/forms.py:199 aleksis/core/forms.py:202
#: aleksis/core/models.py:73
msgid "Date"
msgstr ""
#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
#: aleksis/core/models.py:81
msgid "Time"
msgstr ""
#: aleksis/core/forms.py:231
#: aleksis/core/forms.py:233
msgid "From when until when should the announcement be displayed?"
msgstr ""
#: aleksis/core/forms.py:234
#: aleksis/core/forms.py:236
msgid "Who should see the announcement?"
msgstr ""
#: aleksis/core/forms.py:235
#: aleksis/core/forms.py:237
msgid "Write your announcement:"
msgstr ""
#: aleksis/core/forms.py:274
#: aleksis/core/forms.py:276
msgid "You are not allowed to create announcements which are only valid in the past."
msgstr ""
#: aleksis/core/forms.py:278
#: aleksis/core/forms.py:280
msgid "The from date and time must be earlier then the until date and time."
msgstr ""
#: aleksis/core/forms.py:287
#: aleksis/core/forms.py:289
msgid "You need at least one recipient."
msgstr ""
#: aleksis/core/forms.py:396
#: aleksis/core/forms.py:398
msgid "Invitation code"
msgstr ""
#: aleksis/core/forms.py:397
#: aleksis/core/forms.py:399
msgid "Please enter your invitation code."
msgstr ""
#: aleksis/core/forms.py:429
#: aleksis/core/forms.py:418 aleksis/core/models.py:181
msgid "First name"
msgstr ""
#: aleksis/core/forms.py:419 aleksis/core/models.py:182
msgid "Last name"
msgstr ""
#: aleksis/core/forms.py:428
msgid "A person is using this e-mail address"
msgstr ""
#: aleksis/core/forms.py:456
msgid "Who should get the permission?"
msgstr ""
#: aleksis/core/forms.py:430
#: aleksis/core/forms.py:457
msgid "On what?"
msgstr ""
#: aleksis/core/forms.py:456
#: aleksis/core/forms.py:483
msgid "Select objects which the permission should be granted for:"
msgstr ""
#: aleksis/core/forms.py:459
#: aleksis/core/forms.py:486
msgid "Grant the permission for all objects"
msgstr ""
#: aleksis/core/forms.py:467
#: aleksis/core/forms.py:494
msgid "You must select at least one group or person which should get the permission."
msgstr ""
#: aleksis/core/forms.py:472
#: aleksis/core/forms.py:499
msgid "You must grant the permission to all objects and/or to some objects."
msgstr ""
#: aleksis/core/forms.py:559
#: aleksis/core/forms.py:586
msgid "Adress data"
msgstr ""
#: aleksis/core/forms.py:571
#: aleksis/core/forms.py:598
msgid "Account data"
msgstr ""
#: aleksis/core/forms.py:578
#: aleksis/core/forms.py:605
msgid "Password"
msgstr ""
#: aleksis/core/forms.py:581
#: aleksis/core/forms.py:608
msgid "Password (again)"
msgstr ""
#: aleksis/core/forms.py:747
#: aleksis/core/forms.py:775
msgid "No valid selection."
msgstr ""
......@@ -266,7 +278,7 @@ msgstr ""
msgid "Login"
msgstr ""
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:20
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
#: aleksis/core/templates/socialaccount/signup.html:23
msgid "Sign up"
msgstr ""
......@@ -521,18 +533,10 @@ msgstr ""
msgid "male"
msgstr ""
#: aleksis/core/models.py:178 aleksis/core/models.py:1219
#: aleksis/core/models.py:178 aleksis/core/models.py:1227
msgid "Linked user"
msgstr ""
#: aleksis/core/models.py:181
msgid "First name"
msgstr ""
#: aleksis/core/models.py:182
msgid "Last name"
msgstr ""
#: aleksis/core/models.py:184
msgid "Additional name(s)"
msgstr ""
......@@ -821,7 +825,7 @@ msgstr ""
msgid "Menu"
msgstr ""
#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
#: aleksis/core/templates/oauth2_provider/application/detail.html:26
msgid "Icon"
msgstr ""
......@@ -910,55 +914,55 @@ msgstr ""
msgid "E-Mail address"
msgstr ""
#: aleksis/core/models.py:1169
#: aleksis/core/models.py:1177
msgid "Owner"
msgstr ""
#: aleksis/core/models.py:1173
#: aleksis/core/models.py:1181
msgid "File expires at"
msgstr ""
#: aleksis/core/models.py:1175
#: aleksis/core/models.py:1183
msgid "Generated HTML file"
msgstr ""
#: aleksis/core/models.py:1177
#: aleksis/core/models.py:1185
msgid "Generated PDF file"
msgstr ""
#: aleksis/core/models.py:1184
#: aleksis/core/models.py:1192
msgid "PDF file"
msgstr ""
#: aleksis/core/models.py:1185
#: aleksis/core/models.py:1193
msgid "PDF files"
msgstr ""
#: aleksis/core/models.py:1190
#: aleksis/core/models.py:1198
msgid "Task result"
msgstr ""
#: aleksis/core/models.py:1193
#: aleksis/core/models.py:1201
msgid "Task user"
msgstr ""
#: aleksis/core/models.py:1205
#: aleksis/core/models.py:1213
msgid "Task user assignment"
msgstr ""
#: aleksis/core/models.py:1206
#: aleksis/core/models.py:1214
msgid "Task user assignments"
msgstr ""
#: aleksis/core/models.py:1222
#: aleksis/core/models.py:1230
msgid "Additional attributes"
msgstr ""
#: aleksis/core/models.py:1260
#: aleksis/core/models.py:1268
msgid "Allowed scopes that clients can request"
msgstr ""
#: aleksis/core/models.py:1270
#: aleksis/core/models.py:1278
msgid "This image will be shown as icon in the authorization flow. It should be squared."
msgstr ""
......@@ -1154,11 +1158,11 @@ msgstr ""
msgid "Country for phone number parsing"
msgstr ""
#: aleksis/core/settings.py:526
#: aleksis/core/settings.py:529
msgid "English"
msgstr ""
#: aleksis/core/settings.py:527
#: aleksis/core/settings.py:530
msgid "German"
msgstr ""
......@@ -1172,14 +1176,14 @@ msgid "Edit"
msgstr ""
#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
#: aleksis/core/tables.py:137
#: aleksis/core/tables.py:138
#: aleksis/core/templates/core/announcement/list.html:22
msgid "Actions"
msgstr ""
#: aleksis/core/tables.py:61 aleksis/core/tables.py:62
#: aleksis/core/tables.py:76 aleksis/core/tables.py:92
#: aleksis/core/tables.py:135
#: aleksis/core/tables.py:136
#: aleksis/core/templates/core/announcement/list.html:42
#: aleksis/core/templates/core/group/full.html:31
#: aleksis/core/templates/core/pages/delete.html:22
......@@ -2176,6 +2180,22 @@ msgstr ""
msgid "Save preferences"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:5
msgid "The invite feature is disabled"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:13
msgid "The invite feature is disabled."
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:15
msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:16
msgid "site preferences page"
msgstr ""
#: aleksis/core/templates/invitations/enter.html:21
msgid "Accept your invitation"
msgstr ""
......@@ -2554,17 +2574,17 @@ msgid ""
" "
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:3
#: aleksis/core/templates/templated_email/person_changed.email:4
#, python-format
msgid "%(person)s changed their data!"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:6
#: aleksis/core/templates/templated_email/person_changed.email:7
#, python-format
msgid "the person %(person)s recently changed the following fields:"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:14
#: aleksis/core/templates/templated_email/person_changed.email:15
#, python-format
msgid ""
"\n"
......@@ -2960,149 +2980,149 @@ msgstr ""
msgid "The school term has been saved."
msgstr ""
#: aleksis/core/views.py:414
#: aleksis/core/views.py:417
msgid "The child groups were successfully saved."
msgstr ""
#: aleksis/core/views.py:433 aleksis/core/views.py:443
#: aleksis/core/views.py:436 aleksis/core/views.py:446
msgid "The person has been saved."
msgstr ""
#: aleksis/core/views.py:493
#: aleksis/core/views.py:496
msgid "The group has been saved."
msgstr ""
#: aleksis/core/views.py:590
#: aleksis/core/views.py:593
msgid "The announcement has been saved."
msgstr ""
#: aleksis/core/views.py:606
#: aleksis/core/views.py:609
msgid "The announcement has been deleted."
msgstr ""
#: aleksis/core/views.py:674
#: aleksis/core/views.py:677
msgid "The requested preference registry does not exist"
msgstr ""
#: aleksis/core/views.py:693
#: aleksis/core/views.py:696
msgid "The preferences have been saved successfully."
msgstr ""
#: aleksis/core/views.py:717
#: aleksis/core/views.py:720
msgid "The person has been deleted."
msgstr ""
#: aleksis/core/views.py:731
#: aleksis/core/views.py:734
msgid "The group has been deleted."
msgstr ""
#: aleksis/core/views.py:763
#: aleksis/core/views.py:766
msgid "The additional_field has been saved."
msgstr ""
#: aleksis/core/views.py:797
#: aleksis/core/views.py:800
msgid "The additional field has been deleted."
msgstr ""
#: aleksis/core/views.py:822
#: aleksis/core/views.py:825
msgid "The group type has been saved."
msgstr ""
#: aleksis/core/views.py:852
#: aleksis/core/views.py:855
msgid "The group type has been deleted."
msgstr ""
#: aleksis/core/views.py:885
#: aleksis/core/views.py:888
msgid "Progress: Run data checks"
msgstr ""
#: aleksis/core/views.py:886
#: aleksis/core/views.py:889
msgid "Run data checks …"
msgstr ""
#: aleksis/core/views.py:887
#: aleksis/core/views.py:890
msgid "The data checks were run successfully."
msgstr ""
#: aleksis/core/views.py:888
#: aleksis/core/views.py:891
msgid "There was a problem while running data checks."
msgstr ""
#: aleksis/core/views.py:904
#: aleksis/core/views.py:907
#, python-brace-format
msgid "The solve option '{solve_option_obj.verbose_name}' "
msgstr ""
#: aleksis/core/views.py:914
#: aleksis/core/views.py:917
msgid "The requested solve option does not exist"
msgstr ""
#: aleksis/core/views.py:946
#: aleksis/core/views.py:949
msgid "The dashboard widget has been saved."
msgstr ""
#: aleksis/core/views.py:976
#: aleksis/core/views.py:979
msgid "The dashboard widget has been created."
msgstr ""
#: aleksis/core/views.py:986
#: aleksis/core/views.py:989
msgid "The dashboard widget has been deleted."
msgstr ""
#: aleksis/core/views.py:1057
#: aleksis/core/views.py:1060
msgid "Your dashboard configuration has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1059
#: aleksis/core/views.py:1062
msgid "The configuration of the default dashboard has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1129
#: aleksis/core/views.py:1138
#, python-brace-format
msgid "The invitation was successfully created. The invitation code is {code}"
msgstr ""
#: aleksis/core/views.py:1220
#: aleksis/core/views.py:1229
msgid "We have successfully assigned the permissions."
msgstr ""
#: aleksis/core/views.py:1230
#: aleksis/core/views.py:1239
msgid "The global user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1240
#: aleksis/core/views.py:1249
msgid "The global group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1250
#: aleksis/core/views.py:1259
msgid "The object user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1260
#: aleksis/core/views.py:1269
msgid "The object group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1328
#: aleksis/core/views.py:1337
msgid "The requested PDF file does not exist"
msgstr ""
#: aleksis/core/views.py:1337 aleksis/core/views.py:1341
#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
msgid "The requested task does not exist or is not accessible"
msgstr ""
#: aleksis/core/views.py:1379
#: aleksis/core/views.py:1388
msgid "The third-party account could not be disconnected because it is the only login method available."
msgstr ""
#: aleksis/core/views.py:1386
#: aleksis/core/views.py:1395
msgid "The third-party account has been successfully disconnected."
msgstr ""
#: aleksis/core/views.py:1445
msgid "Person was invited successfully."
#: aleksis/core/views.py:1466
msgid "Person was invited successfully and an email with further instructions has been send to them."
msgstr ""
#: aleksis/core/views.py:1447
#: aleksis/core/views.py:1477
msgid "Person was already invited."
msgstr ""
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: AlekSIS (School Information System) 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......@@ -37,7 +37,7 @@ msgstr ""
msgid "Home and mobile phone"
msgstr ""
#: aleksis/core/apps.py:171 aleksis/core/forms.py:218 aleksis/core/menus.py:265
#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:265
#: aleksis/core/models.py:462 aleksis/core/templates/core/group/list.html:8
#: aleksis/core/templates/core/group/list.html:9
#: aleksis/core/templates/core/person/full.html:250
......@@ -98,145 +98,157 @@ msgstr ""
msgid "Group"
msgstr ""
#: aleksis/core/forms.py:48 aleksis/core/forms.py:554
#: aleksis/core/forms.py:50 aleksis/core/forms.py:581
msgid "Base data"
msgstr ""
#: aleksis/core/forms.py:53
#: aleksis/core/forms.py:55
msgid "Address"
msgstr ""
#: aleksis/core/forms.py:54 aleksis/core/forms.py:563
#: aleksis/core/forms.py:56 aleksis/core/forms.py:590
msgid "Contact data"
msgstr ""
#: aleksis/core/forms.py:56
#: aleksis/core/forms.py:58
msgid "Advanced personal data"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "New user"
msgstr ""
#: aleksis/core/forms.py:104
#: aleksis/core/forms.py:106
msgid "Create a new account"
msgstr ""
#: aleksis/core/forms.py:130
#: aleksis/core/forms.py:132
msgid "You cannot set a new username when also selecting an existing user."
msgstr ""
#: aleksis/core/forms.py:134
#: aleksis/core/forms.py:136
msgid "This username is already in use."
msgstr ""
#: aleksis/core/forms.py:151 aleksis/core/models.py:130
#: aleksis/core/forms.py:153 aleksis/core/models.py:130
msgid "School term"
msgstr ""
#: aleksis/core/forms.py:152
#: aleksis/core/forms.py:154
msgid "Common data"
msgstr ""
#: aleksis/core/forms.py:153 aleksis/core/forms.py:205
#: aleksis/core/forms.py:155 aleksis/core/forms.py:207
#: aleksis/core/menus.py:254 aleksis/core/models.py:153
#: aleksis/core/templates/core/person/list.html:8
#: aleksis/core/templates/core/person/list.html:9
msgid "Persons"
msgstr ""
#: aleksis/core/forms.py:154 aleksis/core/forms.py:565
#: aleksis/core/forms.py:156 aleksis/core/forms.py:592
msgid "Additional data"
msgstr ""
#: aleksis/core/forms.py:155 aleksis/core/models.py:206
#: aleksis/core/forms.py:157 aleksis/core/models.py:206
#: aleksis/core/models.py:514
msgid "Photo"
msgstr ""
#: aleksis/core/forms.py:197 aleksis/core/forms.py:200
#: aleksis/core/forms.py:199 aleksis/core/forms.py:202
#: aleksis/core/models.py:73
msgid "Date"
msgstr ""
#: aleksis/core/forms.py:198 aleksis/core/forms.py:201
#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
#: aleksis/core/models.py:81
msgid "Time"
msgstr ""
#: aleksis/core/forms.py:231
#: aleksis/core/forms.py:233
msgid "From when until when should the announcement be displayed?"
msgstr ""
#: aleksis/core/forms.py:234
#: aleksis/core/forms.py:236
msgid "Who should see the announcement?"
msgstr ""
#: aleksis/core/forms.py:235
#: aleksis/core/forms.py:237
msgid "Write your announcement:"
msgstr ""
#: aleksis/core/forms.py:274
#: aleksis/core/forms.py:276
msgid "You are not allowed to create announcements which are only valid in the past."
msgstr ""
#: aleksis/core/forms.py:278
#: aleksis/core/forms.py:280
msgid "The from date and time must be earlier then the until date and time."
msgstr ""
#: aleksis/core/forms.py:287
#: aleksis/core/forms.py:289
msgid "You need at least one recipient."
msgstr ""
#: aleksis/core/forms.py:396
#: aleksis/core/forms.py:398
msgid "Invitation code"
msgstr ""
#: aleksis/core/forms.py:397
#: aleksis/core/forms.py:399
msgid "Please enter your invitation code."
msgstr ""
#: aleksis/core/forms.py:429
#: aleksis/core/forms.py:418 aleksis/core/models.py:181
msgid "First name"
msgstr ""
#: aleksis/core/forms.py:419 aleksis/core/models.py:182
msgid "Last name"
msgstr ""
#: aleksis/core/forms.py:428
msgid "A person is using this e-mail address"
msgstr ""
#: aleksis/core/forms.py:456
msgid "Who should get the permission?"
msgstr ""
#: aleksis/core/forms.py:430
#: aleksis/core/forms.py:457
msgid "On what?"
msgstr ""
#: aleksis/core/forms.py:456
#: aleksis/core/forms.py:483
msgid "Select objects which the permission should be granted for:"
msgstr ""
#: aleksis/core/forms.py:459
#: aleksis/core/forms.py:486
msgid "Grant the permission for all objects"
msgstr ""
#: aleksis/core/forms.py:467
#: aleksis/core/forms.py:494
msgid "You must select at least one group or person which should get the permission."
msgstr ""
#: aleksis/core/forms.py:472
#: aleksis/core/forms.py:499
msgid "You must grant the permission to all objects and/or to some objects."
msgstr ""
#: aleksis/core/forms.py:559
#: aleksis/core/forms.py:586
msgid "Adress data"
msgstr ""
#: aleksis/core/forms.py:571
#: aleksis/core/forms.py:598
msgid "Account data"
msgstr ""
#: aleksis/core/forms.py:578
#: aleksis/core/forms.py:605
msgid "Password"
msgstr ""
#: aleksis/core/forms.py:581
#: aleksis/core/forms.py:608
msgid "Password (again)"
msgstr ""
#: aleksis/core/forms.py:747
#: aleksis/core/forms.py:775
msgid "No valid selection."
msgstr ""
......@@ -266,7 +278,7 @@ msgstr ""
msgid "Login"
msgstr ""
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:20
#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
#: aleksis/core/templates/socialaccount/signup.html:23
msgid "Sign up"
msgstr ""
......@@ -521,18 +533,10 @@ msgstr ""
msgid "male"
msgstr ""
#: aleksis/core/models.py:178 aleksis/core/models.py:1219
#: aleksis/core/models.py:178 aleksis/core/models.py:1227
msgid "Linked user"
msgstr ""
#: aleksis/core/models.py:181
msgid "First name"
msgstr ""
#: aleksis/core/models.py:182
msgid "Last name"
msgstr ""
#: aleksis/core/models.py:184
msgid "Additional name(s)"
msgstr ""
......@@ -821,7 +825,7 @@ msgstr ""
msgid "Menu"
msgstr ""
#: aleksis/core/models.py:1026 aleksis/core/models.py:1266
#: aleksis/core/models.py:1026 aleksis/core/models.py:1274
#: aleksis/core/templates/oauth2_provider/application/detail.html:26
msgid "Icon"
msgstr ""
......@@ -910,55 +914,55 @@ msgstr ""
msgid "E-Mail address"
msgstr ""
#: aleksis/core/models.py:1169
#: aleksis/core/models.py:1177
msgid "Owner"
msgstr ""
#: aleksis/core/models.py:1173
#: aleksis/core/models.py:1181
msgid "File expires at"
msgstr ""
#: aleksis/core/models.py:1175
#: aleksis/core/models.py:1183
msgid "Generated HTML file"
msgstr ""
#: aleksis/core/models.py:1177
#: aleksis/core/models.py:1185
msgid "Generated PDF file"
msgstr ""
#: aleksis/core/models.py:1184
#: aleksis/core/models.py:1192
msgid "PDF file"
msgstr ""
#: aleksis/core/models.py:1185
#: aleksis/core/models.py:1193
msgid "PDF files"
msgstr ""
#: aleksis/core/models.py:1190
#: aleksis/core/models.py:1198
msgid "Task result"
msgstr ""
#: aleksis/core/models.py:1193
#: aleksis/core/models.py:1201
msgid "Task user"
msgstr ""
#: aleksis/core/models.py:1205
#: aleksis/core/models.py:1213
msgid "Task user assignment"
msgstr ""
#: aleksis/core/models.py:1206
#: aleksis/core/models.py:1214
msgid "Task user assignments"
msgstr ""
#: aleksis/core/models.py:1222
#: aleksis/core/models.py:1230
msgid "Additional attributes"
msgstr ""
#: aleksis/core/models.py:1260
#: aleksis/core/models.py:1268
msgid "Allowed scopes that clients can request"
msgstr ""
#: aleksis/core/models.py:1270
#: aleksis/core/models.py:1278
msgid "This image will be shown as icon in the authorization flow. It should be squared."
msgstr ""
......@@ -1154,11 +1158,11 @@ msgstr ""
msgid "Country for phone number parsing"
msgstr ""
#: aleksis/core/settings.py:526
#: aleksis/core/settings.py:529
msgid "English"
msgstr ""
#: aleksis/core/settings.py:527
#: aleksis/core/settings.py:530
msgid "German"
msgstr ""
......@@ -1172,14 +1176,14 @@ msgid "Edit"
msgstr ""
#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
#: aleksis/core/tables.py:137
#: aleksis/core/tables.py:138
#: aleksis/core/templates/core/announcement/list.html:22
msgid "Actions"
msgstr ""
#: aleksis/core/tables.py:61 aleksis/core/tables.py:62
#: aleksis/core/tables.py:76 aleksis/core/tables.py:92
#: aleksis/core/tables.py:135
#: aleksis/core/tables.py:136
#: aleksis/core/templates/core/announcement/list.html:42
#: aleksis/core/templates/core/group/full.html:31
#: aleksis/core/templates/core/pages/delete.html:22
......@@ -2176,6 +2180,22 @@ msgstr ""
msgid "Save preferences"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:5
msgid "The invite feature is disabled"
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:13
msgid "The invite feature is disabled."
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:15
msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
msgstr ""
#: aleksis/core/templates/invitations/disabled.html:16
msgid "site preferences page"
msgstr ""
#: aleksis/core/templates/invitations/enter.html:21
msgid "Accept your invitation"
msgstr ""
......@@ -2554,17 +2574,17 @@ msgid ""
" "
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:3
#: aleksis/core/templates/templated_email/person_changed.email:4
#, python-format
msgid "%(person)s changed their data!"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:6
#: aleksis/core/templates/templated_email/person_changed.email:7
#, python-format
msgid "the person %(person)s recently changed the following fields:"
msgstr ""
#: aleksis/core/templates/templated_email/person_changed.email:14
#: aleksis/core/templates/templated_email/person_changed.email:15
#, python-format
msgid ""
"\n"
......@@ -2960,148 +2980,148 @@ msgstr ""
msgid "The school term has been saved."
msgstr ""
#: aleksis/core/views.py:414
#: aleksis/core/views.py:417
msgid "The child groups were successfully saved."
msgstr ""
#: aleksis/core/views.py:433 aleksis/core/views.py:443
#: aleksis/core/views.py:436 aleksis/core/views.py:446
msgid "The person has been saved."
msgstr ""
#: aleksis/core/views.py:493
#: aleksis/core/views.py:496
msgid "The group has been saved."
msgstr ""
#: aleksis/core/views.py:590
#: aleksis/core/views.py:593
msgid "The announcement has been saved."
msgstr ""
#: aleksis/core/views.py:606
#: aleksis/core/views.py:609
msgid "The announcement has been deleted."
msgstr ""
#: aleksis/core/views.py:674
#: aleksis/core/views.py:677
msgid "The requested preference registry does not exist"
msgstr ""
#: aleksis/core/views.py:693
#: aleksis/core/views.py:696
msgid "The preferences have been saved successfully."
msgstr ""
#: aleksis/core/views.py:717
#: aleksis/core/views.py:720
msgid "The person has been deleted."
msgstr ""
#: aleksis/core/views.py:731
#: aleksis/core/views.py:734
msgid "The group has been deleted."
msgstr ""
#: aleksis/core/views.py:763
#: aleksis/core/views.py:766
msgid "The additional_field has been saved."
msgstr ""
#: aleksis/core/views.py:797
#: aleksis/core/views.py:800
msgid "The additional field has been deleted."
msgstr ""
#: aleksis/core/views.py:822
#: aleksis/core/views.py:825
msgid "The group type has been saved."
msgstr ""
#: aleksis/core/views.py:852
#: aleksis/core/views.py:855
msgid "The group type has been deleted."
msgstr ""
#: aleksis/core/views.py:885
#: aleksis/core/views.py:888
msgid "Progress: Run data checks"
msgstr ""
#: aleksis/core/views.py:886
#: aleksis/core/views.py:889
msgid "Run data checks …"
msgstr ""
#: aleksis/core/views.py:887
#: aleksis/core/views.py:890
msgid "The data checks were run successfully."
msgstr ""
#: aleksis/core/views.py:888
#: aleksis/core/views.py:891
msgid "There was a problem while running data checks."
msgstr ""
#: aleksis/core/views.py:904
#: aleksis/core/views.py:907
#, python-brace-format
msgid "The solve option '{solve_option_obj.verbose_name}' "
msgstr ""
#: aleksis/core/views.py:914
#: aleksis/core/views.py:917
msgid "The requested solve option does not exist"
msgstr ""
#: aleksis/core/views.py:946
#: aleksis/core/views.py:949
msgid "The dashboard widget has been saved."
msgstr ""
#: aleksis/core/views.py:976
#: aleksis/core/views.py:979
msgid "The dashboard widget has been created."
msgstr ""
#: aleksis/core/views.py:986
#: aleksis/core/views.py:989
msgid "The dashboard widget has been deleted."
msgstr ""
#: aleksis/core/views.py:1057
#: aleksis/core/views.py:1060
msgid "Your dashboard configuration has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1059
#: aleksis/core/views.py:1062
msgid "The configuration of the default dashboard has been saved successfully."
msgstr ""
#: aleksis/core/views.py:1129
#: aleksis/core/views.py:1138
#, python-brace-format
msgid "The invitation was successfully created. The invitation code is {code}"
msgstr ""
#: aleksis/core/views.py:1220
#: aleksis/core/views.py:1229
msgid "We have successfully assigned the permissions."
msgstr ""
#: aleksis/core/views.py:1230
#: aleksis/core/views.py:1239
msgid "The global user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1240
#: aleksis/core/views.py:1249
msgid "The global group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1250
#: aleksis/core/views.py:1259
msgid "The object user permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1260
#: aleksis/core/views.py:1269
msgid "The object group permission has been deleted."
msgstr ""
#: aleksis/core/views.py:1328
#: aleksis/core/views.py:1337
msgid "The requested PDF file does not exist"
msgstr ""
#: aleksis/core/views.py:1337 aleksis/core/views.py:1341
#: aleksis/core/views.py:1346 aleksis/core/views.py:1350
msgid "The requested task does not exist or is not accessible"
msgstr ""
#: aleksis/core/views.py:1379
#: aleksis/core/views.py:1388
msgid "The third-party account could not be disconnected because it is the only login method available."
msgstr ""
#: aleksis/core/views.py:1386
#: aleksis/core/views.py:1395
msgid "The third-party account has been successfully disconnected."
msgstr ""
#: aleksis/core/views.py:1445
msgid "Person was invited successfully."
#: aleksis/core/views.py:1466
msgid "Person was invited successfully and an email with further instructions has been send to them."
msgstr ""
#: aleksis/core/views.py:1447
#: aleksis/core/views.py:1477
msgid "Person was already invited."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-31 17:03+0100\n"
"POT-Creation-Date: 2022-02-08 23:16+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"
......
......@@ -49,86 +49,6 @@ MENUS = {
),
],
},
{
"name": _("Account"),
"url": "#",
"icon": "person",
"root": True,
"validators": ["menu_generator.validators.is_authenticated"],
"submenu": [
{
"name": _("Stop impersonation"),
"url": "impersonate-stop",
"icon": "stop",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.is_impersonate",
],
},
{
"name": _("Logout"),
"url": "logout",
"icon": "exit_to_app",
"validators": ["menu_generator.validators.is_authenticated"],
},
{
"name": _("2FA"),
"url": "two_factor:profile",
"icon": "phonelink_lock",
"validators": [
"menu_generator.validators.is_authenticated",
],
},
{
"name": _("Change password"),
"url": "account_change_password",
"icon": "lock",
"validators": [
"menu_generator.validators.is_authenticated",
(
"aleksis.core.util.predicates.permission_validator",
"core.can_change_password",
),
],
},
{
"name": _("Me"),
"url": "person",
"icon": "insert_emoticon",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
{
"name": _("Preferences"),
"url": "preferences_person",
"icon": "settings",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
{
"name": _("Third-party accounts"),
"url": "socialaccount_connections",
"icon": "public",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
{
"name": _("Authorized applications"),
"url": "oauth2_provider:authorized-token-list",
"icon": "touch_app",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
],
},
{
"name": _("Admin"),
"url": "#",
......@@ -329,4 +249,78 @@ MENUS = {
],
},
],
"NAVBAR_ACCOUNT_MENU": [
{
"name": _("Stop impersonation"),
"url": "impersonate-stop",
"icon": "stop",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.is_impersonate",
],
},
{
"name": _("Account"),
"url": "person",
"icon": "person",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
{
"name": _("Preferences"),
"url": "preferences_person",
"icon": "settings",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
{
"name": _("2FA"),
"url": "two_factor:profile",
"icon": "phonelink_lock",
"validators": [
"menu_generator.validators.is_authenticated",
],
},
{
"name": _("Change password"),
"url": "account_change_password",
"icon": "lock",
"validators": [
"menu_generator.validators.is_authenticated",
(
"aleksis.core.util.predicates.permission_validator",
"core.can_change_password",
),
],
},
{
"name": _("Third-party accounts"),
"url": "socialaccount_connections",
"icon": "public",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
{
"name": _("Authorized applications"),
"url": "oauth2_provider:authorized-token-list",
"icon": "touch_app",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
{
"divider": True,
"name": _("Logout"),
"url": "logout",
"icon": "exit_to_app",
"validators": ["menu_generator.validators.is_authenticated"],
},
],
}
# Generated by Django 3.2.12 on 2022-02-18 21:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0035_preference_model_unique'),
]
operations = [
migrations.AddField(
model_name='additionalfield',
name='help_text',
field=models.TextField(blank=True, verbose_name='Help text / description'),
),
migrations.AddField(
model_name='additionalfield',
name='required',
field=models.BooleanField(default=False, verbose_name='Required'),
),
]
# Generated by Django 3.2.12 on 2022-02-23 18:03
import ckeditor.fields
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('core', '0036_additionalfields_helptext_required'),
]
operations = [
migrations.CreateModel(
name='StaticContentWidget',
fields=[
('dashboardwidget_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.dashboardwidget')),
('content', ckeditor.fields.RichTextField(verbose_name='Content')),
],
options={
'verbose_name': 'Static content widget',
'verbose_name_plural': 'Static content widgets',
},
bases=('core.dashboardwidget',),
),
]
# Generated by Django 3.2.12 on 2022-02-23 19:33
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('core', '0037_add_static_content_widget'),
]
operations = [
migrations.AddField(
model_name='notification',
name='send_at',
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Send notification at'),
preserve_default=False,
),
]
# flake8: noqa: DJ01
import base64
import hmac
from datetime import date, datetime, timedelta
from typing import Any, Iterable, List, Optional, Sequence, Union
......@@ -24,9 +25,12 @@ from django.utils.functional import classproperty
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _
import customidenticon
import jsonstore
from cachalot.api import cachalot_disabled
from cache_memoize import cache_memoize
from celery.result import AsyncResult
from ckeditor.fields import RichTextField
from django_celery_results.models import TaskResult
from django_cte import CTEQuerySet, With
from dynamic_preferences.models import PerInstancePreferenceModel
......@@ -314,7 +318,12 @@ class Person(ExtensibleModel):
@property
def initials(self):
return f"{self.first_name[0]}{self.last_name[0]}".upper()
initials = ""
if self.first_name:
initials += self.first_name[0]
if self.last_name:
initials += self.last_name[0]
return initials.upper() or "?"
user_info_tracker = FieldTracker(fields=("first_name", "last_name", "email", "user_id"))
......@@ -334,6 +343,20 @@ class Person(ExtensibleModel):
q = q.union(group.child_groups_recursive)
return q
@property
@cache_memoize(60 * 60)
def identicon_url(self):
identicon = customidenticon.create(self.full_name, border=35)
base64_data = base64.b64encode(identicon).decode("ascii")
return f"data:image/png;base64,{base64_data}"
@property
def avatar_url(self):
if self.avatar:
return self.avatar.url
else:
return self.identicon_url
def save(self, *args, **kwargs):
# Determine all fields that were changed since last load
changed = self.user_info_tracker.changed()
......@@ -435,6 +458,8 @@ class AdditionalField(ExtensibleModel):
field_type = models.CharField(
verbose_name=_("Type of field"), choices=FIELD_CHOICES, max_length=50
)
required = models.BooleanField(verbose_name=_("Required"), default=False)
help_text = models.TextField(verbose_name=_("Help text / description"), blank=True)
def __str__(self) -> str:
return self.title
......@@ -716,6 +741,8 @@ class Notification(ExtensibleModel, TimeStampedModel):
description = models.TextField(max_length=500, verbose_name=_("Description"))
link = models.URLField(blank=True, verbose_name=_("Link"))
send_at = models.DateTimeField(default=timezone.now, verbose_name=_("Send notification at"))
read = models.BooleanField(default=False, verbose_name=_("Read"))
sent = models.BooleanField(default=False, verbose_name=_("Sent"))
......@@ -724,10 +751,14 @@ class Notification(ExtensibleModel, TimeStampedModel):
def save(self, **kwargs):
super().save(**kwargs)
if not self.sent:
send_notification(self.pk, resend=True)
self.sent = True
super().save(**kwargs)
if not self.sent and self.send_at <= timezone.now():
self.send()
super().save(**kwargs)
def send(self, resend: bool = False) -> Optional[AsyncResult]:
"""Send the notification to the recipient."""
if not self.sent or resend:
return send_notification.delay(self.pk, resend=True)
class Meta:
verbose_name = _("Notification")
......@@ -965,6 +996,19 @@ class ExternalLinkWidget(DashboardWidget):
verbose_name_plural = _("External link widgets")
class StaticContentWidget(DashboardWidget):
template = "core/dashboard_widget/static_content_widget.html"
content = RichTextField(verbose_name=_("Content"))
def get_context(self, request):
return {"title": self.title, "content": self.content}
class Meta:
verbose_name = _("Static content widget")
verbose_name_plural = _("Static content widgets")
class DashboardWidgetOrder(ExtensibleModel):
widget = models.ForeignKey(
DashboardWidget, on_delete=models.CASCADE, verbose_name=_("Dashboard widget")
......@@ -1150,8 +1194,16 @@ class PersonInvitation(AbstractBaseInvitation, PureDjangoModel):
def __str__(self) -> str:
return f"{self.email} ({self.inviter})"
key_expired = Invitation.key_expired
@classmethod
def create(cls, email, inviter=None, **kwargs):
length = get_site_preferences()["auth__invite_code_length"]
packet_size = get_site_preferences()["auth__invite_code_packet_size"]
code = generate_random_code(length, packet_size)
instance = cls.objects.create(email=email, inviter=inviter, key=code, **kwargs)
return instance
key_expired = Invitation.key_expired
send_invitation = Invitation.send_invitation
......
......@@ -271,6 +271,14 @@ class AllowPasswordChange(BooleanPreference):
verbose_name = _("Allow users to change their passwords")
@site_preferences_registry.register
class AllowPasswordReset(BooleanPreference):
section = auth
name = "allow_password_reset"
default = True
verbose_name = _("Allow users to reset their passwords")
@site_preferences_registry.register
class SignupEnabled(BooleanPreference):
section = auth
......@@ -279,6 +287,14 @@ class SignupEnabled(BooleanPreference):
verbose_name = _("Enable signup")
@site_preferences_registry.register
class AllowedUsernameRegex(StringPreference):
section = auth
name = "allowed_username_regex"
default = ".+"
verbose_name = _("Regular expression for allowed usernames")
@site_preferences_registry.register
class InviteEnabled(BooleanPreference):
section = auth
......@@ -422,6 +438,16 @@ class PersonChangeNotificationContact(StringPreference):
required = False
@site_preferences_registry.register
class PersonPreferPhoto(BooleanPreference):
"""Preference, whether personal photos should be displayed instead of avatars."""
section = account
name = "person_prefer_photo"
default = False
verbose_name = _("Prefer personal photos over avatars")
@site_preferences_registry.register
class PDFFileExpirationDuration(IntegerPreference):
"""PDF file expiration duration."""
......