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:
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')
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('WayType'))
urlpatterns.extend(add_editor_urls('AccessRestriction'))
urlpatterns.extend(add_editor_urls('AccessRestrictionGroup'))
urlpatterns.extend(add_editor_urls('Source'))
urlpatterns.extend(add_editor_urls('Building', 'Level'))
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, 'WayType'),
child_model(request, 'AccessRestriction'),
child_model(request, 'AccessRestrictionGroup'),
child_model(request, 'Source'),
],
})

View file

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