AccessRestrictionGroup

This commit is contained in:
Laura Klünder 2017-12-20 20:54:58 +01:00
parent 040669755f
commit 245c101eb0
6 changed files with 199 additions and 124 deletions

View file

@ -39,7 +39,13 @@ class EditorFormBase(I18nModelFormMixin, ModelForm):
if not creating: if not creating:
self.initial['geometry'] = json.dumps(mapping(self.instance.geometry), separators=(',', ':')) self.initial['geometry'] = json.dumps(mapping(self.instance.geometry), separators=(',', ':'))
if 'groups' in self.fields: if self._meta.model.__name__ == 'AccessRestriction':
AccessRestrictionGroup = self.request.changeset.wrap_model('AccessRestrictionGroup')
self.fields['groups'].label_from_instance = lambda obj: obj.title
self.fields['groups'].queryset = AccessRestrictionGroup.qs_for_request(self.request)
elif 'groups' in self.fields:
LocationGroupCategory = self.request.changeset.wrap_model('LocationGroupCategory') LocationGroupCategory = self.request.changeset.wrap_model('LocationGroupCategory')
kwargs = {'allow_'+self._meta.model._meta.default_related_name: True} kwargs = {'allow_'+self._meta.model._meta.default_related_name: True}

View file

@ -52,6 +52,7 @@ urlpatterns.extend(add_editor_urls('LocationGroupCategory'))
urlpatterns.extend(add_editor_urls('LocationGroup')) urlpatterns.extend(add_editor_urls('LocationGroup'))
urlpatterns.extend(add_editor_urls('WayType')) urlpatterns.extend(add_editor_urls('WayType'))
urlpatterns.extend(add_editor_urls('AccessRestriction')) urlpatterns.extend(add_editor_urls('AccessRestriction'))
urlpatterns.extend(add_editor_urls('AccessRestrictionGroup'))
urlpatterns.extend(add_editor_urls('Source')) urlpatterns.extend(add_editor_urls('Source'))
urlpatterns.extend(add_editor_urls('Building', 'Level')) urlpatterns.extend(add_editor_urls('Building', 'Level'))
urlpatterns.extend(add_editor_urls('Space', 'Level', explicit_edit=True)) urlpatterns.extend(add_editor_urls('Space', 'Level', explicit_edit=True))

View file

@ -45,6 +45,7 @@ def main_index(request):
child_model(request, 'LocationGroup'), child_model(request, 'LocationGroup'),
child_model(request, 'WayType'), child_model(request, 'WayType'),
child_model(request, 'AccessRestriction'), child_model(request, 'AccessRestriction'),
child_model(request, 'AccessRestrictionGroup'),
child_model(request, 'Source'), child_model(request, 'Source'),
], ],
}) })

View file

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-20 17:40+0100\n" "POT-Creation-Date: 2017-12-20 20:53+0100\n"
"PO-Revision-Date: 2017-12-20 17:43+0100\n" "PO-Revision-Date: 2017-12-20 20:53+0100\n"
"Last-Translator: Laura Klünder <laura@codingcatgirl.de>\n" "Last-Translator: Laura Klünder <laura@codingcatgirl.de>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: de\n" "Language: de\n"
@ -39,11 +39,11 @@ msgstr[1] "alles mögliche (%d Erlaubnisse)"
#: c3nav/control/forms.py:69 c3nav/control/templates/control/access.html:4 #: c3nav/control/forms.py:69 c3nav/control/templates/control/access.html:4
#: c3nav/control/templates/control/user.html:59 #: c3nav/control/templates/control/user.html:59
#: c3nav/mapdata/models/access.py:124 #: c3nav/mapdata/models/access.py:146
msgid "Access Permissions" msgid "Access Permissions"
msgstr "Zugangserlaubnisse" msgstr "Zugangserlaubnisse"
#: c3nav/control/forms.py:78 c3nav/control/templates/control/user.html:80 #: c3nav/control/forms.py:78 c3nav/control/templates/control/user.html:82
msgid "never" msgid "never"
msgstr "nie" msgstr "nie"
@ -152,7 +152,7 @@ msgstr "Benutzer"
#: c3nav/control/templates/control/announcements.html:9 #: c3nav/control/templates/control/announcements.html:9
#: c3nav/control/templates/control/users.html:15 #: c3nav/control/templates/control/users.html:15
#: c3nav/mapdata/models/base.py:40 c3nav/mapdata/utils/locations.py:281 #: c3nav/mapdata/models/base.py:40 c3nav/mapdata/utils/locations.py:299
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
@ -162,7 +162,7 @@ msgid "Text"
msgstr "Text" msgstr "Text"
#: c3nav/control/templates/control/announcements.html:11 #: c3nav/control/templates/control/announcements.html:11
#: c3nav/editor/models/changeset.py:47 c3nav/mapdata/models/access.py:117 #: c3nav/editor/models/changeset.py:47 c3nav/mapdata/models/access.py:139
msgid "Author" msgid "Author"
msgstr "Autor" msgstr "Autor"
@ -247,7 +247,7 @@ msgid "General Permissions"
msgstr "Generelle Befugnisse" msgstr "Generelle Befugnisse"
#: c3nav/control/templates/control/user.html:24 #: c3nav/control/templates/control/user.html:24
#: c3nav/control/templates/control/user.html:91 #: c3nav/control/templates/control/user.html:93
msgid "none" msgid "none"
msgstr "keine" msgstr "keine"
@ -287,55 +287,55 @@ msgstr "API Secret generieren"
msgid "Update API secret" msgid "Update API secret"
msgstr "API Secret updaten" msgstr "API Secret updaten"
#: c3nav/control/templates/control/user.html:65 #: c3nav/control/templates/control/user.html:60
#: c3nav/mapdata/models/access.py:26 c3nav/mapdata/models/access.py:187 msgid "Add"
#: c3nav/mapdata/models/access.py:200 msgstr "Hinzufügen"
#: c3nav/control/templates/control/user.html:67
#: c3nav/mapdata/models/access.py:27 c3nav/mapdata/models/access.py:209
#: c3nav/mapdata/models/access.py:222
msgid "Access Restriction" msgid "Access Restriction"
msgstr "Zugangs­beschränkung" msgstr "Zugangs­beschränkung"
#: c3nav/control/templates/control/user.html:66 #: c3nav/control/templates/control/user.html:68
#: c3nav/mapdata/models/access.py:52 c3nav/mapdata/models/geometry/space.py:297 #: c3nav/mapdata/models/access.py:74 c3nav/mapdata/models/geometry/space.py:301
#: c3nav/site/models.py:15 #: c3nav/site/models.py:15
msgid "author" msgid "author"
msgstr "Autor" msgstr "Autor"
#: c3nav/control/templates/control/user.html:67 #: c3nav/control/templates/control/user.html:69
#: c3nav/mapdata/models/access.py:114 #: c3nav/mapdata/models/access.py:136
msgid "expires" msgid "expires"
msgstr "läuft ab" msgstr "läuft ab"
#: c3nav/control/templates/control/user.html:68 #: c3nav/control/templates/control/user.html:70
#: c3nav/mapdata/models/access.py:57 c3nav/mapdata/models/access.py:115 #: c3nav/mapdata/models/access.py:79 c3nav/mapdata/models/access.py:137
msgid "can grant" msgid "can grant"
msgstr "kann erteilen" msgstr "kann erteilen"
#: c3nav/control/templates/control/user.html:69 #: c3nav/control/templates/control/user.html:71
msgid "key" msgid "key"
msgstr "key" msgstr "key"
#: c3nav/control/templates/control/user.html:81 #: c3nav/control/templates/control/user.html:83
#: c3nav/mapdata/models/geometry/level.py:124 #: c3nav/mapdata/models/geometry/level.py:124
#: c3nav/mapdata/models/locations.py:102 c3nav/mapdata/models/locations.py:103 #: c3nav/mapdata/models/locations.py:102 c3nav/mapdata/models/locations.py:103
msgid "Yes" msgid "Yes"
msgstr "Ja" msgstr "Ja"
#: c3nav/control/templates/control/user.html:81 #: c3nav/control/templates/control/user.html:83
#: c3nav/mapdata/models/geometry/level.py:124 #: c3nav/mapdata/models/geometry/level.py:124
#: c3nav/mapdata/models/locations.py:102 c3nav/mapdata/models/locations.py:103 #: c3nav/mapdata/models/locations.py:102 c3nav/mapdata/models/locations.py:103
msgid "No" msgid "No"
msgstr "Nein" msgstr "Nein"
#: c3nav/control/templates/control/user.html:84 #: c3nav/control/templates/control/user.html:86
#: c3nav/editor/templates/editor/changeset.html:124 #: c3nav/editor/templates/editor/changeset.html:124
#: c3nav/editor/templates/editor/delete.html:17 #: c3nav/editor/templates/editor/delete.html:17
#: c3nav/editor/templates/editor/edit.html:27 #: c3nav/editor/templates/editor/edit.html:27
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: c3nav/control/templates/control/user.html:93
msgid "Add"
msgstr "Hinzufügen"
#: c3nav/control/templates/control/users.html:8 #: c3nav/control/templates/control/users.html:8
msgid "Search" msgid "Search"
msgstr "Suchen" msgstr "Suchen"
@ -397,33 +397,33 @@ msgstr "Token erfolgreich invalidiert."
msgid "You can only display your most recently created token." msgid "You can only display your most recently created token."
msgstr "Du kannst nur deinen zuletzt erstellten Code anzeigen." msgstr "Du kannst nur deinen zuletzt erstellten Code anzeigen."
#: c3nav/editor/forms.py:118 #: c3nav/editor/forms.py:124
msgid "Redirecting Slugs (comma seperated)" msgid "Redirecting Slugs (comma seperated)"
msgstr "Umleitungs-Slugs (mit Komma getrennt)" msgstr "Umleitungs-Slugs (mit Komma getrennt)"
#: c3nav/editor/forms.py:144 #: c3nav/editor/forms.py:150
#, python-format #, python-format
msgid "Can not add redirecting slug “%s”: it's the slug of this object." msgid "Can not add redirecting slug “%s”: it's the slug of this object."
msgstr "" msgstr ""
"Umleitungs-Slug „%s“ kann nicht hinzugefügt werden: Es ist der Slug dieses " "Umleitungs-Slug „%s“ kann nicht hinzugefügt werden: Es ist der Slug dieses "
"Objects." "Objects."
#: c3nav/editor/forms.py:151 #: c3nav/editor/forms.py:157
#, python-format #, python-format
msgid "Can not add redirecting slug “%s”: it is already used elsewhere." msgid "Can not add redirecting slug “%s”: it is already used elsewhere."
msgstr "" msgstr ""
"Umleitungs-Slug „%s“ kann nicht hinzugefügt werden: Er wird bereits an " "Umleitungs-Slug „%s“ kann nicht hinzugefügt werden: Er wird bereits an "
"anderer Stelle verwendet." "anderer Stelle verwendet."
#: c3nav/editor/forms.py:203 #: c3nav/editor/forms.py:209
msgid "Final rejection" msgid "Final rejection"
msgstr "Endgültige Ablehnung" msgstr "Endgültige Ablehnung"
#: c3nav/editor/forms.py:211 #: c3nav/editor/forms.py:217
msgid "create one way edges" msgid "create one way edges"
msgstr "Kante nur in eine Richtung erstellen" msgstr "Kante nur in eine Richtung erstellen"
#: c3nav/editor/forms.py:212 #: c3nav/editor/forms.py:218
msgid "activate next node after connecting" msgid "activate next node after connecting"
msgstr "nächsten Knoten nach dem Verbinden aktivieren" msgstr "nächsten Knoten nach dem Verbinden aktivieren"
@ -506,7 +506,7 @@ msgstr "letzte Statusänderung"
#: c3nav/editor/models/changeset.py:48 c3nav/mapdata/models/base.py:50 #: c3nav/editor/models/changeset.py:48 c3nav/mapdata/models/base.py:50
#: c3nav/mapdata/models/graph.py:34 c3nav/mapdata/models/locations.py:183 #: c3nav/mapdata/models/graph.py:34 c3nav/mapdata/models/locations.py:183
#: c3nav/mapdata/utils/locations.py:316 #: c3nav/mapdata/utils/locations.py:334
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
@ -827,12 +827,12 @@ msgstr "Einstellungen für neue Kanten"
#: c3nav/editor/templates/editor/index.html:10 #: c3nav/editor/templates/editor/index.html:10
#: c3nav/editor/templates/editor/level.html:16 #: c3nav/editor/templates/editor/level.html:16
#: c3nav/mapdata/models/geometry/level.py:55 c3nav/mapdata/models/level.py:29 #: c3nav/mapdata/models/geometry/level.py:55 c3nav/mapdata/models/level.py:29
#: c3nav/mapdata/utils/locations.py:283 #: c3nav/mapdata/utils/locations.py:301
msgid "Level" msgid "Level"
msgstr "Etage" msgstr "Etage"
#: c3nav/editor/templates/editor/level.html:22 #: c3nav/editor/templates/editor/level.html:22
#: c3nav/editor/templates/editor/space.html:14 c3nav/editor/views/edit.py:411 #: c3nav/editor/templates/editor/space.html:14 c3nav/editor/views/edit.py:412
msgid "back to overview" msgid "back to overview"
msgstr "zurück zur Übersicht" msgstr "zurück zur Übersicht"
@ -858,8 +858,8 @@ msgstr "Details anzeigen"
#: c3nav/editor/templates/editor/space.html:9 #: c3nav/editor/templates/editor/space.html:9
#: c3nav/mapdata/models/geometry/level.py:110 #: c3nav/mapdata/models/geometry/level.py:110
#: c3nav/mapdata/models/geometry/space.py:66 #: c3nav/mapdata/models/geometry/space.py:70
#: c3nav/mapdata/utils/locations.py:289 #: c3nav/mapdata/utils/locations.py:307
msgid "Space" msgid "Space"
msgstr "Raum" msgstr "Raum"
@ -1068,89 +1068,89 @@ msgstr "gelöscht"
msgid "You cannot edit this change set." msgid "You cannot edit this change set."
msgstr "Du kannst dieses Änderungsset nicht bearbeiten." msgstr "Du kannst dieses Änderungsset nicht bearbeiten."
#: c3nav/editor/views/edit.py:221 #: c3nav/editor/views/edit.py:222
msgid "You can not create new objects because your changeset is full." msgid "You can not create new objects because your changeset is full."
msgstr "" msgstr ""
"Du kannst keine neuen Objekte erstellen weil dein Änderungsset voll ist." "Du kannst keine neuen Objekte erstellen weil dein Änderungsset voll ist."
#: c3nav/editor/views/edit.py:224 c3nav/editor/views/edit.py:238 #: c3nav/editor/views/edit.py:225 c3nav/editor/views/edit.py:239
msgid "You can not edit this object because your changeset is full." msgid "You can not edit this object because your changeset is full."
msgstr "Du kannst diese Objekt nicht löschen weil dein Änderungsset voll ist." msgstr "Du kannst diese Objekt nicht löschen weil dein Änderungsset voll ist."
#: c3nav/editor/views/edit.py:247 #: c3nav/editor/views/edit.py:248
msgid "" msgid ""
"You can not delete this object because other objects still depend on it." "You can not delete this object because other objects still depend on it."
msgstr "" msgstr ""
"Du kannst dieses Objekt nicht löschen weil andere Objekte sich darauf " "Du kannst dieses Objekt nicht löschen weil andere Objekte sich darauf "
"beziehen." "beziehen."
#: c3nav/editor/views/edit.py:255 c3nav/editor/views/edit.py:298 #: c3nav/editor/views/edit.py:256 c3nav/editor/views/edit.py:299
#: c3nav/editor/views/edit.py:524 c3nav/editor/views/edit.py:561 #: c3nav/editor/views/edit.py:525 c3nav/editor/views/edit.py:562
#: c3nav/editor/views/edit.py:579 #: c3nav/editor/views/edit.py:580
msgid "You can not edit changes on this changeset." msgid "You can not edit changes on this changeset."
msgstr "Du kannst keine Änderungen dieses Änderungssets bearbeiten." msgstr "Du kannst keine Änderungen dieses Änderungssets bearbeiten."
#: c3nav/editor/views/edit.py:257 #: c3nav/editor/views/edit.py:258
msgid "Object was successfully deleted." msgid "Object was successfully deleted."
msgstr "Objekt wurde erfolgreich gelöscht." msgstr "Objekt wurde erfolgreich gelöscht."
#: c3nav/editor/views/edit.py:295 #: c3nav/editor/views/edit.py:296
msgid "Object was successfully saved." msgid "Object was successfully saved."
msgstr "Objekt wurde erfolgreich gespeichert." msgstr "Objekt wurde erfolgreich gespeichert."
#: c3nav/editor/views/edit.py:366 c3nav/editor/views/edit.py:482 #: c3nav/editor/views/edit.py:367 c3nav/editor/views/edit.py:483
msgid "back to level" msgid "back to level"
msgstr "zurück zur Etage" msgstr "zurück zur Etage"
#: c3nav/editor/views/edit.py:405 c3nav/editor/views/edit.py:496 #: c3nav/editor/views/edit.py:406 c3nav/editor/views/edit.py:497
msgid "back to space" msgid "back to space"
msgstr "zurück zum Raum" msgstr "zurück zum Raum"
#: c3nav/editor/views/edit.py:443 #: c3nav/editor/views/edit.py:444
msgid "Could not edit edge because your changeset is full." msgid "Could not edit edge because your changeset is full."
msgstr "Kante konnte nicht bearbeitet werden weil dein Änderungsset voll ist." msgstr "Kante konnte nicht bearbeitet werden weil dein Änderungsset voll ist."
#: c3nav/editor/views/edit.py:450 #: c3nav/editor/views/edit.py:451
msgid "Reverse edge created." msgid "Reverse edge created."
msgstr "Umgekehrte Kante erstellt." msgstr "Umgekehrte Kante erstellt."
#: c3nav/editor/views/edit.py:450 #: c3nav/editor/views/edit.py:451
msgid "Edge created." msgid "Edge created."
msgstr "Kante erstellt." msgstr "Kante erstellt."
#: c3nav/editor/views/edit.py:453 #: c3nav/editor/views/edit.py:454
msgid "Reverse edge deleted." msgid "Reverse edge deleted."
msgstr "Umgekehrte Kante gelöscht." msgstr "Umgekehrte Kante gelöscht."
#: c3nav/editor/views/edit.py:453 #: c3nav/editor/views/edit.py:454
msgid "Edge deleted." msgid "Edge deleted."
msgstr "Kante gelöscht." msgstr "Kante gelöscht."
#: c3nav/editor/views/edit.py:458 #: c3nav/editor/views/edit.py:459
msgid "Reverse edge overwritten." msgid "Reverse edge overwritten."
msgstr "Umgekehrte Kante überschrieben." msgstr "Umgekehrte Kante überschrieben."
#: c3nav/editor/views/edit.py:458 #: c3nav/editor/views/edit.py:459
msgid "Edge overwritten." msgid "Edge overwritten."
msgstr "Kante überschrieben." msgstr "Kante überschrieben."
#: c3nav/editor/views/edit.py:498 #: c3nav/editor/views/edit.py:499
msgid "to level graph" msgid "to level graph"
msgstr "zum Etagengraph" msgstr "zum Etagengraph"
#: c3nav/editor/views/edit.py:514 #: c3nav/editor/views/edit.py:515
msgid "You can not delete this graph node because your changeset is full." msgid "You can not delete this graph node because your changeset is full."
msgstr "Du kannst diesen Knoten nicht löschen weil dein Änderungsset voll ist." msgstr "Du kannst diesen Knoten nicht löschen weil dein Änderungsset voll ist."
#: c3nav/editor/views/edit.py:526 #: c3nav/editor/views/edit.py:527
msgid "Graph Node was successfully deleted." msgid "Graph Node was successfully deleted."
msgstr "Graphknoten wurde erfolgreich gelöscht." msgstr "Graphknoten wurde erfolgreich gelöscht."
#: c3nav/editor/views/edit.py:567 #: c3nav/editor/views/edit.py:568
msgid "You can not add graph nodes because your changeset is full." msgid "You can not add graph nodes because your changeset is full."
msgstr "Du kannst keine Graphknoten erstellen weil dein Änderungsset voll ist." msgstr "Du kannst keine Graphknoten erstellen weil dein Änderungsset voll ist."
#: c3nav/editor/views/edit.py:574 #: c3nav/editor/views/edit.py:575
msgid "New graph node created." msgid "New graph node created."
msgstr "Neuer Graphknoten erstellt." msgstr "Neuer Graphknoten erstellt."
@ -1268,50 +1268,62 @@ msgstr "Zoomfaktor (von 1 bis 32), nur relevant für Bildrenderer"
msgid "open" msgid "open"
msgstr "öffnen" msgstr "öffnen"
#: c3nav/mapdata/models/access.py:27 #: c3nav/mapdata/models/access.py:24
msgid "Groups"
msgstr "Gruppen"
#: c3nav/mapdata/models/access.py:28
msgid "Access Restrictions" msgid "Access Restrictions"
msgstr "Zugangs­beschränkungen" msgstr "Zugangs­beschränkungen"
#: c3nav/mapdata/models/access.py:54 #: c3nav/mapdata/models/access.py:47
msgid "Access Restriction Group"
msgstr "Zugangsbeschränkungsgruppe"
#: c3nav/mapdata/models/access.py:48
msgid "Access Restriction Groups"
msgstr "Zugangsbeschränkungsgruppen"
#: c3nav/mapdata/models/access.py:76
msgid "valid until" msgid "valid until"
msgstr "gültig bis" msgstr "gültig bis"
#: c3nav/mapdata/models/access.py:55 #: c3nav/mapdata/models/access.py:77
msgid "unlimited" msgid "unlimited"
msgstr "unbeschränkt" msgstr "unbeschränkt"
#: c3nav/mapdata/models/access.py:56 #: c3nav/mapdata/models/access.py:78
msgid "redeemed" msgid "redeemed"
msgstr "eingelöst" msgstr "eingelöst"
#: c3nav/mapdata/models/access.py:58 c3nav/mapdata/models/access.py:118 #: c3nav/mapdata/models/access.py:80 c3nav/mapdata/models/access.py:140
msgid "unique key" msgid "unique key"
msgstr "unique key" msgstr "unique key"
#: c3nav/mapdata/models/access.py:62 #: c3nav/mapdata/models/access.py:84
msgid "Access Permission Token" msgid "Access Permission Token"
msgstr "Zugangserlaubnis-Token" msgstr "Zugangserlaubnis-Token"
#: c3nav/mapdata/models/access.py:63 #: c3nav/mapdata/models/access.py:85
msgid "Access Permission Tokens" msgid "Access Permission Tokens"
msgstr "Zugangserlaubnis-Token" msgstr "Zugangserlaubnis-Token"
#: c3nav/mapdata/models/access.py:108 c3nav/site/views.py:77 #: c3nav/mapdata/models/access.py:130 c3nav/site/views.py:77
#: c3nav/site/views.py:298 #: c3nav/site/views.py:298
msgid "Area successfully unlocked." msgid "Area successfully unlocked."
msgid_plural "Areas successfully unlocked." msgid_plural "Areas successfully unlocked."
msgstr[0] "Bereich erfolgreich freigeschaltet." msgstr[0] "Bereich erfolgreich freigeschaltet."
msgstr[1] "Bereiche erfolgreich freigeschaltet." msgstr[1] "Bereiche erfolgreich freigeschaltet."
#: c3nav/mapdata/models/access.py:120 #: c3nav/mapdata/models/access.py:142
msgid "Access permission token" msgid "Access permission token"
msgstr "Zugangserlaubnis-Token" msgstr "Zugangserlaubnis-Token"
#: c3nav/mapdata/models/access.py:123 #: c3nav/mapdata/models/access.py:145
msgid "Access Permission" msgid "Access Permission"
msgstr "Zugangserlaubnis" msgstr "Zugangserlaubnis"
#: c3nav/mapdata/models/base.py:39 c3nav/mapdata/utils/locations.py:280 #: c3nav/mapdata/models/base.py:39 c3nav/mapdata/utils/locations.py:298
msgid "Type" msgid "Type"
msgstr "Typ" msgstr "Typ"
@ -1355,8 +1367,8 @@ msgstr "Gebäude"
#: c3nav/mapdata/models/geometry/level.py:105 #: c3nav/mapdata/models/geometry/level.py:105
#: c3nav/mapdata/models/geometry/level.py:123 #: c3nav/mapdata/models/geometry/level.py:123
#: c3nav/mapdata/models/geometry/space.py:147 #: c3nav/mapdata/models/geometry/space.py:151
#: c3nav/mapdata/models/geometry/space.py:167 #: c3nav/mapdata/models/geometry/space.py:171
msgid "height" msgid "height"
msgstr "Höhe" msgstr "Höhe"
@ -1381,7 +1393,7 @@ msgid "Doors"
msgstr "Türen" msgstr "Türen"
#: c3nav/mapdata/models/geometry/level.py:147 #: c3nav/mapdata/models/geometry/level.py:147
#: c3nav/mapdata/models/geometry/space.py:234 #: c3nav/mapdata/models/geometry/space.py:238
msgid "altitude" msgid "altitude"
msgstr "Bodenhöhe" msgstr "Bodenhöhe"
@ -1419,142 +1431,142 @@ msgstr ""
"%(num_modified)d geändert, %(num_deleted)d entfernt, %(num_created)d " "%(num_modified)d geändert, %(num_deleted)d entfernt, %(num_created)d "
"erstellt." "erstellt."
#: c3nav/mapdata/models/geometry/space.py:20 #: c3nav/mapdata/models/geometry/space.py:21
#: c3nav/mapdata/models/geometry/space.py:250 #: c3nav/mapdata/models/geometry/space.py:254
#: c3nav/mapdata/models/geometry/space.py:272 #: c3nav/mapdata/models/geometry/space.py:276
msgid "space" msgid "space"
msgstr "Raum" msgstr "Raum"
#: c3nav/mapdata/models/geometry/space.py:46 #: c3nav/mapdata/models/geometry/space.py:50
#, python-brace-format #, python-brace-format
msgid "{category}, {space}, {level}" msgid "{category}, {space}, {level}"
msgstr "{category}, {space}, {level}" msgstr "{category}, {space}, {level}"
#: c3nav/mapdata/models/geometry/space.py:50 #: c3nav/mapdata/models/geometry/space.py:54
#, python-brace-format #, python-brace-format
msgid "{category}, {space}" msgid "{category}, {space}"
msgstr "{category}, {space}" msgstr "{category}, {space}"
#: c3nav/mapdata/models/geometry/space.py:92 #: c3nav/mapdata/models/geometry/space.py:96
msgid "Column" msgid "Column"
msgstr "Säule" msgstr "Säule"
#: c3nav/mapdata/models/geometry/space.py:93 #: c3nav/mapdata/models/geometry/space.py:97
msgid "Columns" msgid "Columns"
msgstr "Säulen" msgstr "Säulen"
#: c3nav/mapdata/models/geometry/space.py:104 #: c3nav/mapdata/models/geometry/space.py:108
msgid "Area" msgid "Area"
msgstr "Bereich" msgstr "Bereich"
#: c3nav/mapdata/models/geometry/space.py:105 #: c3nav/mapdata/models/geometry/space.py:109
#: c3nav/mapdata/utils/locations.py:295 #: c3nav/mapdata/utils/locations.py:313
msgid "Areas" msgid "Areas"
msgstr "Bereiche" msgstr "Bereiche"
#: c3nav/mapdata/models/geometry/space.py:125 #: c3nav/mapdata/models/geometry/space.py:129
msgid "Stair" msgid "Stair"
msgstr "Stufe" msgstr "Stufe"
#: c3nav/mapdata/models/geometry/space.py:126 #: c3nav/mapdata/models/geometry/space.py:130
msgid "Stairs" msgid "Stairs"
msgstr "Stufen" msgstr "Stufen"
#: c3nav/mapdata/models/geometry/space.py:137 #: c3nav/mapdata/models/geometry/space.py:141
msgid "Ramp" msgid "Ramp"
msgstr "Rampe" msgstr "Rampe"
#: c3nav/mapdata/models/geometry/space.py:138 #: c3nav/mapdata/models/geometry/space.py:142
msgid "Ramps" msgid "Ramps"
msgstr "Rampen" msgstr "Rampen"
#: c3nav/mapdata/models/geometry/space.py:151 #: c3nav/mapdata/models/geometry/space.py:155
msgid "Obstacle" msgid "Obstacle"
msgstr "Hindernis" msgstr "Hindernis"
#: c3nav/mapdata/models/geometry/space.py:152 #: c3nav/mapdata/models/geometry/space.py:156
msgid "Obstacles" msgid "Obstacles"
msgstr "Hindernisse" msgstr "Hindernisse"
#: c3nav/mapdata/models/geometry/space.py:166 #: c3nav/mapdata/models/geometry/space.py:170
msgid "width" msgid "width"
msgstr "Breite" msgstr "Breite"
#: c3nav/mapdata/models/geometry/space.py:171 #: c3nav/mapdata/models/geometry/space.py:175
msgid "Line Obstacle" msgid "Line Obstacle"
msgstr "Linienhindernis" msgstr "Linienhindernis"
#: c3nav/mapdata/models/geometry/space.py:172 #: c3nav/mapdata/models/geometry/space.py:176
msgid "Line Obstacles" msgid "Line Obstacles"
msgstr "Linienhindernisse" msgstr "Linienhindernisse"
#: c3nav/mapdata/models/geometry/space.py:207 #: c3nav/mapdata/models/geometry/space.py:211
msgid "Point of Interest" msgid "Point of Interest"
msgstr "Ort von Interesse" msgstr "Ort von Interesse"
#: c3nav/mapdata/models/geometry/space.py:208 #: c3nav/mapdata/models/geometry/space.py:212
msgid "Points of Interest" msgid "Points of Interest"
msgstr "Orte von Interesse" msgstr "Orte von Interesse"
#: c3nav/mapdata/models/geometry/space.py:224 #: c3nav/mapdata/models/geometry/space.py:228
msgid "Hole" msgid "Hole"
msgstr "Loch" msgstr "Loch"
#: c3nav/mapdata/models/geometry/space.py:225 #: c3nav/mapdata/models/geometry/space.py:229
msgid "Holes" msgid "Holes"
msgstr "Löcher" msgstr "Löcher"
#: c3nav/mapdata/models/geometry/space.py:237 #: c3nav/mapdata/models/geometry/space.py:241
msgid "Altitude Marker" msgid "Altitude Marker"
msgstr "Höhenmarker" msgstr "Höhenmarker"
#: c3nav/mapdata/models/geometry/space.py:238 #: c3nav/mapdata/models/geometry/space.py:242
msgid "Altitude Markers" msgid "Altitude Markers"
msgstr "Höhenmarker" msgstr "Höhenmarker"
#: c3nav/mapdata/models/geometry/space.py:251 #: c3nav/mapdata/models/geometry/space.py:255
#: c3nav/mapdata/models/geometry/space.py:275 #: c3nav/mapdata/models/geometry/space.py:279
msgid "target space" msgid "target space"
msgstr "Zielraum" msgstr "Zielraum"
#: c3nav/mapdata/models/geometry/space.py:253 #: c3nav/mapdata/models/geometry/space.py:257
#: c3nav/mapdata/models/geometry/space.py:277 c3nav/mapdata/models/graph.py:44 #: c3nav/mapdata/models/geometry/space.py:281 c3nav/mapdata/models/graph.py:44
msgid "description" msgid "description"
msgstr "Beschreibung" msgstr "Beschreibung"
#: c3nav/mapdata/models/geometry/space.py:256 #: c3nav/mapdata/models/geometry/space.py:260
msgid "Leave description" msgid "Leave description"
msgstr "Verlassensbeschreibung" msgstr "Verlassensbeschreibung"
#: c3nav/mapdata/models/geometry/space.py:257 #: c3nav/mapdata/models/geometry/space.py:261
msgid "Leave descriptions" msgid "Leave descriptions"
msgstr "Verlassensbeschreibungen" msgstr "Verlassensbeschreibungen"
#: c3nav/mapdata/models/geometry/space.py:273 #: c3nav/mapdata/models/geometry/space.py:277
msgid "origin space" msgid "origin space"
msgstr "Ursprungsraum" msgstr "Ursprungsraum"
#: c3nav/mapdata/models/geometry/space.py:280 #: c3nav/mapdata/models/geometry/space.py:284
msgid "Cross description" msgid "Cross description"
msgstr "Durchschreitungsbeschreibung" msgstr "Durchschreitungsbeschreibung"
#: c3nav/mapdata/models/geometry/space.py:281 #: c3nav/mapdata/models/geometry/space.py:285
msgid "Cross descriptions" msgid "Cross descriptions"
msgstr "Durchschreitungsbeschreibungen" msgstr "Durchschreitungsbeschreibungen"
#: c3nav/mapdata/models/geometry/space.py:298 #: c3nav/mapdata/models/geometry/space.py:302
msgid "comment" msgid "comment"
msgstr "Kommentar" msgstr "Kommentar"
#: c3nav/mapdata/models/geometry/space.py:299 #: c3nav/mapdata/models/geometry/space.py:303
msgid "Measurement list" msgid "Measurement list"
msgstr "Messungsliste" msgstr "Messungsliste"
#: c3nav/mapdata/models/geometry/space.py:302 #: c3nav/mapdata/models/geometry/space.py:306
msgid "Wi-Fi Measurement" msgid "Wi-Fi Measurement"
msgstr "WLAN Messung" msgstr "WLAN Messung"
#: c3nav/mapdata/models/geometry/space.py:303 #: c3nav/mapdata/models/geometry/space.py:307
msgid "Wi-Fi Measurements" msgid "Wi-Fi Measurements"
msgstr "WLAN Messungen" msgstr "WLAN Messungen"
@ -1659,7 +1671,7 @@ msgid "default height"
msgstr "Standarddeckenhöhe" msgstr "Standarddeckenhöhe"
#: c3nav/mapdata/models/locations.py:45 c3nav/mapdata/models/locations.py:65 #: c3nav/mapdata/models/locations.py:45 c3nav/mapdata/models/locations.py:65
#: c3nav/mapdata/utils/locations.py:282 #: c3nav/mapdata/utils/locations.py:300
msgid "Slug" msgid "Slug"
msgstr "Slug" msgstr "Slug"
@ -1791,59 +1803,59 @@ msgstr[1] "%d Kartenupdates verarbeitet."
msgid "Last processed update: %(date)s (#%(id)d)" msgid "Last processed update: %(date)s (#%(id)d)"
msgstr "Letztes verarbeitetes Update: %(date)s (#%(id)d)" msgstr "Letztes verarbeitetes Update: %(date)s (#%(id)d)"
#: c3nav/mapdata/utils/locations.py:280 #: c3nav/mapdata/utils/locations.py:298
msgid "Coordinates" msgid "Coordinates"
msgstr "Koordinaten" msgstr "Koordinaten"
#: c3nav/mapdata/utils/locations.py:301 #: c3nav/mapdata/utils/locations.py:319
msgid "Near Area" msgid "Near Area"
msgstr "Naher Bereich" msgstr "Naher Bereich"
#: c3nav/mapdata/utils/locations.py:307 #: c3nav/mapdata/utils/locations.py:325
msgid "Near POI" msgid "Near POI"
msgstr "Naher POI" msgstr "Naher POI"
#: c3nav/mapdata/utils/locations.py:313 #: c3nav/mapdata/utils/locations.py:331
msgid "X Coordinate" msgid "X Coordinate"
msgstr "X-Koordinate" msgstr "X-Koordinate"
#: c3nav/mapdata/utils/locations.py:314 #: c3nav/mapdata/utils/locations.py:332
msgid "Y Coordinate" msgid "Y Coordinate"
msgstr "Y-Koordinate" msgstr "Y-Koordinate"
#: c3nav/mapdata/utils/locations.py:315 #: c3nav/mapdata/utils/locations.py:333
msgid "Altitude" msgid "Altitude"
msgstr "Höhe" msgstr "Höhe"
#: c3nav/mapdata/utils/locations.py:317 #: c3nav/mapdata/utils/locations.py:335
msgid "Subtitle" msgid "Subtitle"
msgstr "Untertitel" msgstr "Untertitel"
#: c3nav/mapdata/utils/locations.py:349 #: c3nav/mapdata/utils/locations.py:367
msgid "Point" msgid "Point"
msgstr "Punkt" msgstr "Punkt"
#: c3nav/mapdata/utils/locations.py:356 #: c3nav/mapdata/utils/locations.py:374
#, python-format #, python-format
msgid "Point near %(poi)s" msgid "Point near %(poi)s"
msgstr "Punkt nahe %(poi)s" msgstr "Punkt nahe %(poi)s"
#: c3nav/mapdata/utils/locations.py:360 #: c3nav/mapdata/utils/locations.py:378
#, python-format #, python-format
msgid "near %(area)s" msgid "near %(area)s"
msgstr "nahe %(area)s" msgstr "nahe %(area)s"
#: c3nav/mapdata/utils/locations.py:362 #: c3nav/mapdata/utils/locations.py:380
#, python-format #, python-format
msgid "Point in %(area)s" msgid "Point in %(area)s"
msgstr "Punkt innerhalb %(area)s" msgstr "Punkt innerhalb %(area)s"
#: c3nav/mapdata/utils/locations.py:366 #: c3nav/mapdata/utils/locations.py:384
#, python-format #, python-format
msgid "Point near %(area)s" msgid "Point near %(area)s"
msgstr "Punkt nahe %(area)s" msgstr "Punkt nahe %(area)s"
#: c3nav/mapdata/utils/locations.py:368 #: c3nav/mapdata/utils/locations.py:386
#, python-format #, python-format
msgid "Point in %(space)s" msgid "Point in %(space)s"
msgstr "Punkt innerhalb %(space)s" msgstr "Punkt innerhalb %(space)s"

View file

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-20 19:44
from __future__ import unicode_literals
import c3nav.mapdata.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0064_access_permission_unique_key'),
]
operations = [
migrations.CreateModel(
name='AccessRestrictionGroup',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', c3nav.mapdata.fields.I18nField(blank=True, fallback_any=True, fallback_value='{model} {pk}', plural_name='titles', verbose_name='Title')),
],
options={
'verbose_name': 'Access Restriction Group',
'verbose_name_plural': 'Access Restriction Groups',
'default_related_name': 'accessrestrictiongroups',
},
),
migrations.AddField(
model_name='accessrestriction',
name='groups',
field=models.ManyToManyField(blank=True, related_name='accessrestrictions', to='mapdata.AccessRestrictionGroup', verbose_name='Groups'),
),
]

View file

@ -21,6 +21,7 @@ class AccessRestriction(TitledMixin, models.Model):
An access restriction An access restriction
""" """
open = models.BooleanField(default=False, verbose_name=_('open')) open = models.BooleanField(default=False, verbose_name=_('open'))
groups = models.ManyToManyField('mapdata.AccessRestrictionGroup', verbose_name=_('Groups'), blank=True)
class Meta: class Meta:
verbose_name = _('Access Restriction') verbose_name = _('Access Restriction')
@ -38,6 +39,27 @@ class AccessRestriction(TitledMixin, models.Model):
return Q(pk__in=AccessPermission.get_for_request(request)) return Q(pk__in=AccessPermission.get_for_request(request))
class AccessRestrictionGroup(TitledMixin, models.Model):
"""
An access restriction group
"""
class Meta:
verbose_name = _('Access Restriction Group')
verbose_name_plural = _('Access Restriction Groups')
default_related_name = 'accessrestrictiongroups'
@classmethod
def qs_for_request(cls, request):
return cls.objects.filter(cls.q_for_request(request))
@classmethod
def q_for_request(cls, request):
if request.user.is_authenticated and request.user.is_superuser:
return Q()
permissions = AccessPermission.get_for_request(request)
return Q(Q(accessrestrictions=None) | Q(accessrestrictions__pk__in=permissions))
def default_valid_until(): def default_valid_until():
return timezone.now()+timedelta(seconds=20) return timezone.now()+timedelta(seconds=20)