diff --git a/AKModel/admin.py b/AKModel/admin.py index a6aae5ae249182e80490221d7670952a018c3d89..a6e6b79ee4f152c0c8db0630d03b1f652fefddca 100644 --- a/AKModel/admin.py +++ b/AKModel/admin.py @@ -13,8 +13,8 @@ from django.utils.translation import gettext_lazy as _ from rest_framework.reverse import reverse from simple_history.admin import SimpleHistoryAdmin -from AKModel.availability.forms import AvailabilitiesFormMixin from AKModel.availability.models import Availability +from AKModel.forms import RoomFormWithAvailabilities from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKRequirement, AK, AKSlot, Room, AKOrgaMessage, \ ConstraintViolation, DefaultSlot from AKModel.urls import get_admin_urls_event_wizard, get_admin_urls_event @@ -235,30 +235,6 @@ class AKAdmin(SimpleHistoryAdmin): return HttpResponseRedirect(f"{reverse_lazy('admin:ak-reset-interest-counter')}?pks={','.join(str(pk) for pk in selected)}") -class RoomForm(AvailabilitiesFormMixin, forms.ModelForm): - class Meta: - model = Room - fields = ['name', - 'location', - 'capacity', - 'properties', - 'event', - ] - - widgets = { - 'properties': forms.CheckboxSelectMultiple, - } - - def __init__(self, *args, **kwargs): - # Init availability mixin - kwargs['initial'] = dict() - super().__init__(*args, **kwargs) - self.initial = {**self.initial, **kwargs['initial']} - # Filter possible values for m2m when event is specified - if hasattr(self.instance, "event") and self.instance.event is not None: - self.fields["properties"].queryset = AKRequirement.objects.filter(event=self.instance.event) - - @admin.register(Room) class RoomAdmin(admin.ModelAdmin): model = Room @@ -268,9 +244,13 @@ class RoomAdmin(admin.ModelAdmin): ordering = ['location', 'name'] change_form_template = "admin/AKModel/room_change_form.html" + def add_view(self, request, form_url='', extra_context=None): + # Use custom view for room creation (either room form or combined form if virtual rooms are supported) + return redirect("admin:room-new") + def get_form(self, request, obj=None, change=False, **kwargs): if obj is not None: - return RoomForm + return RoomFormWithAvailabilities return super().get_form(request, obj, change, **kwargs) def formfield_for_foreignkey(self, db_field, request, **kwargs): @@ -280,6 +260,18 @@ class RoomAdmin(admin.ModelAdmin): db_field, request, **kwargs ) + def get_urls(self): + if apps.is_installed("AKOnline"): + from AKOnline.views import RoomCreationWithVirtualView as RoomCreationView + else: + from .views import RoomCreationView + + urls = [ + path('new/', self.admin_site.admin_view(RoomCreationView.as_view()), name="room-new"), + ] + urls.extend(super().get_urls()) + return urls + class AKSlotAdminForm(forms.ModelForm): def __init__(self, *args, **kwargs): diff --git a/AKModel/forms.py b/AKModel/forms.py index bfa327e8835cb0f8b32eb32575a60c0409b505a6..0ca5c1c5412ea92f117acf26f64a38a86a028eeb 100644 --- a/AKModel/forms.py +++ b/AKModel/forms.py @@ -6,7 +6,8 @@ from django import forms from django.forms.utils import ErrorList from django.utils.translation import gettext_lazy as _ -from AKModel.models import Event, AKCategory, AKRequirement +from AKModel.availability.forms import AvailabilitiesFormMixin +from AKModel.models import Event, AKCategory, AKRequirement, Room class NewEventWizardStartForm(forms.ModelForm): @@ -148,3 +149,37 @@ class RoomBatchCreationForm(AdminIntermediateForm): raise forms.ValidationError(_("CSV must contain a name column")) return rooms_raw_dict + + +class RoomForm(forms.ModelForm): + class Meta: + model = Room + fields = ['name', + 'location', + 'capacity', + 'event', + ] + + +class RoomFormWithAvailabilities(AvailabilitiesFormMixin, RoomForm): + class Meta: + model = Room + fields = ['name', + 'location', + 'capacity', + 'properties', + 'event', + ] + + widgets = { + 'properties': forms.CheckboxSelectMultiple, + } + + def __init__(self, *args, **kwargs): + # Init availability mixin + kwargs['initial'] = dict() + super().__init__(*args, **kwargs) + self.initial = {**self.initial, **kwargs['initial']} + # Filter possible values for m2m when event is specified + if hasattr(self.instance, "event") and self.instance.event is not None: + self.fields["properties"].queryset = AKRequirement.objects.filter(event=self.instance.event) diff --git a/AKModel/locale/de_DE/LC_MESSAGES/django.po b/AKModel/locale/de_DE/LC_MESSAGES/django.po index b33558d0ecaa0d7f0c73aebfc07e2af2bc3deec6..2c101f90249bcf4daa1b5fec826f38d6b2bcc87d 100644 --- a/AKModel/locale/de_DE/LC_MESSAGES/django.po +++ b/AKModel/locale/de_DE/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-01 20:05+0100\n" +"POT-Creation-Date: 2023-03-24 17:57+0100\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" @@ -25,11 +25,11 @@ msgstr "Status" msgid "Toggle plan visibility" msgstr "Plansichtbarkeit ändern" -#: AKModel/admin.py:73 AKModel/admin.py:84 AKModel/views.py:496 +#: AKModel/admin.py:73 AKModel/admin.py:84 AKModel/views.py:497 msgid "Publish plan" msgstr "Plan veröffentlichen" -#: AKModel/admin.py:76 AKModel/admin.py:89 AKModel/views.py:506 +#: AKModel/admin.py:76 AKModel/admin.py:89 AKModel/views.py:507 msgid "Unpublish plan" msgstr "Plan verbergen" @@ -53,27 +53,27 @@ msgstr "In Wiki-Syntax exportieren" msgid "Cannot export AKs from more than one event at the same time." msgstr "Kann nicht AKs von mehreren Events zur selben Zeit exportieren." -#: AKModel/admin.py:227 AKModel/views.py:476 +#: AKModel/admin.py:227 AKModel/views.py:477 msgid "Reset interest in AKs" msgstr "Interesse an AKs zurücksetzen" -#: AKModel/admin.py:232 AKModel/views.py:486 +#: AKModel/admin.py:232 AKModel/views.py:487 msgid "Reset AKs' interest counters" msgstr "Interessenszähler der AKs zurücksetzen" -#: AKModel/admin.py:316 AKModel/admin.py:323 +#: AKModel/admin.py:308 AKModel/admin.py:315 msgid "AK Details" msgstr "AK-Details" -#: AKModel/admin.py:375 AKModel/views.py:446 +#: AKModel/admin.py:367 AKModel/views.py:447 msgid "Mark Constraint Violations as manually resolved" msgstr "Markiere Constraintverletzungen als manuell behoben" -#: AKModel/admin.py:380 AKModel/views.py:456 +#: AKModel/admin.py:372 AKModel/views.py:457 msgid "Set Constraint Violations to level \"violation\"" msgstr "Constraintverletzungen auf Level \"Violation\" setzen" -#: AKModel/admin.py:385 AKModel/views.py:466 +#: AKModel/admin.py:377 AKModel/views.py:467 msgid "Set Constraint Violations to level \"warning\"" msgstr "Constraintverletzungen auf Level \"Warning\" setzen" @@ -103,16 +103,16 @@ msgid "Please fill in your availabilities!" msgstr "Bitte Verfügbarkeiten eintragen!" #: AKModel/availability/models.py:38 AKModel/models.py:56 AKModel/models.py:128 -#: AKModel/models.py:183 AKModel/models.py:202 AKModel/models.py:220 -#: AKModel/models.py:273 AKModel/models.py:338 AKModel/models.py:371 -#: AKModel/models.py:442 AKModel/models.py:483 AKModel/models.py:648 +#: AKModel/models.py:183 AKModel/models.py:202 AKModel/models.py:223 +#: AKModel/models.py:276 AKModel/models.py:341 AKModel/models.py:374 +#: AKModel/models.py:445 AKModel/models.py:486 AKModel/models.py:651 msgid "Event" msgstr "Event" #: AKModel/availability/models.py:39 AKModel/models.py:129 -#: AKModel/models.py:184 AKModel/models.py:203 AKModel/models.py:221 -#: AKModel/models.py:274 AKModel/models.py:339 AKModel/models.py:372 -#: AKModel/models.py:443 AKModel/models.py:484 AKModel/models.py:649 +#: AKModel/models.py:184 AKModel/models.py:203 AKModel/models.py:224 +#: AKModel/models.py:277 AKModel/models.py:342 AKModel/models.py:375 +#: AKModel/models.py:446 AKModel/models.py:487 AKModel/models.py:652 msgid "Associated event" msgstr "Zugehöriges Event" @@ -124,8 +124,8 @@ msgstr "Person" msgid "Person whose availability this is" msgstr "Person deren Verfügbarkeit hier abgebildet wird" -#: AKModel/availability/models.py:56 AKModel/models.py:342 -#: AKModel/models.py:361 AKModel/models.py:492 +#: AKModel/availability/models.py:56 AKModel/models.py:345 +#: AKModel/models.py:364 AKModel/models.py:495 msgid "Room" msgstr "Raum" @@ -133,8 +133,8 @@ msgstr "Raum" msgid "Room whose availability this is" msgstr "Raum dessen Verfügbarkeit hier abgebildet wird" -#: AKModel/availability/models.py:65 AKModel/models.py:282 -#: AKModel/models.py:360 AKModel/models.py:437 +#: AKModel/availability/models.py:65 AKModel/models.py:285 +#: AKModel/models.py:363 AKModel/models.py:440 msgid "AK" msgstr "AK" @@ -143,7 +143,7 @@ msgid "AK whose availability this is" msgstr "Verfügbarkeiten" #: AKModel/availability/models.py:74 AKModel/models.py:187 -#: AKModel/models.py:498 +#: AKModel/models.py:501 msgid "AK Category" msgstr "AK-Kategorie" @@ -155,56 +155,56 @@ msgstr "AK-Kategorie, deren Verfügbarkeit hier abgebildet wird" msgid "Availabilities" msgstr "Verfügbarkeiten" -#: AKModel/forms.py:42 +#: AKModel/forms.py:43 msgid "Copy ak requirements and ak categories of existing event" msgstr "AK-Anforderungen und AK-Kategorien eines existierenden Events kopieren" -#: AKModel/forms.py:43 +#: AKModel/forms.py:44 msgid "You can choose what to copy in the next step" msgstr "" "Im nächsten Schritt kann ausgewählt werden, was genau kopiert werden soll" -#: AKModel/forms.py:51 +#: AKModel/forms.py:52 msgid "Copy ak categories" msgstr "AK-Kategorien kopieren" -#: AKModel/forms.py:58 +#: AKModel/forms.py:59 msgid "Copy ak requirements" msgstr "AK-Anforderungen kopieren" -#: AKModel/forms.py:79 +#: AKModel/forms.py:80 msgid "Copy dashboard buttons" msgstr "Dashboard-Buttons kopieren" -#: AKModel/forms.py:103 +#: AKModel/forms.py:104 msgid "# next AKs" msgstr "# nächste AKs" -#: AKModel/forms.py:104 +#: AKModel/forms.py:105 msgid "How many next AKs should be shown on a slide?" msgstr "Wie viele nächste AKs sollen auf einer Folie angezeigt werden?" -#: AKModel/forms.py:107 +#: AKModel/forms.py:108 msgid "Presentation only?" msgstr "Nur Vorstellung?" -#: AKModel/forms.py:109 AKModel/forms.py:116 +#: AKModel/forms.py:110 AKModel/forms.py:117 msgid "Yes" msgstr "Ja" -#: AKModel/forms.py:109 AKModel/forms.py:116 +#: AKModel/forms.py:110 AKModel/forms.py:117 msgid "No" msgstr "Nein" -#: AKModel/forms.py:111 +#: AKModel/forms.py:112 msgid "Restrict AKs to those that asked for chance to be presented?" msgstr "AKs auf solche, die um eine Vorstellung gebeten haben, einschränken?" -#: AKModel/forms.py:114 +#: AKModel/forms.py:115 msgid "Space for notes in wishes?" msgstr "Platz für Notizen bei den Wünschen?" -#: AKModel/forms.py:118 +#: AKModel/forms.py:119 msgid "" "Create symbols indicating space to note down owners and timeslots for " "wishes, e.g., to be filled out on a touch screen while presenting?" @@ -213,11 +213,11 @@ msgstr "" "fürWünsche markieren, z.B. um während der Präsentation auf einem Touchscreen " "ausgefüllt zu werden?" -#: AKModel/forms.py:124 AKModel/models.py:642 +#: AKModel/forms.py:125 AKModel/models.py:645 msgid "Default Slots" msgstr "Standardslots" -#: AKModel/forms.py:126 +#: AKModel/forms.py:127 msgid "" "Click and drag to add default slots, double-click to delete. Or use the " "start and end inputs to add entries to the calendar view." @@ -226,11 +226,11 @@ msgstr "" "Einträge zu löschen. Oder Start- und End-Eingabe verwenden, um der " "Kalenderansicht neue Einträge hinzuzufügen." -#: AKModel/forms.py:136 +#: AKModel/forms.py:137 msgid "New rooms" msgstr "Neue Räume" -#: AKModel/forms.py:137 +#: AKModel/forms.py:138 msgid "" "Enter room details in CSV format. Required colum is \"name\", optional " "colums are \"location\", \"capacity\", and \"url\" for online/hybrid rooms. " @@ -240,12 +240,12 @@ msgstr "" "Spalten sind \"location\", \"capacity\", und \"url\" for Online-/" "HybridräumeTrennzeichen: Semikolon" -#: AKModel/forms.py:148 +#: AKModel/forms.py:149 msgid "CSV must contain a name column" msgstr "CSV muss eine name-Spalte enthalten" #: AKModel/models.py:18 AKModel/models.py:175 AKModel/models.py:199 -#: AKModel/models.py:218 AKModel/models.py:236 AKModel/models.py:330 +#: AKModel/models.py:221 AKModel/models.py:239 AKModel/models.py:333 msgid "Name" msgstr "Name" @@ -279,7 +279,7 @@ msgstr "Zeitzone" msgid "Time Zone where this event takes place in" msgstr "Zeitzone in der das Event stattfindet" -#: AKModel/models.py:27 AKModel/views.py:252 +#: AKModel/models.py:27 AKModel/views.py:253 msgid "Start" msgstr "Start" @@ -411,7 +411,7 @@ msgstr "Instutution" msgid "Uni etc." msgstr "Universität o.ä." -#: AKModel/models.py:126 AKModel/models.py:245 +#: AKModel/models.py:126 AKModel/models.py:248 msgid "Web Link" msgstr "Internet Link" @@ -419,7 +419,7 @@ msgstr "Internet Link" msgid "Link to Homepage" msgstr "Link zu Homepage oder Webseite" -#: AKModel/models.py:132 AKModel/models.py:491 +#: AKModel/models.py:132 AKModel/models.py:494 msgid "AK Owner" msgstr "AK-Leitung" @@ -439,7 +439,7 @@ msgstr "Farbe" msgid "Color for displaying" msgstr "Farbe für die Anzeige" -#: AKModel/models.py:177 AKModel/models.py:239 +#: AKModel/models.py:177 AKModel/models.py:242 msgid "Description" msgstr "Beschreibung" @@ -475,116 +475,116 @@ msgstr "AK-Track" msgid "AK Tracks" msgstr "AK-Tracks" -#: AKModel/models.py:218 +#: AKModel/models.py:221 msgid "Name of the Requirement" msgstr "Name der Anforderung" -#: AKModel/models.py:224 AKModel/models.py:495 +#: AKModel/models.py:227 AKModel/models.py:498 msgid "AK Requirement" msgstr "AK-Anforderung" -#: AKModel/models.py:225 +#: AKModel/models.py:228 msgid "AK Requirements" msgstr "AK-Anforderungen" -#: AKModel/models.py:236 +#: AKModel/models.py:239 msgid "Name of the AK" msgstr "Name des AKs" -#: AKModel/models.py:237 +#: AKModel/models.py:240 msgid "Short Name" msgstr "Kurzer Name" -#: AKModel/models.py:238 +#: AKModel/models.py:241 msgid "Name displayed in the schedule" msgstr "Name zur Anzeige im AK-Plan" -#: AKModel/models.py:239 +#: AKModel/models.py:242 msgid "Description of the AK" msgstr "Beschreibung des AKs" -#: AKModel/models.py:241 +#: AKModel/models.py:244 msgid "Owners" msgstr "Leitungen" -#: AKModel/models.py:242 +#: AKModel/models.py:245 msgid "Those organizing the AK" msgstr "Menschen, die den AK organisieren und halten" -#: AKModel/models.py:245 +#: AKModel/models.py:248 msgid "Link to wiki page" msgstr "Link zur Wiki Seite" -#: AKModel/models.py:246 +#: AKModel/models.py:249 msgid "Protocol Link" msgstr "Protokolllink" -#: AKModel/models.py:246 +#: AKModel/models.py:249 msgid "Link to protocol" msgstr "Link zum Protokoll" -#: AKModel/models.py:248 +#: AKModel/models.py:251 msgid "Category" msgstr "Kategorie" -#: AKModel/models.py:249 +#: AKModel/models.py:252 msgid "Category of the AK" msgstr "Kategorie des AKs" -#: AKModel/models.py:250 +#: AKModel/models.py:253 msgid "Track" msgstr "Track" -#: AKModel/models.py:251 +#: AKModel/models.py:254 msgid "Track the AK belongs to" msgstr "Track zu dem der AK gehört" -#: AKModel/models.py:253 +#: AKModel/models.py:256 msgid "Resolution Intention" msgstr "Resolutionsabsicht" -#: AKModel/models.py:254 +#: AKModel/models.py:257 msgid "Intends to submit a resolution" msgstr "Beabsichtigt eine Resolution einzureichen" -#: AKModel/models.py:255 +#: AKModel/models.py:258 msgid "Present this AK" msgstr "AK präsentieren" -#: AKModel/models.py:256 +#: AKModel/models.py:259 msgid "Present results of this AK" msgstr "Die Ergebnisse dieses AKs vorstellen" -#: AKModel/models.py:258 AKModel/templates/admin/AKModel/status.html:105 +#: AKModel/models.py:261 AKModel/templates/admin/AKModel/status.html:105 msgid "Requirements" msgstr "Anforderungen" -#: AKModel/models.py:259 +#: AKModel/models.py:262 msgid "AK's Requirements" msgstr "Anforderungen des AKs" -#: AKModel/models.py:261 +#: AKModel/models.py:264 msgid "Conflicting AKs" msgstr "AK-Konflikte" -#: AKModel/models.py:262 +#: AKModel/models.py:265 msgid "AKs that conflict and thus must not take place at the same time" msgstr "" "AKs, die Konflikte haben und deshalb nicht gleichzeitig stattfinden dürfen" -#: AKModel/models.py:263 +#: AKModel/models.py:266 msgid "Prerequisite AKs" msgstr "Vorausgesetzte AKs" -#: AKModel/models.py:264 +#: AKModel/models.py:267 msgid "AKs that should precede this AK in the schedule" msgstr "AKs die im AK-Plan vor diesem AK stattfinden müssen" -#: AKModel/models.py:266 +#: AKModel/models.py:269 msgid "Organizational Notes" msgstr "Notizen zur Organisation" -#: AKModel/models.py:267 +#: AKModel/models.py:270 msgid "" "Notes to organizers. These are public. For private notes, please use the " "button for private messages on the detail page of this AK (after creation/" @@ -594,287 +594,287 @@ msgstr "" "Anmerkungen bitte den Button für Direktnachrichten verwenden (nach dem " "Anlegen/Bearbeiten)." -#: AKModel/models.py:269 +#: AKModel/models.py:272 msgid "Interest" msgstr "Interesse" -#: AKModel/models.py:269 +#: AKModel/models.py:272 msgid "Expected number of people" msgstr "Erwartete Personenzahl" -#: AKModel/models.py:270 +#: AKModel/models.py:273 msgid "Interest Counter" msgstr "Interessenszähler" -#: AKModel/models.py:271 +#: AKModel/models.py:274 msgid "People who have indicated interest online" msgstr "Anzahl Personen, die online Interesse bekundet haben" -#: AKModel/models.py:276 +#: AKModel/models.py:279 msgid "Export?" msgstr "Export?" -#: AKModel/models.py:277 +#: AKModel/models.py:280 msgid "Include AK in wiki export?" msgstr "AK bei Wiki-Export berücksichtigen?" -#: AKModel/models.py:283 AKModel/models.py:486 +#: AKModel/models.py:286 AKModel/models.py:489 #: AKModel/templates/admin/AKModel/status.html:57 -#: AKModel/templates/admin/AKModel/status.html:64 AKModel/views.py:374 +#: AKModel/templates/admin/AKModel/status.html:64 AKModel/views.py:375 msgid "AKs" msgstr "AKs" -#: AKModel/models.py:330 +#: AKModel/models.py:333 msgid "Name or number of the room" msgstr "Name oder Nummer des Raums" -#: AKModel/models.py:331 +#: AKModel/models.py:334 msgid "Location" msgstr "Ort" -#: AKModel/models.py:332 +#: AKModel/models.py:335 msgid "Name or number of the location" msgstr "Name oder Nummer des Ortes" -#: AKModel/models.py:333 +#: AKModel/models.py:336 msgid "Capacity" msgstr "Kapazität" -#: AKModel/models.py:334 +#: AKModel/models.py:337 msgid "Maximum number of people (-1 for unlimited)." msgstr "Maximale Personenzahl (-1 wenn unbeschränkt)." -#: AKModel/models.py:335 +#: AKModel/models.py:338 msgid "Properties" msgstr "Eigenschaften" -#: AKModel/models.py:336 +#: AKModel/models.py:339 msgid "AK requirements fulfilled by the room" msgstr "AK-Anforderungen, die dieser Raum erfüllt" -#: AKModel/models.py:343 AKModel/templates/admin/AKModel/status.html:40 +#: AKModel/models.py:346 AKModel/templates/admin/AKModel/status.html:40 msgid "Rooms" msgstr "Räume" -#: AKModel/models.py:360 +#: AKModel/models.py:363 msgid "AK being mapped" msgstr "AK, der zugeordnet wird" -#: AKModel/models.py:362 +#: AKModel/models.py:365 msgid "Room the AK will take place in" msgstr "Raum in dem der AK stattfindet" -#: AKModel/models.py:363 AKModel/models.py:645 +#: AKModel/models.py:366 AKModel/models.py:648 msgid "Slot Begin" msgstr "Beginn des Slots" -#: AKModel/models.py:363 AKModel/models.py:645 +#: AKModel/models.py:366 AKModel/models.py:648 msgid "Time and date the slot begins" msgstr "Zeit und Datum zu der der AK beginnt" -#: AKModel/models.py:365 +#: AKModel/models.py:368 msgid "Duration" msgstr "Dauer" -#: AKModel/models.py:366 +#: AKModel/models.py:369 msgid "Length in hours" msgstr "Länge in Stunden" -#: AKModel/models.py:368 +#: AKModel/models.py:371 msgid "Scheduling fixed" msgstr "Planung fix" -#: AKModel/models.py:369 +#: AKModel/models.py:372 msgid "Length and time of this AK should not be changed" msgstr "Dauer und Zeit dieses AKs sollten nicht verändert werden" -#: AKModel/models.py:374 +#: AKModel/models.py:377 msgid "Last update" msgstr "Letzte Aktualisierung" -#: AKModel/models.py:377 +#: AKModel/models.py:380 msgid "AK Slot" msgstr "AK-Slot" -#: AKModel/models.py:378 AKModel/models.py:488 +#: AKModel/models.py:381 AKModel/models.py:491 msgid "AK Slots" msgstr "AK-Slot" -#: AKModel/models.py:400 AKModel/models.py:409 +#: AKModel/models.py:403 AKModel/models.py:412 msgid "Not scheduled yet" msgstr "Noch nicht geplant" -#: AKModel/models.py:438 +#: AKModel/models.py:441 msgid "AK this message belongs to" msgstr "AK zu dem die Nachricht gehört" -#: AKModel/models.py:439 +#: AKModel/models.py:442 msgid "Message text" msgstr "Nachrichtentext" -#: AKModel/models.py:440 +#: AKModel/models.py:443 msgid "Message to the organizers. This is not publicly visible." msgstr "" "Nachricht an die Organisator*innen. Diese ist nicht öffentlich sichtbar." -#: AKModel/models.py:446 +#: AKModel/models.py:449 msgid "AK Orga Message" msgstr "AK-Organachricht" -#: AKModel/models.py:447 +#: AKModel/models.py:450 msgid "AK Orga Messages" msgstr "AK-Organachrichten" -#: AKModel/models.py:456 +#: AKModel/models.py:459 msgid "Constraint Violation" msgstr "Constraintverletzung" -#: AKModel/models.py:457 AKModel/templates/admin/AKModel/status.html:87 +#: AKModel/models.py:460 AKModel/templates/admin/AKModel/status.html:87 msgid "Constraint Violations" msgstr "Constraintverletzungen" -#: AKModel/models.py:461 +#: AKModel/models.py:464 msgid "Owner has two parallel slots" msgstr "Leitung hat zwei Slots parallel" -#: AKModel/models.py:462 +#: AKModel/models.py:465 msgid "AK Slot was scheduled outside the AK's availabilities" msgstr "AK Slot wurde außerhalb der Verfügbarkeit des AKs platziert" -#: AKModel/models.py:463 +#: AKModel/models.py:466 msgid "Room has two AK slots scheduled at the same time" msgstr "Raum hat zwei AK Slots gleichzeitig" -#: AKModel/models.py:464 +#: AKModel/models.py:467 msgid "Room does not satisfy the requirement of the scheduled AK" msgstr "Room erfüllt die Anforderungen des platzierten AKs nicht" -#: AKModel/models.py:465 +#: AKModel/models.py:468 msgid "AK Slot is scheduled at the same time as an AK listed as a conflict" msgstr "" "AK Slot wurde wurde zur gleichen Zeit wie ein Konflikt des AKs platziert" -#: AKModel/models.py:466 +#: AKModel/models.py:469 msgid "AK Slot is scheduled before an AK listed as a prerequisite" msgstr "AK Slot wurde vor einem als Voraussetzung gelisteten AK platziert" -#: AKModel/models.py:468 +#: AKModel/models.py:471 msgid "" "AK Slot for AK with intention to submit a resolution is scheduled after " "resolution deadline" msgstr "" "AK Slot eines AKs mit Resoabsicht wurde nach der Resodeadline platziert" -#: AKModel/models.py:469 +#: AKModel/models.py:472 msgid "AK Slot in a category is outside that categories availabilities" msgstr "AK Slot wurde außerhalb der Verfügbarkeiten seiner Kategorie" -#: AKModel/models.py:470 +#: AKModel/models.py:473 msgid "Two AK Slots for the same AK scheduled at the same time" msgstr "Zwei AK Slots eines AKs wurden zur selben Zeit platziert" -#: AKModel/models.py:471 +#: AKModel/models.py:474 msgid "Room does not have enough space for interest in scheduled AK Slot" msgstr "Room hat nicht genug Platz für das Interesse am geplanten AK-Slot" -#: AKModel/models.py:472 +#: AKModel/models.py:475 msgid "AK Slot is scheduled outside the event's availabilities" msgstr "AK Slot wurde außerhalb der Verfügbarkeit des Events platziert" -#: AKModel/models.py:475 +#: AKModel/models.py:478 msgid "Warning" msgstr "Warnung" -#: AKModel/models.py:476 +#: AKModel/models.py:479 msgid "Violation" msgstr "Verletzung" -#: AKModel/models.py:478 +#: AKModel/models.py:481 msgid "Type" msgstr "Art" -#: AKModel/models.py:479 +#: AKModel/models.py:482 msgid "Type of violation, i.e. what kind of constraint was violated" msgstr "Art der Verletzung, gibt an welche Art Constraint verletzt wurde" -#: AKModel/models.py:480 +#: AKModel/models.py:483 msgid "Level" msgstr "Level" -#: AKModel/models.py:481 +#: AKModel/models.py:484 msgid "Severity level of the violation" msgstr "Schweregrad der Verletzung" -#: AKModel/models.py:487 +#: AKModel/models.py:490 msgid "AK(s) belonging to this constraint" msgstr "AK(s), die zu diesem Constraint gehören" -#: AKModel/models.py:489 +#: AKModel/models.py:492 msgid "AK Slot(s) belonging to this constraint" msgstr "AK Slot(s), die zu diesem Constraint gehören" -#: AKModel/models.py:491 +#: AKModel/models.py:494 msgid "AK Owner belonging to this constraint" msgstr "AK Leitung(en), die zu diesem Constraint gehören" -#: AKModel/models.py:493 +#: AKModel/models.py:496 msgid "Room belonging to this constraint" msgstr "Raum, der zu diesem Constraint gehört" -#: AKModel/models.py:496 +#: AKModel/models.py:499 msgid "AK Requirement belonging to this constraint" msgstr "AK Anforderung, die zu diesem Constraint gehört" -#: AKModel/models.py:498 +#: AKModel/models.py:501 msgid "AK Category belonging to this constraint" msgstr "AK Kategorie, di zu diesem Constraint gehört" -#: AKModel/models.py:500 +#: AKModel/models.py:503 msgid "Comment" msgstr "Kommentar" -#: AKModel/models.py:500 +#: AKModel/models.py:503 msgid "Comment or further details for this violation" msgstr "Kommentar oder weitere Details zu dieser Vereletzung" -#: AKModel/models.py:503 +#: AKModel/models.py:506 msgid "Timestamp" msgstr "Timestamp" -#: AKModel/models.py:503 +#: AKModel/models.py:506 msgid "Time of creation" msgstr "Zeitpunkt der ERstellung" -#: AKModel/models.py:504 +#: AKModel/models.py:507 msgid "Manually Resolved" msgstr "Manuell behoben" -#: AKModel/models.py:505 +#: AKModel/models.py:508 msgid "Mark this violation manually as resolved" msgstr "Markiere diese Verletzung manuell als behoben" -#: AKModel/models.py:532 +#: AKModel/models.py:535 #: AKModel/templates/admin/AKModel/requirements_overview.html:27 msgid "Details" msgstr "Details" -#: AKModel/models.py:641 +#: AKModel/models.py:644 msgid "Default Slot" msgstr "Standardslot" -#: AKModel/models.py:646 +#: AKModel/models.py:649 msgid "Slot End" msgstr "Ende des Slots" -#: AKModel/models.py:646 +#: AKModel/models.py:649 msgid "Time and date the slot ends" msgstr "Zeit und Datum zu der der Slot endet" -#: AKModel/models.py:651 +#: AKModel/models.py:654 msgid "Primary categories" msgstr "Primäre Kategorien" -#: AKModel/models.py:652 +#: AKModel/models.py:655 msgid "Categories that should be assigned to this slot primarily" msgstr "Kategorieren, die diesem Slot primär zugewiesen werden sollen" @@ -882,20 +882,20 @@ msgstr "Kategorieren, die diesem Slot primär zugewiesen werden sollen" msgid "Administration" msgstr "Verwaltung" -#: AKModel/templates/AKModel/user.html:31 +#: AKModel/templates/AKModel/user.html:23 msgid "Hello" msgstr "Hallo" -#: AKModel/templates/AKModel/user.html:34 +#: AKModel/templates/AKModel/user.html:26 msgid "Go to backend" msgstr "Zum Backend" -#: AKModel/templates/AKModel/user.html:37 +#: AKModel/templates/AKModel/user.html:29 msgid "Please wait for an administrator to confirm your account" msgstr "" "Bitte warte darauf, dass ein*e Administrator*in deinen Account bestätigt" -#: AKModel/templates/AKModel/user.html:40 +#: AKModel/templates/AKModel/user.html:32 msgid "Logout" msgstr "Ausloggen" @@ -907,6 +907,7 @@ msgstr "Bestätigen" #: AKModel/templates/admin/AKModel/event_wizard/import.html:24 #: AKModel/templates/admin/AKModel/event_wizard/settings.html:29 #: AKModel/templates/admin/AKModel/event_wizard/start.html:23 +#: AKModel/templates/admin/AKModel/room_create.html:30 msgid "Cancel" msgstr "Abbrechen" @@ -925,7 +926,7 @@ msgid "Successfully imported.<br><br>Do you want to activate your event now?" msgstr "Erfolgreich importiert.<br><br>Soll das Event jetzt aktiviert werden?" #: AKModel/templates/admin/AKModel/event_wizard/activate.html:27 -#: AKModel/views.py:257 +#: AKModel/views.py:258 msgid "Finish" msgstr "Abschluss" @@ -994,6 +995,23 @@ msgstr "Kein AK mit dieser Anforderung" msgid "Add Requirement" msgstr "Anforderung hinzufügen" +#: AKModel/templates/admin/AKModel/room_create.html:9 +#: AKModel/templates/admin/AKModel/room_create.html:12 +msgid "Create room" +msgstr "Raum anlegen" + +#: AKModel/templates/admin/AKModel/room_create.html:20 +msgid "Save and add another" +msgstr "Sichern und neu hinzufügen" + +#: AKModel/templates/admin/AKModel/room_create.html:23 +msgid "Save and continue editing" +msgstr "Sichern und weiter bearbeiten" + +#: AKModel/templates/admin/AKModel/room_create.html:26 +msgid "Save" +msgstr "Sichern" + #: AKModel/templates/admin/AKModel/status.html:18 msgid "Plan published?" msgstr "Plan veröffentlicht?" @@ -1018,7 +1036,7 @@ msgstr "Bisher keine Räume" msgid "Add Room" msgstr "Raum hinzufügen" -#: AKModel/templates/admin/AKModel/status.html:55 AKModel/views.py:593 +#: AKModel/templates/admin/AKModel/status.html:55 AKModel/views.py:613 msgid "Import Rooms from CSV" msgstr "Räume aus CSV importieren" @@ -1047,7 +1065,7 @@ msgstr "AKs, die besondere Aufmerksamkeit benötigen" msgid "Enter Interest" msgstr "Interesse erfassen" -#: AKModel/templates/admin/AKModel/status.html:94 AKModel/views.py:518 +#: AKModel/templates/admin/AKModel/status.html:94 AKModel/views.py:519 msgid "Edit Default Slots" msgstr "Standardslots bearbeiten" @@ -1063,7 +1081,7 @@ msgstr "AKs als CSV exportieren" msgid "Export AKs for Wiki" msgstr "AKs im Wiki-Format exportieren" -#: AKModel/templates/admin/AKModel/status.html:102 AKModel/views.py:344 +#: AKModel/templates/admin/AKModel/status.html:102 AKModel/views.py:345 msgid "Export AK Slides" msgstr "AK-Folien exportieren" @@ -1116,162 +1134,167 @@ msgstr "Login" msgid "Register" msgstr "Registrieren" -#: AKModel/views.py:155 +#: AKModel/views.py:156 msgid "Event Status" msgstr "Eventstatus" -#: AKModel/views.py:168 +#: AKModel/views.py:169 msgid "Requirements for Event" msgstr "Anforderungen für das Event" -#: AKModel/views.py:182 +#: AKModel/views.py:183 msgid "AK CSV Export" msgstr "AK-CSV-Export" -#: AKModel/views.py:196 +#: AKModel/views.py:197 msgid "AK Wiki Export" msgstr "AK-Wiki-Export" -#: AKModel/views.py:207 AKModel/views.py:360 +#: AKModel/views.py:208 AKModel/views.py:361 msgid "Wishes" msgstr "Wünsche" -#: AKModel/views.py:228 +#: AKModel/views.py:229 msgid "Delete AK Orga Messages" msgstr "AK-Organachrichten löschen" -#: AKModel/views.py:243 +#: AKModel/views.py:244 msgid "AK Orga Messages successfully deleted" msgstr "AK-Organachrichten erfolgreich gelöscht" -#: AKModel/views.py:253 +#: AKModel/views.py:254 msgid "Settings" msgstr "Einstellungen" -#: AKModel/views.py:254 +#: AKModel/views.py:255 msgid "Event created, Prepare Import" msgstr "Event angelegt, Import vorbereiten" -#: AKModel/views.py:255 +#: AKModel/views.py:256 msgid "Import categories & requirements" msgstr "Kategorien & Anforderungen kopieren" -#: AKModel/views.py:256 +#: AKModel/views.py:257 msgid "Activate?" msgstr "Aktivieren?" -#: AKModel/views.py:319 +#: AKModel/views.py:320 #, python-format msgid "Copied '%(obj)s'" msgstr "'%(obj)s' kopiert" -#: AKModel/views.py:322 +#: AKModel/views.py:323 #, python-format msgid "Could not copy '%(obj)s' (%(error)s)" msgstr "'%(obj)s' konnte nicht kopiert werden (%(error)s)" -#: AKModel/views.py:355 +#: AKModel/views.py:356 msgid "Symbols" msgstr "Symbole" -#: AKModel/views.py:356 +#: AKModel/views.py:357 msgid "Who?" msgstr "Wer?" -#: AKModel/views.py:357 +#: AKModel/views.py:358 msgid "Duration(s)" msgstr "Dauer(n)" -#: AKModel/views.py:358 +#: AKModel/views.py:359 msgid "Reso intention?" msgstr "Resolutionsabsicht?" -#: AKModel/views.py:359 +#: AKModel/views.py:360 msgid "Category (for Wishes)" msgstr "Kategorie (für Wünsche)" -#: AKModel/views.py:448 +#: AKModel/views.py:449 msgid "The following Constraint Violations will be marked as manually resolved" msgstr "" "Die folgenden Constraintverletzungen werden als manuell behoben markiert." -#: AKModel/views.py:449 +#: AKModel/views.py:450 msgid "Constraint Violations marked as resolved" msgstr "Constraintverletzungen als manuell behoben markiert" -#: AKModel/views.py:458 +#: AKModel/views.py:459 msgid "The following Constraint Violations will be set to level 'violation'" msgstr "" "Die folgenden Constraintverletzungen werden auf das Level \"Violation\" " "gesetzt." -#: AKModel/views.py:459 +#: AKModel/views.py:460 msgid "Constraint Violations set to level 'violation'" msgstr "Constraintverletzungen auf Level \"Violation\" gesetzt" -#: AKModel/views.py:468 +#: AKModel/views.py:469 msgid "The following Constraint Violations will be set to level 'warning'" msgstr "" "Die folgenden Constraintverletzungen werden auf das Level 'warning' gesetzt." -#: AKModel/views.py:469 +#: AKModel/views.py:470 msgid "Constraint Violations set to level 'warning'" msgstr "Constraintverletzungen auf Level \"Warning\" gesetzt" -#: AKModel/views.py:478 +#: AKModel/views.py:479 msgid "Interest of the following AKs will be set to not filled (-1):" msgstr "Interesse an den folgenden AKs wird auf nicht ausgefüllt (-1) gesetzt:" -#: AKModel/views.py:479 +#: AKModel/views.py:480 msgid "Reset of interest in AKs successful." msgstr "Interesse an AKs erfolgreich zurückgesetzt." -#: AKModel/views.py:488 +#: AKModel/views.py:489 msgid "Interest counter of the following AKs will be set to 0:" msgstr "Interessensbekundungszähler der folgenden AKs wird auf 0 gesetzt:" -#: AKModel/views.py:489 +#: AKModel/views.py:490 msgid "AKs' interest counters set back to 0." msgstr "Interessenszähler der AKs zurückgesetzt" -#: AKModel/views.py:498 +#: AKModel/views.py:499 msgid "Publish the plan(s) of:" msgstr "Den Plan/die Pläne veröffentlichen von:" -#: AKModel/views.py:499 +#: AKModel/views.py:500 msgid "Plan published" msgstr "Plan veröffentlicht" -#: AKModel/views.py:508 +#: AKModel/views.py:509 msgid "Unpublish the plan(s) of:" msgstr "Den Plan/die Pläne verbergen von:" -#: AKModel/views.py:509 +#: AKModel/views.py:510 msgid "Plan unpublished" msgstr "Plan verborgen" -#: AKModel/views.py:555 +#: AKModel/views.py:556 #, python-brace-format msgid "Could not update slot {id} since it does not belong to {event}" msgstr "" "Konnte Slot {id} nicht bearbeiten, da er nicht zum Event {event} gehört" -#: AKModel/views.py:585 +#: AKModel/views.py:586 #, python-brace-format msgid "Updated {u} slot(s). created {c} new slot(s) and deleted {d} slot(s)" msgstr "" "{u} Slot(s) aktualisiert, {c} Slot(s) hinzugefügt und {d} Slot(s) gelöscht" -#: AKModel/views.py:628 +#: AKModel/views.py:607 +#, python-format +msgid "Created Room '%(room)s'" +msgstr "Raum '%(room)s angelegt" + +#: AKModel/views.py:644 #, python-brace-format msgid "Could not import room {name}: {e}" msgstr "Konnte Raum {name} nicht importieren: {e}" -#: AKModel/views.py:632 +#: AKModel/views.py:648 #, python-brace-format msgid "Imported {count} room(s)" msgstr "{count} Raum/Räume importiert" -#: AKModel/views.py:634 +#: AKModel/views.py:650 msgid "No rooms imported" msgstr "Keine Räume importiert" diff --git a/AKModel/templates/admin/AKModel/room_create.html b/AKModel/templates/admin/AKModel/room_create.html new file mode 100644 index 0000000000000000000000000000000000000000..f933b5303c54616aa4695c708de2e1b620d3d57e --- /dev/null +++ b/AKModel/templates/admin/AKModel/room_create.html @@ -0,0 +1,33 @@ +{% extends "admin/base_site.html" %} +{% load tags_AKModel %} + +{% load i18n %} +{% load django_bootstrap5 %} +{% load fontawesome_6 %} + + +{% block title %}{% trans "Create room" %}{% endblock %} + +{% block content %} + <h2>{% trans "Create room" %}</h2> + <form method="post">{% csrf_token %} + {% block form_details %} + {% bootstrap_form form %} + {% endblock %} + + <div class="float-end"> + <button type="submit" name="save_action" class="save btn btn-secondary" value="save_add_another"> + {% fa6_icon "plus" 'fas' %} {% trans "Save and add another" %} + </button> + <button type="submit" name="save_action" class="save btn btn-secondary" value="save_continue"> + {% fa6_icon "pen" 'fas' %} {% trans "Save and continue editing" %} + </button> + <button type="submit" name="save_action" class="save btn btn-primary" value="save"> + {% fa6_icon "check" 'fas' %} {% trans "Save" %} + </button> + </div> + <a href="javascript:history.back()" class="btn btn-info"> + {% fa6_icon "times" 'fas' %} {% trans "Cancel" %} + </a> + </form> +{% endblock %} diff --git a/AKModel/views.py b/AKModel/views.py index 68da9f431e43e61fdd48df32f311e7420ea669c4..3d4e56320752caf9be34fb8874326a587ea48a74 100644 --- a/AKModel/views.py +++ b/AKModel/views.py @@ -10,6 +10,7 @@ import django.db from django.apps import apps from django.contrib import admin, messages from django.db.models.functions import Now +from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect from django.urls import reverse_lazy, reverse from django.utils.dateparse import parse_datetime @@ -21,7 +22,7 @@ from rest_framework import viewsets, permissions, mixins from AKModel.forms import NewEventWizardStartForm, NewEventWizardSettingsForm, NewEventWizardPrepareImportForm, \ NewEventWizardImportForm, NewEventWizardActivateForm, AdminIntermediateForm, SlideExportForm, \ - AdminIntermediateActionForm, DefaultSlotEditorForm, RoomBatchCreationForm + AdminIntermediateActionForm, DefaultSlotEditorForm, RoomBatchCreationForm, RoomForm from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner, AKOrgaMessage, AKRequirement, \ ConstraintViolation, DefaultSlot from AKModel.serializers import AKSerializer, AKSlotSerializer, RoomSerializer, AKTrackSerializer, AKCategorySerializer, \ @@ -588,6 +589,25 @@ class DefaultSlotEditorView(EventSlugMixin, IntermediateAdminView): return super().form_valid(form) +class RoomCreationView(AdminViewMixin, CreateView): + form_class = RoomForm + template_name = 'admin/AKModel/room_create.html' + + def get_success_url(self): + print(self.request.POST['save_action']) + if self.request.POST['save_action'] == 'save_add_another': + return reverse_lazy('admin:room-new') + elif self.request.POST['save_action'] == 'save_continue': + return reverse_lazy('admin:AKModel_room_change', kwargs={'object_id': self.room.pk}) + else: + return reverse_lazy('admin:AKModel_room_changelist') + + def form_valid(self, form): + self.room = form.save() + messages.success(self.request, _("Created Room '%(room)s'" % {'room': self.room})) + return HttpResponseRedirect(self.get_success_url()) + + class RoomBatchCreationView(EventSlugMixin, IntermediateAdminView): form_class = RoomBatchCreationForm title = _("Import Rooms from CSV") @@ -611,17 +631,13 @@ class RoomBatchCreationView(EventSlugMixin, IntermediateAdminView): capacity = raw_room["capacity"] if "capacity" in rooms_raw_dict.fieldnames else -1 try: + r = Room.objects.create(name=name, + location=location, + capacity=capacity, + event=self.event) if virtual_rooms_support and raw_room["url"] != "": - VirtualRoom.objects.create(name=name, - location=location, - capacity=capacity, - url=raw_room["url"], - event=self.event) - else: - Room.objects.create(name=name, - location=location, - capacity=capacity, - event=self.event) + VirtualRoom.objects.create(room=r, + url=raw_room["url"]) created_count += 1 except django.db.Error as e: messages.add_message(self.request, messages.WARNING, diff --git a/AKOnline/admin.py b/AKOnline/admin.py index a6d94333a73726516c705d3c00e90c6e220b0b9f..69f4bed71466a3d8fa84341a3c6fedf05ccb8428 100644 --- a/AKOnline/admin.py +++ b/AKOnline/admin.py @@ -1,26 +1,17 @@ from django.contrib import admin -from AKModel.admin import RoomAdmin, RoomForm from AKOnline.models import VirtualRoom -class VirtualRoomForm(RoomForm): - class Meta(RoomForm.Meta): - model = VirtualRoom - fields = ['name', - 'location', - 'url', - 'capacity', - 'properties', - 'event', - ] - - @admin.register(VirtualRoom) -class VirtualRoomAdmin(RoomAdmin): +class VirtualRoomAdmin(admin.ModelAdmin): model = VirtualRoom + list_display = ['room', 'event', 'url'] + list_filter = ['room__event'] - def get_form(self, request, obj=None, change=False, **kwargs): - if obj is not None: - return VirtualRoomForm - return super().get_form(request, obj, change, **kwargs) + def get_readonly_fields(self, request, obj=None): + # Don't allow changing the room on existing virtual rooms + # Instead, a link to the room editing form will be displayed automatically + if obj: + return self.readonly_fields + ('room', ) + return self.readonly_fields diff --git a/AKOnline/forms.py b/AKOnline/forms.py new file mode 100644 index 0000000000000000000000000000000000000000..bf33b9c4eb3366fb9ea61fe0f2d1867bfa96277f --- /dev/null +++ b/AKOnline/forms.py @@ -0,0 +1,38 @@ +from betterforms.multiform import MultiModelForm +from django.forms import ModelForm + +from AKModel.forms import RoomForm +from AKOnline.models import VirtualRoom + + +class VirtualRoomForm(ModelForm): + class Meta: + model = VirtualRoom + exclude = ['room'] + + def __init__(self, *args, **kwargs): + super(VirtualRoomForm, self).__init__(*args, **kwargs) + self.fields['url'].required = False + + +class RoomWithVirtualForm(MultiModelForm): + form_classes = { + 'room': RoomForm, + 'virtual': VirtualRoomForm + } + + def save(self, commit=True): + objects = super(RoomWithVirtualForm, self).save(commit=False) + + if commit: + room = objects['room'] + room.save() + + virtual = objects['virtual'] + if virtual.url != "": + virtual.room = room + virtual.save() + else: + objects['virtual'] = None + + return objects diff --git a/AKOnline/locale/de_DE/LC_MESSAGES/django.po b/AKOnline/locale/de_DE/LC_MESSAGES/django.po new file mode 100644 index 0000000000000000000000000000000000000000..94047231f59ee7d730d6385199930514f73e2239 --- /dev/null +++ b/AKOnline/locale/de_DE/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-24 18:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: AKOnline/models.py:11 +msgid "URL" +msgstr "URL" + +#: AKOnline/models.py:11 +msgid "URL to the room or server" +msgstr "URL zum Raum oder Server" + +#: AKOnline/models.py:12 +msgid "Room" +msgstr "Raum" + +#: AKOnline/models.py:16 +#: AKOnline/templates/admin/AKOnline/room_create_with_virtual.html:10 +msgid "Virtual Room" +msgstr "Virtueller Raum" + +#: AKOnline/models.py:17 +msgid "Virtual Rooms" +msgstr "Virtuelle Räume" + +#: AKOnline/templates/admin/AKOnline/room_create_with_virtual.html:11 +msgid "Leave empty if that room is not virtual/hybrid." +msgstr "Leer lassen wenn der Raum nicht virtuell/hybrid ist" + +#: AKOnline/views.py:16 +#, python-format +msgid "Created Room '%(room)s'" +msgstr "Raum '%(room)s' angelegt" + +#: AKOnline/views.py:18 +#, python-format +msgid "Created related Virtual Room '%(vroom)s'" +msgstr "Verbundenen virtuellen Raum '%(vroom)s' angelegt" diff --git a/AKOnline/migrations/0001_virtualroom_new.py b/AKOnline/migrations/0001_virtualroom_new.py new file mode 100644 index 0000000000000000000000000000000000000000..941441d43d1d4aa6f8e257da9711bcd042753fd8 --- /dev/null +++ b/AKOnline/migrations/0001_virtualroom_new.py @@ -0,0 +1,30 @@ +# Generated by Django 4.1.5 on 2023-03-22 12:22 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + replaces = [('AKOnline', '0001_AKOnline'), ('AKOnline', '0002_rework_virtual'), ('AKOnline', '0003_rework_virtual_2'), ('AKOnline', '0004_rework_virtual_3'), ('AKOnline', '0005_rework_virtual_4')] + + initial = True + + dependencies = [ + ('AKModel', '0033_AKOnline'), + ('AKModel', '0057_upgrades'), + ] + + operations = [ + migrations.CreateModel( + name='VirtualRoom', + fields=[ + ('room', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='virtual', serialize=False, to='AKModel.room', verbose_name='Room')), + ('url', models.URLField(blank=True, help_text='URL to the room or server', verbose_name='URL')), + ], + options={ + 'verbose_name': 'Virtual Room', + 'verbose_name_plural': 'Virtual Rooms', + }, + ), + ] diff --git a/AKOnline/migrations/0002_rework_virtual.py b/AKOnline/migrations/0002_rework_virtual.py new file mode 100644 index 0000000000000000000000000000000000000000..0b4d69be7ea26d89723c869a8838486cb62ead2d --- /dev/null +++ b/AKOnline/migrations/0002_rework_virtual.py @@ -0,0 +1,19 @@ +# Generated by Django 4.1.5 on 2023-03-21 23:14 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('AKModel', '0057_upgrades'), + ('AKOnline', '0001_AKOnline'), + ] + + operations = [ + migrations.RenameModel( + 'VirtualRoom', + 'VirtualRoomOld' + ), + + ] diff --git a/AKOnline/migrations/0003_rework_virtual_2.py b/AKOnline/migrations/0003_rework_virtual_2.py new file mode 100644 index 0000000000000000000000000000000000000000..5a996bdff873aa76bde244e39391cde198058501 --- /dev/null +++ b/AKOnline/migrations/0003_rework_virtual_2.py @@ -0,0 +1,27 @@ +# Generated by Django 4.1.5 on 2023-03-21 23:16 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('AKOnline', '0002_rework_virtual'), + ] + + operations = [ + migrations.CreateModel( + name='VirtualRoom', + fields=[ + ('room', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, + related_name='virtual', serialize=False, to='AKModel.room', + verbose_name='Room')), + ('url', models.URLField(blank=True, help_text='URL to the room or server', verbose_name='URL')), + ], + options={ + 'verbose_name': 'Virtual Room', + 'verbose_name_plural': 'Virtual Rooms', + }, + ), + ] diff --git a/AKOnline/migrations/0004_rework_virtual_3.py b/AKOnline/migrations/0004_rework_virtual_3.py new file mode 100644 index 0000000000000000000000000000000000000000..b92d61a4ea8a4c07991e3d96e08fd189690efee8 --- /dev/null +++ b/AKOnline/migrations/0004_rework_virtual_3.py @@ -0,0 +1,28 @@ +# Generated by Django 4.1.5 on 2023-03-21 23:21 + +from django.db import migrations + + + +class Migration(migrations.Migration): + + atomic = False + + dependencies = [ + ('AKOnline', '0003_rework_virtual_2'), + ] + + def copy_rooms(apps, schema_editor): + VirtualRoomOld = apps.get_model('AKOnline', 'VirtualRoomOld') + VirtualRoom = apps.get_model('AKOnline', 'VirtualRoom') + for row in VirtualRoomOld.objects.all(): + v = VirtualRoom(room_id=row.pk, url=row.url) + v.save() + + operations = [ + migrations.RunPython( + copy_rooms, + reverse_code=migrations.RunPython.noop, + elidable=True, + ) + ] diff --git a/AKOnline/migrations/0005_rework_virtual_4.py b/AKOnline/migrations/0005_rework_virtual_4.py new file mode 100644 index 0000000000000000000000000000000000000000..1c5d2eae3ff5407d82f9f6509aada34c8aa1f78f --- /dev/null +++ b/AKOnline/migrations/0005_rework_virtual_4.py @@ -0,0 +1,16 @@ +# Generated by Django 4.1.5 on 2023-03-21 23:41 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('AKOnline', '0004_rework_virtual_3'), + ] + + operations = [ + migrations.DeleteModel( + name='VirtualRoomOld', + ), + ] diff --git a/AKOnline/models.py b/AKOnline/models.py index c3496b01a719293920496c7b6432144114c71bf3..dad360cb42df6b602a99d9366b514a0d5ee5d912 100644 --- a/AKOnline/models.py +++ b/AKOnline/models.py @@ -4,11 +4,21 @@ from django.utils.translation import gettext_lazy as _ from AKModel.models import Event, Room -class VirtualRoom(Room): - """ A virtual room where an AK can be held. +class VirtualRoom(models.Model): + """ + Add details about a virtual or hybrid version of a room to it """ url = models.URLField(verbose_name=_("URL"), help_text=_("URL to the room or server"), blank=True) + room = models.OneToOneField(Room, verbose_name=_("Room"), on_delete=models.CASCADE, + related_name='virtual', primary_key=True) class Meta: verbose_name = _('Virtual Room') verbose_name_plural = _('Virtual Rooms') + + @property + def event(self): + return self.room.event + + def __str__(self): + return f"{self.room.title}: {self.url}" diff --git a/AKOnline/templates/admin/AKOnline/room_create_with_virtual.html b/AKOnline/templates/admin/AKOnline/room_create_with_virtual.html new file mode 100644 index 0000000000000000000000000000000000000000..d7e8d73b8de95bd85cdf4c2affe1ad8b2e9427e4 --- /dev/null +++ b/AKOnline/templates/admin/AKOnline/room_create_with_virtual.html @@ -0,0 +1,13 @@ +{% extends "admin/AKModel/room_create.html" %} +{% load tags_AKModel %} + +{% load i18n %} +{% load django_bootstrap5 %} + +{% block form_details %} + {% bootstrap_form form.room %} + + <h3>{% trans "Virtual Room" %}</h3> + <p>{% trans "Leave empty if that room is not virtual/hybrid." %}</p> + {% bootstrap_form form.virtual %} +{% endblock %} diff --git a/AKOnline/views.py b/AKOnline/views.py index 60f00ef0ef347811e7b0c0921b7fda097acd9fcc..44855eb41fa6f8562f6f65addcd7008e8fdfd0bd 100644 --- a/AKOnline/views.py +++ b/AKOnline/views.py @@ -1 +1,19 @@ -# Create your views here. +from django.contrib import messages +from django.http import HttpResponseRedirect +from django.utils.translation import gettext_lazy as _ + +from AKModel.views import AdminViewMixin, RoomCreationView +from AKOnline.forms import RoomWithVirtualForm + + +class RoomCreationWithVirtualView(RoomCreationView): + form_class = RoomWithVirtualForm + template_name = 'admin/AKOnline/room_create_with_virtual.html' + + def form_valid(self, form): + objects = form.save() + self.room = objects['room'] + messages.success(self.request, _("Created Room '%(room)s'" % {'room': objects['room']})) + if objects['virtual'] is not None: + messages.success(self.request, _("Created related Virtual Room '%(vroom)s'" % {'vroom': objects['virtual']})) + return HttpResponseRedirect(self.get_success_url()) diff --git a/AKPlan/templates/AKPlan/plan_room.html b/AKPlan/templates/AKPlan/plan_room.html index 6620a5d7a26e946ac1b5d45ac473015baffdfcfa..430fd9b04246b984a4d9a8d42c6c2876cd16d1d5 100644 --- a/AKPlan/templates/AKPlan/plan_room.html +++ b/AKPlan/templates/AKPlan/plan_room.html @@ -58,8 +58,8 @@ <h1>{% trans "Room" %}: {{ room.name }} {% if room.location != '' %}({{ room.location }}){% endif %}</h1> - {% if "AKOnline"|check_app_installed and room.virtualroom and room.virtualroom.url != '' %} - <a class="btn btn-success" target="_parent" href="{{ room.virtualroom.url }}"> + {% if "AKOnline"|check_app_installed and room.virtual and room.virtual.url != '' %} + <a class="btn btn-success" target="_parent" href="{{ room.virtual.url }}"> {% fa6_icon 'external-link-alt' 'fas' %} {% trans "Go to virtual room" %} </a> {% endif %} diff --git a/AKSubmission/templates/AKSubmission/ak_detail.html b/AKSubmission/templates/AKSubmission/ak_detail.html index 4cb54ebe422248ac89f0cca195f5549f6c87db66..eba22297893250349fdeed865637925fe9145400 100644 --- a/AKSubmission/templates/AKSubmission/ak_detail.html +++ b/AKSubmission/templates/AKSubmission/ak_detail.html @@ -144,8 +144,8 @@ {% endblocktrans %} {% endif %} - {% if "AKOnline"|check_app_installed and featured_slot.room.virtualroom and featured_slot.room.virtualroom.url != '' %} - <a class="btn btn-success" target="_parent" href="{{ featured_slot.room.virtualroom.url }}"> + {% if "AKOnline"|check_app_installed and featured_slot.room.virtual and featured_slot.room.virtual.url != '' %} + <a class="btn btn-success" target="_parent" href="{{ featured_slot.room.virtual.url }}"> {% fa6_icon 'external-link-alt' 'fas' %} {% trans "Go to virtual room" %} </a> {% endif %} @@ -272,8 +272,8 @@ data-bs-toggle="tooltip" title="{% trans 'Delete' %}" class="btn btn-danger">{% fa6_icon 'times' 'fas' %}</a> {% else %} - {% if "AKOnline"|check_app_installed and slot.room and slot.room.virtualroom and slot.room.virtualroom.url != '' %} - <a class="btn btn-success" target="_parent" href="{{ slot.room.virtualroom.url }}"> + {% if "AKOnline"|check_app_installed and slot.room and slot.room.virtual and slot.room.virtual.url != '' %} + <a class="btn btn-success" target="_parent" href="{{ slot.room.virtual.url }}"> {% fa6_icon 'external-link-alt' 'fas' %} {% trans "Go to virtual room" %} </a> {% endif %} diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 81ce51b66a37793d98e2e8091de4b90ad7d487e5..c23cd0ff9d9bc192a7d7685f644495a66180344b 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-08-15 18:26+0000\n" +"POT-Creation-Date: 2023-03-24 18:01+0100\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" @@ -18,38 +18,1262 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: AKOnline/models.py:10 +#: templates/base.html:43 +msgid "" +"Are you sure you want to change the language now? This will clear the form!" +msgstr "Wirklich jetzt die Sprache ändern? Das wird das Formular zurücksetzen!" + +#: templates/base.html:108 +msgid "Go to backend" +msgstr "Zum Backend" + +#: templates/base.html:114 +msgid "Impress" +msgstr "Impressum" + +#: templates/base.html:117 +msgid "This software is open source" +msgstr "Diese Software ist Open Source" + +#: venv-windows/Lib/site-packages/_pytest/config/argparsing.py:474 +#, python-format +msgid "ambiguous option: %(option)s could match %(matches)s" +msgstr "" + +#: venv-windows/Lib/site-packages/bootstrap4/components.py:17 +#: venv-windows/Lib/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3 +#: venv-windows/Lib/site-packages/bootstrap4/templates/bootstrap4/messages.html:4 +#: venv-windows/Lib/site-packages/django_bootstrap5/components.py:26 +msgid "close" +msgstr "" + +#: venv-windows/Lib/site-packages/django/contrib/messages/apps.py:15 +msgid "Messages" +msgstr "" + +#: venv-windows/Lib/site-packages/django/contrib/sitemaps/apps.py:8 +msgid "Site Maps" +msgstr "" + +#: venv-windows/Lib/site-packages/django/contrib/staticfiles/apps.py:9 +msgid "Static Files" +msgstr "" + +#: venv-windows/Lib/site-packages/django/contrib/syndication/apps.py:7 +msgid "Syndication" +msgstr "" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +#: venv-windows/Lib/site-packages/django/core/paginator.py:30 +msgid "…" +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/paginator.py:50 +msgid "That page number is not an integer" +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/paginator.py:52 +msgid "That page number is less than 1" +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/paginator.py:57 +msgid "That page contains no results" +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:22 +msgid "Enter a valid value." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:104 +#: venv-windows/Lib/site-packages/django/forms/fields.py:751 +msgid "Enter a valid URL." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:164 +msgid "Enter a valid integer." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:175 +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +#: venv-windows/Lib/site-packages/django/core/validators.py:256 +msgid "" +"Enter a valid “slug†consisting of letters, numbers, underscores or hyphens." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:264 +msgid "" +"Enter a valid “slug†consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:276 +#: venv-windows/Lib/site-packages/django/core/validators.py:284 +#: venv-windows/Lib/site-packages/django/core/validators.py:313 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:293 +#: venv-windows/Lib/site-packages/django/core/validators.py:314 +msgid "Enter a valid IPv6 address." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:305 +#: venv-windows/Lib/site-packages/django/core/validators.py:312 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:348 +msgid "Enter only digits separated by commas." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:354 +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:389 +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:398 +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:407 +#, python-format +msgid "Ensure this value is a multiple of step size %(limit_value)s." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:417 +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:435 +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:458 +#: venv-windows/Lib/site-packages/django/forms/fields.py:347 +#: venv-windows/Lib/site-packages/django/forms/fields.py:386 +msgid "Enter a number." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:460 +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:465 +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:470 +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:539 +#, python-format +msgid "" +"File extension “%(extension)s†is not allowed. Allowed extensions are: " +"%(allowed_extensions)s." +msgstr "" + +#: venv-windows/Lib/site-packages/django/core/validators.py:600 +msgid "Null characters are not allowed." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/base.py:1401 +#: venv-windows/Lib/site-packages/django/forms/models.py:899 +msgid "and" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/base.py:1403 +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/constraints.py:17 +#, python-format +msgid "Constraint “%(name)s†is violated." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:129 +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:130 +msgid "This field cannot be null." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:131 +msgid "This field cannot be blank." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:132 +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or +#. 'month'. Eg: "Title must be unique for pub_date year" +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:136 +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:174 +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1065 +#, python-format +msgid "“%(value)s†value must be either True or False." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1066 +#, python-format +msgid "“%(value)s†value must be either True, False, or None." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1068 +msgid "Boolean (Either True or False)" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1118 +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1222 +msgid "Comma-separated integers" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1323 +#, python-format +msgid "" +"“%(value)s†value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1327 +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1462 +#, python-format +msgid "" +"“%(value)s†value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1331 +msgid "Date (without time)" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1458 +#, python-format +msgid "" +"“%(value)s†value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1466 +#, python-format +msgid "" +"“%(value)s†value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1471 +msgid "Date (with time)" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1595 +#, python-format +msgid "“%(value)s†value must be a decimal number." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1597 +msgid "Decimal number" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1754 +#, python-format +msgid "" +"“%(value)s†value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." +"uuuuuu] format." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1758 +msgid "Duration" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1810 +msgid "Email address" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1835 +msgid "File path" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1913 +#, python-format +msgid "“%(value)s†value must be a float." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1915 +msgid "Floating point number" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1955 +#, python-format +msgid "“%(value)s†value must be an integer." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:1957 +msgid "Integer" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2049 +msgid "Big (8 byte) integer" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2066 +msgid "Small integer" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2074 +msgid "IPv4 address" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2105 +msgid "IP address" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2198 +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2199 +#, python-format +msgid "“%(value)s†value must be either None, True or False." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2201 +msgid "Boolean (Either True, False or None)" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2252 +msgid "Positive big integer" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2267 +msgid "Positive integer" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2282 +msgid "Positive small integer" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2298 +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2334 +msgid "Text" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2409 +#, python-format +msgid "" +"“%(value)s†value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2413 +#, python-format +msgid "" +"“%(value)s†value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2417 +msgid "Time" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2525 msgid "URL" msgstr "URL" -#: AKOnline/models.py:10 -msgid "URL to the room or server" -msgstr "URL zum Raum/Server" +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2549 +msgid "Raw binary data" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2614 +#, python-format +msgid "“%(value)s†is not a valid UUID." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/__init__.py:2616 +msgid "Universally unique identifier" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/files.py:232 +msgid "File" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/files.py:392 +msgid "Image" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/json.py:18 +msgid "A JSON object" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/json.py:20 +msgid "Value must be valid JSON." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/related.py:920 +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/related.py:922 +msgid "Foreign Key (type determined by related field)" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/related.py:1229 +msgid "One-to-one relationship" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/related.py:1286 +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/related.py:1288 +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +#: venv-windows/Lib/site-packages/django/db/models/fields/related.py:1336 +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the label +#: venv-windows/Lib/site-packages/django/forms/boundfield.py:176 +msgid ":?.!" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:91 +msgid "This field is required." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:298 +msgid "Enter a whole number." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:467 +#: venv-windows/Lib/site-packages/django/forms/fields.py:1240 +msgid "Enter a valid date." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:490 +#: venv-windows/Lib/site-packages/django/forms/fields.py:1241 +msgid "Enter a valid time." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:517 +msgid "Enter a valid date/time." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:551 +msgid "Enter a valid duration." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:552 +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:618 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:619 +msgid "No file was submitted." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:620 +msgid "The submitted file is empty." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:622 +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:627 +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:693 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:856 +#: venv-windows/Lib/site-packages/django/forms/fields.py:948 +#: venv-windows/Lib/site-packages/django/forms/models.py:1572 +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:950 +#: venv-windows/Lib/site-packages/django/forms/fields.py:1069 +#: venv-windows/Lib/site-packages/django/forms/models.py:1570 +msgid "Enter a list of values." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:1070 +msgid "Enter a complete value." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:1309 +msgid "Enter a valid UUID." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/fields.py:1339 +msgid "Enter a valid JSON." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +#: venv-windows/Lib/site-packages/django/forms/forms.py:98 +msgid ":" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/forms.py:248 +#: venv-windows/Lib/site-packages/django/forms/forms.py:332 +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/formsets.py:63 +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/formsets.py:67 +#, python-format +msgid "Please submit at most %(num)d form." +msgid_plural "Please submit at most %(num)d forms." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/forms/formsets.py:72 +#, python-format +msgid "Please submit at least %(num)d form." +msgid_plural "Please submit at least %(num)d forms." +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/forms/formsets.py:483 +#: venv-windows/Lib/site-packages/django/forms/formsets.py:490 +msgid "Order" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/formsets.py:496 +msgid "Delete" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/models.py:892 +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/models.py:897 +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/models.py:904 +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/models.py:913 +msgid "Please correct the duplicate values below." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/models.py:1344 +msgid "The inline value did not match the parent instance." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/models.py:1435 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/models.py:1574 +#, python-format +msgid "“%(pk)s†is not a valid value." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/utils.py:226 +#, python-format +msgid "" +"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/widgets.py:439 +msgid "Clear" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/widgets.py:440 +msgid "Currently" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/widgets.py:441 +msgid "Change" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/widgets.py:770 +msgid "Unknown" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/widgets.py:771 +msgid "Yes" +msgstr "" + +#: venv-windows/Lib/site-packages/django/forms/widgets.py:772 +msgid "No" +msgstr "" + +#. Translators: Please do not add spaces around commas. +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:853 +msgid "yes,no,maybe" +msgstr "" + +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:883 +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:900 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:902 +#, python-format +msgid "%s KB" +msgstr "" + +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:904 +#, python-format +msgid "%s MB" +msgstr "" + +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:906 +#, python-format +msgid "%s GB" +msgstr "" + +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:908 +#, python-format +msgid "%s TB" +msgstr "" + +#: venv-windows/Lib/site-packages/django/template/defaultfilters.py:910 +#, python-format +msgid "%s PB" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dateformat.py:77 +msgid "p.m." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dateformat.py:78 +msgid "a.m." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dateformat.py:83 +msgid "PM" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dateformat.py:84 +msgid "AM" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dateformat.py:155 +msgid "midnight" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dateformat.py:157 +msgid "noon" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:7 +msgid "Monday" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:8 +msgid "Tuesday" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:9 +msgid "Wednesday" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:10 +msgid "Thursday" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:11 +msgid "Friday" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:12 +msgid "Saturday" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:13 +msgid "Sunday" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:16 +msgid "Mon" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:17 +msgid "Tue" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:18 +msgid "Wed" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:19 +msgid "Thu" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:20 +msgid "Fri" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:21 +msgid "Sat" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:22 +msgid "Sun" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:25 +msgid "January" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:26 +msgid "February" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:27 +msgid "March" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:28 +msgid "April" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:29 +msgid "May" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:30 +msgid "June" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:31 +msgid "July" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:32 +msgid "August" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:33 +msgid "September" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:34 +msgid "October" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:35 +msgid "November" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:36 +msgid "December" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:39 +msgid "jan" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:40 +msgid "feb" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:41 +msgid "mar" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:42 +msgid "apr" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:43 +msgid "may" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:44 +msgid "jun" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:45 +msgid "jul" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:46 +msgid "aug" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:47 +msgid "sep" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:48 +msgid "oct" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:49 +msgid "nov" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:50 +msgid "dec" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:53 +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:54 +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:55 +msgctxt "abbrev. month" +msgid "March" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:56 +msgctxt "abbrev. month" +msgid "April" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:57 +msgctxt "abbrev. month" +msgid "May" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:58 +msgctxt "abbrev. month" +msgid "June" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:59 +msgctxt "abbrev. month" +msgid "July" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:60 +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:61 +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:62 +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:63 +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" -#: AKOnline/models.py:13 -msgid "Virtual Room" -msgstr "Virtueller Raum" +#: venv-windows/Lib/site-packages/django/utils/dates.py:64 +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:67 +msgctxt "alt. month" +msgid "January" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:68 +msgctxt "alt. month" +msgid "February" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:69 +msgctxt "alt. month" +msgid "March" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:70 +msgctxt "alt. month" +msgid "April" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:71 +msgctxt "alt. month" +msgid "May" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:72 +msgctxt "alt. month" +msgid "June" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:73 +msgctxt "alt. month" +msgid "July" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:74 +msgctxt "alt. month" +msgid "August" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:75 +msgctxt "alt. month" +msgid "September" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:76 +msgctxt "alt. month" +msgid "October" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:77 +msgctxt "alt. month" +msgid "November" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/dates.py:78 +msgctxt "alt. month" +msgid "December" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/ipv6.py:8 +msgid "This is not a valid IPv6 address." +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/text.py:76 +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/text.py:252 +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +#: venv-windows/Lib/site-packages/django/utils/text.py:271 +#: venv-windows/Lib/site-packages/django/utils/timesince.py:94 +msgid ", " +msgstr "" + +#: venv-windows/Lib/site-packages/django/utils/timesince.py:9 +#, python-format +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/utils/timesince.py:10 +#, python-format +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/utils/timesince.py:11 +#, python-format +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/utils/timesince.py:12 +#, python-format +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/utils/timesince.py:13 +#, python-format +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/utils/timesince.py:14 +#, python-format +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +#: venv-windows/Lib/site-packages/django/views/csrf.py:111 +msgid "Forbidden" +msgstr "" -#: AKOnline/models.py:14 -msgid "Virtual Rooms" -msgstr "Virtuelle Räume" +#: venv-windows/Lib/site-packages/django/views/csrf.py:112 +msgid "CSRF verification failed. Request aborted." +msgstr "" -#: templates/base.html:29 +#: venv-windows/Lib/site-packages/django/views/csrf.py:116 msgid "" -"Are you sure you want to change the language now? This will clear the form!" -msgstr "Wirklich jetzt die Sprache ändern? Das wird das Formular zurücksetzen!" +"You are seeing this message because this HTTPS site requires a “Referer " +"header†to be sent by your web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" -#: templates/base.html:94 -msgid "Go to backend" -msgstr "Zum Backend" +#: venv-windows/Lib/site-packages/django/views/csrf.py:122 +msgid "" +"If you have configured your browser to disable “Referer†headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for “same-" +"origin†requests." +msgstr "" -#: templates/base.html:100 -msgid "Impress" -msgstr "Impressum" +#: venv-windows/Lib/site-packages/django/views/csrf.py:127 +msgid "" +"If you are using the <meta name=\"referrer\" content=\"no-referrer\"> tag or " +"including the “Referrer-Policy: no-referrer†header, please remove them. The " +"CSRF protection requires the “Referer†header to do strict referer checking. " +"If you’re concerned about privacy, use alternatives like <a rel=\"noreferrer" +"\" …> for links to third-party sites." +msgstr "" -#: templates/base.html:103 -msgid "This software is open source" -msgstr "Diese Software ist Open Source" +#: venv-windows/Lib/site-packages/django/views/csrf.py:136 +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/csrf.py:142 +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for “same-origin†requests." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/csrf.py:148 +msgid "More information is available with DEBUG=True." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:44 +msgid "No year specified" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:64 +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:115 +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:214 +msgid "Date out of range" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:94 +msgid "No month specified" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:147 +msgid "No day specified" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:194 +msgid "No week specified" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:349 +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:380 +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:652 +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/dates.py:692 +#, python-format +msgid "Invalid date string “%(datestr)s†given format “%(format)sâ€" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/detail.py:56 +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/list.py:70 +msgid "Page is not “lastâ€, nor can it be converted to an int." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/list.py:77 +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/generic/list.py:169 +#, python-format +msgid "Empty list and “%(class_name)s.allow_empty†is False." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/static.py:38 +msgid "Directory indexes are not allowed here." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/static.py:40 +#, python-format +msgid "“%(path)s†does not exist" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/static.py:79 +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:7 +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:221 +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:207 +#, python-format +msgid "" +"View <a href=\"https://docs.djangoproject.com/en/%(version)s/releases/\" " +"target=\"_blank\" rel=\"noopener\">release notes</a> for Django %(version)s" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:222 +#, python-format +msgid "" +"You are seeing this page because <a href=\"https://docs.djangoproject.com/en/" +"%(version)s/ref/settings/#debug\" target=\"_blank\" rel=\"noopener" +"\">DEBUG=True</a> is in your settings file and you have not configured any " +"URLs." +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:230 +msgid "Django Documentation" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:231 +msgid "Topics, references, & how-to’s" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:239 +msgid "Tutorial: A Polling App" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:240 +msgid "Get started with Django" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:248 +msgid "Django Community" +msgstr "" + +#: venv-windows/Lib/site-packages/django/views/templates/default_urlconf.html:249 +msgid "Connect, get help, or contribute" +msgstr "" + +#: venv-windows/Lib/site-packages/django_tex/models.py:12 +msgid "Template not found." +msgstr "" + +#: venv-windows/Lib/site-packages/fontawesome_5/fields.py:16 +#: venv-windows/Lib/site-packages/fontawesome_6/fields.py:16 +msgid "A fontawesome icon field" +msgstr "" + +#: venv-windows/Lib/site-packages/timezone_field/rest_framework.py:12 +msgid "A valid timezone is required." +msgstr "" + +#~ msgid "URL to the room or server" +#~ msgstr "URL zum Raum/Server" + +#~ msgid "Room" +#~ msgstr "Raum" + +#~ msgid "Virtual Room" +#~ msgstr "Virtueller Raum" + +#~ msgid "Virtual Rooms" +#~ msgstr "Virtuelle Räume" #~ msgid "Scheduling for" #~ msgstr "Scheduling für" @@ -66,9 +1290,6 @@ msgstr "Diese Software ist Open Source" #~ msgid "Event (Vertical)" #~ msgstr "Event (vertikal)" -#~ msgid "Room" -#~ msgstr "Raum" - #~ msgid "Event Status" #~ msgstr "Event-Status" diff --git a/requirements.txt b/requirements.txt index 43194a7d775cb80054a7ca31e24bbd3e81707b35..64081f5febaae4aa1a8285a926181f590da5546e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,5 +13,6 @@ django-tex==1.1.10 django-csp==3.7 django-compressor==4.1 django-libsass==0.9 +django-betterforms==2.0.0 mysqlclient==2.1.1 # for production deployment tzdata==2022.7