list reports
This commit is contained in:
parent
d5086f79c0
commit
96b4a9c41a
8 changed files with 252 additions and 113 deletions
|
@ -14,11 +14,11 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='userpermissions',
|
||||
name='review_all_reports',
|
||||
field=models.BooleanField(default=False, verbose_name='can review reports'),
|
||||
field=models.BooleanField(default=False, verbose_name='can review all reports'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userpermissions',
|
||||
name='review_group_reports',
|
||||
field=models.ManyToManyField(limit_choices_to={'access_restriction': None}, related_name='permissions', to='mapdata.LocationGroup', verbose_name='can review reports belonging to'),
|
||||
field=models.ManyToManyField(blank=True, limit_choices_to={'access_restriction': None}, related_name='permissions', to='mapdata.LocationGroup', verbose_name='can review reports belonging to'),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -30,8 +30,8 @@ class UserPermissions(models.Model):
|
|||
grant_all_access = models.BooleanField(default=False, verbose_name=_('can grant access to everything'))
|
||||
grant_space_access = models.BooleanField(default=False, verbose_name=_('can grant space access'))
|
||||
|
||||
review_all_reports = models.BooleanField(default=False, verbose_name=_('can review reports'))
|
||||
review_group_reports = models.ManyToManyField('mapdata.LocationGroup',
|
||||
review_all_reports = models.BooleanField(default=False, verbose_name=_('can review all reports'))
|
||||
review_group_reports = models.ManyToManyField('mapdata.LocationGroup', blank=True,
|
||||
limit_choices_to={'access_restriction': None},
|
||||
verbose_name=_('can review reports belonging to'))
|
||||
|
||||
|
@ -59,6 +59,10 @@ class UserPermissions(models.Model):
|
|||
return ()
|
||||
return tuple(self.review_group_reports.values_list('pk', flat=True))
|
||||
|
||||
@cached_property
|
||||
def can_review_reports(self):
|
||||
return self.review_all_reports or self.review_group_ids
|
||||
|
||||
@classmethod
|
||||
@contextmanager
|
||||
def lock(cls, pk):
|
||||
|
@ -84,6 +88,8 @@ class UserPermissions(models.Model):
|
|||
result = cls.objects.filter(pk=user.pk).first()
|
||||
if not result:
|
||||
result = cls(user=user, initial=True)
|
||||
# noinspection PyStatementEffect
|
||||
result.review_group_ids
|
||||
cache.set(cache_key, result, 900)
|
||||
return result
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-12-24 17:22+0100\n"
|
||||
"POT-Creation-Date: 2019-12-24 18:42+0100\n"
|
||||
"PO-Revision-Date: 2019-12-22 00:44+0100\n"
|
||||
"Last-Translator: Jenny Danzmayr <mail@evilscientress.at>\n"
|
||||
"Language-Team: \n"
|
||||
|
@ -42,7 +42,7 @@ msgstr "Nich angemeldet."
|
|||
msgid "Logout successful."
|
||||
msgstr "Login erfolgreich."
|
||||
|
||||
#: c3nav/api/models.py:14 c3nav/mapdata/models/report.py:79
|
||||
#: c3nav/api/models.py:14 c3nav/mapdata/models/report.py:84
|
||||
msgid "secret"
|
||||
msgstr "secret"
|
||||
|
||||
|
@ -62,94 +62,94 @@ msgstr "Befugnisse"
|
|||
msgid "Important dates"
|
||||
msgstr "Wichtige Daten"
|
||||
|
||||
#: c3nav/control/forms.py:79
|
||||
#: c3nav/control/forms.py:83
|
||||
msgid "choose permissions…"
|
||||
msgstr "Erlaubnsise auswählen…"
|
||||
|
||||
#: c3nav/control/forms.py:80
|
||||
#: c3nav/control/forms.py:84
|
||||
#, python-format
|
||||
msgid "everything possible (%d permission)"
|
||||
msgid_plural "everything possible (%d permissions)"
|
||||
msgstr[0] "alles mögliche (%d Erlaubnis)"
|
||||
msgstr[1] "alles mögliche (%d Erlaubnisse)"
|
||||
|
||||
#: c3nav/control/forms.py:84
|
||||
#: c3nav/control/forms.py:88
|
||||
msgid "Access Permission Groups"
|
||||
msgstr "Zugangserlaubnisgruppen"
|
||||
|
||||
#: c3nav/control/forms.py:88 c3nav/control/templates/control/access.html:4
|
||||
#: c3nav/control/templates/control/user.html:60
|
||||
#: c3nav/control/forms.py:92 c3nav/control/templates/control/access.html:4
|
||||
#: c3nav/control/templates/control/user.html:64
|
||||
#: c3nav/mapdata/models/access.py:149
|
||||
msgid "Access Permissions"
|
||||
msgstr "Zugangserlaubnisse"
|
||||
|
||||
#: c3nav/control/forms.py:97 c3nav/control/templates/control/user.html:91
|
||||
#: c3nav/control/templates/control/user.html:134
|
||||
#: c3nav/control/forms.py:101 c3nav/control/templates/control/user.html:95
|
||||
#: c3nav/control/templates/control/user.html:138
|
||||
msgid "never"
|
||||
msgstr "nie"
|
||||
|
||||
#: c3nav/control/forms.py:101
|
||||
#: c3nav/control/forms.py:105
|
||||
#, python-format
|
||||
msgid "in %d minute"
|
||||
msgid_plural "in %d minutes"
|
||||
msgstr[0] "in %d Minute"
|
||||
msgstr[1] "in %d Minuten"
|
||||
|
||||
#: c3nav/control/forms.py:105
|
||||
#: c3nav/control/forms.py:109
|
||||
#, python-format
|
||||
msgid "in %d hour"
|
||||
msgid_plural "in %d hours"
|
||||
msgstr[0] "in %d Stunde"
|
||||
msgstr[1] "in %d Stunden"
|
||||
|
||||
#: c3nav/control/forms.py:108
|
||||
#: c3nav/control/forms.py:112
|
||||
msgid "in 1½ hour"
|
||||
msgstr "in 1½ Stunden"
|
||||
|
||||
#: c3nav/control/forms.py:112
|
||||
#: c3nav/control/forms.py:116
|
||||
#, python-format
|
||||
msgid "in %d day"
|
||||
msgid_plural "in %d days"
|
||||
msgstr[0] "in %d Tag"
|
||||
msgstr[1] "in %d Tagen"
|
||||
|
||||
#: c3nav/control/forms.py:119
|
||||
#: c3nav/control/forms.py:123
|
||||
msgid "can pass on"
|
||||
msgstr "kann weitergeben"
|
||||
|
||||
#: c3nav/control/forms.py:252
|
||||
#: c3nav/control/forms.py:256
|
||||
msgid "no"
|
||||
msgstr "nein"
|
||||
|
||||
#: c3nav/control/forms.py:252
|
||||
#: c3nav/control/forms.py:256
|
||||
msgid "yes"
|
||||
msgstr "ja"
|
||||
|
||||
#: c3nav/control/forms.py:272
|
||||
#: c3nav/control/forms.py:276
|
||||
msgid "any type"
|
||||
msgstr "beliebiger Typ"
|
||||
|
||||
#: c3nav/control/forms.py:276 c3nav/control/forms.py:280
|
||||
#: c3nav/control/forms.py:280 c3nav/control/forms.py:284
|
||||
msgid "any"
|
||||
msgstr "beliebig"
|
||||
|
||||
#: c3nav/control/forms.py:276
|
||||
#: c3nav/control/forms.py:280
|
||||
msgid "geometries changed"
|
||||
msgstr "geometrien geändert"
|
||||
|
||||
#: c3nav/control/forms.py:276
|
||||
#: c3nav/control/forms.py:280
|
||||
msgid "no geometries changed"
|
||||
msgstr "keine geometrien geändert"
|
||||
|
||||
#: c3nav/control/forms.py:280
|
||||
#: c3nav/control/forms.py:284
|
||||
msgid "processed"
|
||||
msgstr "verarbeitet"
|
||||
|
||||
#: c3nav/control/forms.py:280
|
||||
#: c3nav/control/forms.py:284
|
||||
msgid "not processed"
|
||||
msgstr "nicht verarbeitet"
|
||||
|
||||
#: c3nav/control/forms.py:287
|
||||
#: c3nav/control/forms.py:291
|
||||
msgid "user id"
|
||||
msgstr "User ID"
|
||||
|
||||
|
@ -197,23 +197,31 @@ msgstr "kann alle Zugangserlaubnisse erteilen"
|
|||
msgid "can grant space access"
|
||||
msgstr "kann Raum-Zugriffsberechtigungen erteilen"
|
||||
|
||||
#: c3nav/control/models.py:32 c3nav/control/templates/control/user.html:30
|
||||
#: c3nav/control/models.py:33
|
||||
msgid "can review all reports"
|
||||
msgstr "kann alle Meldungen überprüfen"
|
||||
|
||||
#: c3nav/control/models.py:36
|
||||
msgid "can review reports belonging to"
|
||||
msgstr "can Meldungen überprüfen die zu diesen Gruppen gehören"
|
||||
|
||||
#: c3nav/control/models.py:38 c3nav/control/templates/control/user.html:34
|
||||
msgid "API secret"
|
||||
msgstr "API secret"
|
||||
|
||||
#: c3nav/control/models.py:35 c3nav/control/models.py:36
|
||||
#: c3nav/control/models.py:41 c3nav/control/models.py:42
|
||||
msgid "User Permissions"
|
||||
msgstr "Benutzerbefugnisse"
|
||||
|
||||
#: c3nav/control/models.py:98 c3nav/control/templates/control/user.html:165
|
||||
#: c3nav/control/models.py:116 c3nav/control/templates/control/user.html:169
|
||||
msgid "can edit"
|
||||
msgstr "kann bearbeiten"
|
||||
|
||||
#: c3nav/control/models.py:101
|
||||
#: c3nav/control/models.py:119
|
||||
msgid "user space access"
|
||||
msgstr "Benutzer-Raumzugrifsberechtigung"
|
||||
|
||||
#: c3nav/control/models.py:102
|
||||
#: c3nav/control/models.py:120
|
||||
msgid "user space accesses"
|
||||
msgstr "Benutzer-Raumzugrifsberechtigungen"
|
||||
|
||||
|
@ -243,7 +251,7 @@ msgid "Edit announcement"
|
|||
msgstr "Ankündigung bearbeiten"
|
||||
|
||||
#: c3nav/control/templates/control/announcement.html:10
|
||||
#: c3nav/control/templates/control/user.html:17
|
||||
#: c3nav/control/templates/control/user.html:21
|
||||
#: c3nav/editor/templates/editor/changeset_edit.html:25
|
||||
#: c3nav/editor/templates/editor/edit.html:32
|
||||
msgid "Save"
|
||||
|
@ -259,6 +267,7 @@ msgstr "Benutzer"
|
|||
#: c3nav/control/templates/control/map_updates.html:59
|
||||
#: c3nav/control/templates/control/users.html:15
|
||||
#: c3nav/mapdata/models/base.py:43 c3nav/mapdata/utils/locations.py:308
|
||||
#: c3nav/site/templates/site/report_list.html:18
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
|
@ -325,23 +334,28 @@ msgid "Map Updates"
|
|||
msgstr "Kartenänderungen"
|
||||
|
||||
#: c3nav/control/templates/control/fragment_pagination.html:5
|
||||
#: c3nav/site/templates/site/fragment_pagination.html:5
|
||||
msgid "first"
|
||||
msgstr "erste"
|
||||
|
||||
#: c3nav/control/templates/control/fragment_pagination.html:8
|
||||
#: c3nav/site/templates/site/fragment_pagination.html:8
|
||||
msgid "previous"
|
||||
msgstr "vorherige"
|
||||
|
||||
#: c3nav/control/templates/control/fragment_pagination.html:12
|
||||
#: c3nav/site/templates/site/fragment_pagination.html:12
|
||||
#, python-format
|
||||
msgid "Page %(page_number)s of %(num_pages)s"
|
||||
msgstr "Seite %(page_number)s von %(num_pages)s"
|
||||
|
||||
#: c3nav/control/templates/control/fragment_pagination.html:16
|
||||
#: c3nav/site/templates/site/fragment_pagination.html:16
|
||||
msgid "next"
|
||||
msgstr "nächste"
|
||||
|
||||
#: c3nav/control/templates/control/fragment_pagination.html:19
|
||||
#: c3nav/site/templates/site/fragment_pagination.html:19
|
||||
msgid "last"
|
||||
msgstr "letzte"
|
||||
|
||||
|
@ -432,9 +446,9 @@ msgstr ""
|
|||
|
||||
#: c3nav/control/templates/control/map_updates.html:89
|
||||
#: c3nav/control/templates/control/map_updates.html:96
|
||||
#: c3nav/control/templates/control/user.html:97
|
||||
#: c3nav/control/templates/control/user.html:140
|
||||
#: c3nav/control/templates/control/user.html:173
|
||||
#: c3nav/control/templates/control/user.html:101
|
||||
#: c3nav/control/templates/control/user.html:144
|
||||
#: c3nav/control/templates/control/user.html:177
|
||||
#: c3nav/mapdata/models/geometry/level.py:142
|
||||
#: c3nav/mapdata/models/locations.py:122 c3nav/mapdata/models/locations.py:123
|
||||
msgid "Yes"
|
||||
|
@ -442,9 +456,9 @@ msgstr "Ja"
|
|||
|
||||
#: c3nav/control/templates/control/map_updates.html:91
|
||||
#: c3nav/control/templates/control/map_updates.html:98
|
||||
#: c3nav/control/templates/control/user.html:99
|
||||
#: c3nav/control/templates/control/user.html:142
|
||||
#: c3nav/control/templates/control/user.html:175
|
||||
#: c3nav/control/templates/control/user.html:103
|
||||
#: c3nav/control/templates/control/user.html:146
|
||||
#: c3nav/control/templates/control/user.html:179
|
||||
#: c3nav/mapdata/models/geometry/level.py:142
|
||||
#: c3nav/mapdata/models/locations.py:122 c3nav/mapdata/models/locations.py:123
|
||||
msgid "No"
|
||||
|
@ -458,103 +472,103 @@ msgstr "im django Admin Panel zeigen"
|
|||
msgid "General Permissions"
|
||||
msgstr "Generelle Befugnisse"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:24
|
||||
#: c3nav/control/templates/control/user.html:111
|
||||
#: c3nav/control/templates/control/user.html:151
|
||||
#: c3nav/control/templates/control/user.html:28
|
||||
#: c3nav/control/templates/control/user.html:115
|
||||
#: c3nav/control/templates/control/user.html:155
|
||||
msgid "none"
|
||||
msgstr "keine"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:34
|
||||
#: c3nav/control/templates/control/user.html:38
|
||||
msgid "This user has an API secret."
|
||||
msgstr "Dieser Benutzer hat ein API Secret."
|
||||
|
||||
#: c3nav/control/templates/control/user.html:36
|
||||
#: c3nav/control/templates/control/user.html:40
|
||||
msgid "You have an API secret."
|
||||
msgstr "Du hast ein API Secret."
|
||||
|
||||
#: c3nav/control/templates/control/user.html:38
|
||||
#: c3nav/control/templates/control/user.html:42
|
||||
msgid "You can not see it, but generate a new one."
|
||||
msgstr "Du kannst es nich sehen, aber ein neues generieren."
|
||||
|
||||
#: c3nav/control/templates/control/user.html:40
|
||||
#: c3nav/control/templates/control/user.html:44
|
||||
msgid "This user has not an API secret."
|
||||
msgstr "Dieser Benutzer hat kein API Secret."
|
||||
|
||||
#: c3nav/control/templates/control/user.html:41
|
||||
#: c3nav/control/templates/control/user.html:45
|
||||
msgid "You can create one."
|
||||
msgstr "Du kannst eins erstellen."
|
||||
|
||||
#: c3nav/control/templates/control/user.html:49
|
||||
#: c3nav/control/templates/control/user.html:53
|
||||
msgid "Regenerate API secret"
|
||||
msgstr "API Secret neu generieren"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:50
|
||||
#: c3nav/control/templates/control/user.html:54
|
||||
msgid "Delete API secret"
|
||||
msgstr "API Secret löschen"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:52
|
||||
#: c3nav/control/templates/control/user.html:56
|
||||
msgid "Generate API secret"
|
||||
msgstr "API Secret generieren"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:55
|
||||
#: c3nav/control/templates/control/user.html:59
|
||||
msgid "Update API secret"
|
||||
msgstr "API Secret updaten"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:64
|
||||
#: c3nav/control/templates/control/user.html:68
|
||||
#, python-format
|
||||
msgid "for %(restriction_title)s"
|
||||
msgstr "für %(restriction_title)s"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:66
|
||||
#: c3nav/control/templates/control/user.html:70
|
||||
#: c3nav/editor/templates/editor/account_form.html:11
|
||||
#: c3nav/site/templates/site/account_form.html:12
|
||||
#: c3nav/site/templates/site/confirm.html:19
|
||||
msgid "back"
|
||||
msgstr "zurück"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:73
|
||||
#: c3nav/control/templates/control/user.html:77
|
||||
#: c3nav/mapdata/models/access.py:77 c3nav/mapdata/models/geometry/space.py:385
|
||||
#: c3nav/mapdata/models/report.py:58 c3nav/mapdata/models/report.py:109
|
||||
#: c3nav/mapdata/models/report.py:63 c3nav/mapdata/models/report.py:150
|
||||
#: c3nav/site/models.py:17
|
||||
msgid "author"
|
||||
msgstr "Autor"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:74
|
||||
#: c3nav/control/templates/control/user.html:122
|
||||
#: c3nav/control/templates/control/user.html:78
|
||||
#: c3nav/control/templates/control/user.html:126
|
||||
#: c3nav/mapdata/models/access.py:139
|
||||
msgid "expires"
|
||||
msgstr "läuft ab"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:75
|
||||
#: c3nav/control/templates/control/user.html:123
|
||||
#: c3nav/control/templates/control/user.html:79
|
||||
#: c3nav/control/templates/control/user.html:127
|
||||
#: c3nav/mapdata/models/access.py:82 c3nav/mapdata/models/access.py:140
|
||||
msgid "can grant"
|
||||
msgstr "kann erteilen"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:76
|
||||
#: c3nav/control/templates/control/user.html:80
|
||||
msgid "key"
|
||||
msgstr "key"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:104
|
||||
#: c3nav/control/templates/control/user.html:179
|
||||
#: c3nav/control/templates/control/user.html:108
|
||||
#: c3nav/control/templates/control/user.html:183
|
||||
#: 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:114
|
||||
#: c3nav/control/templates/control/user.html:197
|
||||
#: c3nav/control/templates/control/user.html:118
|
||||
#: c3nav/control/templates/control/user.html:201
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:121
|
||||
#: c3nav/control/templates/control/user.html:125
|
||||
#: c3nav/mapdata/models/access.py:27 c3nav/mapdata/models/access.py:243
|
||||
#: c3nav/mapdata/models/access.py:256
|
||||
msgid "Access Restriction"
|
||||
msgstr "Zugangsbeschränkung"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:145
|
||||
#: c3nav/control/templates/control/user.html:149
|
||||
#: c3nav/editor/templates/editor/fragment_changesets.html:10
|
||||
#: c3nav/editor/templates/editor/list.html:26
|
||||
#: c3nav/site/templates/site/map.html:100
|
||||
|
@ -564,11 +578,11 @@ msgstr "Zugangsbeschränkung"
|
|||
msgid "Details"
|
||||
msgstr "Details"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:157
|
||||
#: c3nav/control/templates/control/user.html:161
|
||||
msgid "Space Access"
|
||||
msgstr "Raumzugriffserlaubnis"
|
||||
|
||||
#: c3nav/control/templates/control/user.html:164
|
||||
#: c3nav/control/templates/control/user.html:168
|
||||
#: c3nav/editor/templates/editor/space.html:9
|
||||
#: c3nav/mapdata/models/geometry/level.py:124
|
||||
#: c3nav/mapdata/models/geometry/space.py:81
|
||||
|
@ -789,7 +803,7 @@ msgid "Change Set"
|
|||
msgstr "Änderungsset"
|
||||
|
||||
#: c3nav/editor/models/changedobject.py:35 c3nav/editor/models/changeset.py:39
|
||||
#: c3nav/editor/views/changes.py:266 c3nav/mapdata/models/report.py:56
|
||||
#: c3nav/editor/views/changes.py:266 c3nav/mapdata/models/report.py:61
|
||||
#: c3nav/site/models.py:14 c3nav/site/models.py:54
|
||||
msgid "created"
|
||||
msgstr "erstellt"
|
||||
|
@ -865,6 +879,7 @@ msgstr "letzte Statusänderung"
|
|||
#: c3nav/editor/models/changeset.py:48 c3nav/mapdata/models/base.py:64
|
||||
#: c3nav/mapdata/models/graph.py:38 c3nav/mapdata/models/locations.py:256
|
||||
#: c3nav/mapdata/models/locations.py:423 c3nav/mapdata/utils/locations.py:344
|
||||
#: c3nav/site/templates/site/report_list.html:19
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
|
@ -872,8 +887,8 @@ msgstr "Titel"
|
|||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
#: c3nav/editor/models/changeset.py:51 c3nav/mapdata/models/report.py:66
|
||||
#: c3nav/mapdata/models/report.py:113
|
||||
#: c3nav/editor/models/changeset.py:51 c3nav/mapdata/models/report.py:71
|
||||
#: c3nav/mapdata/models/report.py:154
|
||||
msgid "assigned to"
|
||||
msgstr "zugewiesen"
|
||||
|
||||
|
@ -900,7 +915,7 @@ msgid_plural "%(num)d objects changed"
|
|||
msgstr[0] "%(num)d Objekt geändert"
|
||||
msgstr[1] "%(num)d Objekte geändert"
|
||||
|
||||
#: c3nav/editor/models/changesetupdate.py:12 c3nav/mapdata/models/report.py:108
|
||||
#: c3nav/editor/models/changesetupdate.py:12 c3nav/mapdata/models/report.py:149
|
||||
msgid "datetime"
|
||||
msgstr "Zeitpunkt"
|
||||
|
||||
|
@ -1147,7 +1162,7 @@ msgid "close dialog"
|
|||
msgstr "Dialog schließen"
|
||||
|
||||
#: c3nav/editor/templates/editor/fragment_nav.html:21
|
||||
#: c3nav/site/templates/site/account.html:28
|
||||
#: c3nav/site/templates/site/account.html:38
|
||||
msgid "Log out"
|
||||
msgstr "Abmelden"
|
||||
|
||||
|
@ -1279,7 +1294,7 @@ msgid "Activate direct editing"
|
|||
msgstr "Direktes Bearbeiten aktivieren"
|
||||
|
||||
#: c3nav/editor/templates/editor/user.html:54 c3nav/editor/views/account.py:85
|
||||
#: c3nav/site/templates/site/account.html:29 c3nav/site/views.py:297
|
||||
#: c3nav/site/templates/site/account.html:39 c3nav/site/views.py:297
|
||||
msgid "Change password"
|
||||
msgstr "Passwort ändern"
|
||||
|
||||
|
@ -1681,9 +1696,10 @@ msgstr "Werte zurücksetzen"
|
|||
msgid "save result to the stats directory"
|
||||
msgstr "Ergebnis im stats-Ordner speichern"
|
||||
|
||||
#: c3nav/mapdata/models/access.py:23 c3nav/mapdata/models/report.py:59
|
||||
#: c3nav/mapdata/models/report.py:110
|
||||
#: c3nav/site/templates/site/report_detail.html:9
|
||||
#: c3nav/mapdata/models/access.py:23 c3nav/mapdata/models/report.py:64
|
||||
#: c3nav/mapdata/models/report.py:151
|
||||
#: c3nav/site/templates/site/report_detail.html:10
|
||||
#: c3nav/site/templates/site/report_list.html:28
|
||||
msgid "open"
|
||||
msgstr "offen"
|
||||
|
||||
|
@ -1980,7 +1996,7 @@ msgstr "Zielraum"
|
|||
|
||||
#: c3nav/mapdata/models/geometry/space.py:308
|
||||
#: c3nav/mapdata/models/geometry/space.py:347 c3nav/mapdata/models/graph.py:48
|
||||
#: c3nav/mapdata/models/report.py:63
|
||||
#: c3nav/mapdata/models/report.py:68
|
||||
msgid "description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
|
@ -2005,7 +2021,7 @@ msgid "Cross descriptions"
|
|||
msgstr "Durchschreitungsbeschreibungen"
|
||||
|
||||
#: c3nav/mapdata/models/geometry/space.py:386
|
||||
#: c3nav/mapdata/models/report.py:111
|
||||
#: c3nav/mapdata/models/report.py:152
|
||||
msgid "comment"
|
||||
msgstr "Kommentar"
|
||||
|
||||
|
@ -2301,92 +2317,92 @@ msgstr "Schriftgröße"
|
|||
msgid "Label Settings"
|
||||
msgstr "Labeleinstellungen"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:52
|
||||
#: c3nav/mapdata/models/report.py:57
|
||||
msgid "location issue"
|
||||
msgstr "Ortfehler"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:53
|
||||
#: c3nav/mapdata/models/report.py:58
|
||||
msgid "missing location"
|
||||
msgstr "fehlender Ort"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:54
|
||||
#: c3nav/mapdata/models/report.py:59
|
||||
msgid "route issue"
|
||||
msgstr "Routenfehler"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:57
|
||||
#: c3nav/mapdata/models/report.py:62
|
||||
msgid "category"
|
||||
msgstr "Kategorie"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:60
|
||||
#: c3nav/mapdata/models/report.py:65
|
||||
msgid "last_update"
|
||||
msgstr "letzte Anderung"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:61
|
||||
#: c3nav/mapdata/models/report.py:66
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:62
|
||||
#: c3nav/mapdata/models/report.py:67
|
||||
msgid "a short title for your report"
|
||||
msgstr "ein kurzer Titel für deine Meldung"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:64
|
||||
#: c3nav/mapdata/models/report.py:69
|
||||
msgid "tell us precisely what's wrong"
|
||||
msgstr "Sag uns im Detail was falsch ist"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:68
|
||||
#: c3nav/mapdata/models/report.py:73
|
||||
msgid "location"
|
||||
msgstr "Ort"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:69
|
||||
#: c3nav/mapdata/models/report.py:74
|
||||
msgid "coordinates"
|
||||
msgstr "Koordinaten"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:70
|
||||
#: c3nav/mapdata/models/report.py:75
|
||||
msgid "origin"
|
||||
msgstr "Start"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:71
|
||||
#: c3nav/mapdata/models/report.py:76
|
||||
msgid "destination"
|
||||
msgstr "Ziel"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:72
|
||||
#: c3nav/mapdata/models/report.py:77
|
||||
msgid "route options"
|
||||
msgstr "Routenoptionen"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:74
|
||||
#: c3nav/mapdata/models/report.py:79
|
||||
msgid "new location title"
|
||||
msgstr "Neuer Ortstitel"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:75
|
||||
#: c3nav/mapdata/models/report.py:80
|
||||
msgid "you have to supply a title in at least one language"
|
||||
msgstr "Du musst einen Titel in mindestens einer Sprache angeben"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:76
|
||||
#: c3nav/mapdata/models/report.py:81
|
||||
msgid "location groups"
|
||||
msgstr "Ortgruppen"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:78
|
||||
#: c3nav/mapdata/models/report.py:83
|
||||
msgid "select all groups that apply, if any"
|
||||
msgstr ""
|
||||
|
||||
#: c3nav/mapdata/models/report.py:86
|
||||
#: c3nav/site/templates/site/report_detail.html:6
|
||||
#: c3nav/mapdata/models/report.py:91
|
||||
#: c3nav/site/templates/site/report_detail.html:7
|
||||
msgid "Report"
|
||||
msgstr "Meldung"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:87
|
||||
#: c3nav/mapdata/models/report.py:92
|
||||
msgid "Reports"
|
||||
msgstr "Meldungen"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:114
|
||||
#: c3nav/mapdata/models/report.py:155
|
||||
msgid "public"
|
||||
msgstr "öffentlich"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:117
|
||||
#: c3nav/mapdata/models/report.py:158
|
||||
msgid "Report update"
|
||||
msgstr "Meldungsupdate"
|
||||
|
||||
#: c3nav/mapdata/models/report.py:118
|
||||
#: c3nav/mapdata/models/report.py:159
|
||||
msgid "Report updates"
|
||||
msgstr "Meldungsupdates"
|
||||
|
||||
|
@ -2762,6 +2778,14 @@ msgstr "Du bist angemeldet als <strong>%(username)s</strong>."
|
|||
msgid "You can access the control panel."
|
||||
msgstr "Du kannst das Control Panel betreten."
|
||||
|
||||
#: c3nav/site/templates/site/account.html:29
|
||||
msgid "You can review reports"
|
||||
msgstr "Du kannst Meldungen überprüfen"
|
||||
|
||||
#: c3nav/site/templates/site/account.html:32
|
||||
msgid "Show reports"
|
||||
msgstr "Meldungen anzeigen"
|
||||
|
||||
#: c3nav/site/templates/site/fragment_report_meta.html:3
|
||||
msgid "You are reporting an issue with the following location:"
|
||||
msgstr "Du meldest einen Fehler beim folgenden Ort:"
|
||||
|
@ -2898,22 +2922,43 @@ msgstr "in c3nav öffnen"
|
|||
msgid "Submit"
|
||||
msgstr "Absenden"
|
||||
|
||||
#: c3nav/site/templates/site/report_detail.html:11
|
||||
#: c3nav/site/templates/site/report_detail.html:12
|
||||
#: c3nav/site/templates/site/report_list.html:30
|
||||
msgid "closed"
|
||||
msgstr "geschlossen"
|
||||
|
||||
#: c3nav/site/templates/site/report_detail.html:15
|
||||
msgid "anonymous submission"
|
||||
msgstr "anonyme Meldung"
|
||||
|
||||
#: c3nav/site/templates/site/report_detail.html:17
|
||||
#: c3nav/site/templates/site/report_detail.html:16
|
||||
msgid "by"
|
||||
msgstr "von"
|
||||
|
||||
#: c3nav/site/templates/site/report_detail.html:18
|
||||
msgid "anonymous submission"
|
||||
msgstr "anonyme Meldung"
|
||||
|
||||
#: c3nav/site/templates/site/report_detail.html:35
|
||||
msgid "(none)"
|
||||
msgstr "(keine)"
|
||||
|
||||
#: c3nav/site/templates/site/report_list.html:8
|
||||
msgid "Open reports"
|
||||
msgstr "Offene Meldungen"
|
||||
|
||||
#: c3nav/site/templates/site/report_list.html:9
|
||||
msgid "show all reports"
|
||||
msgstr "alle Meldungen anzeigen"
|
||||
|
||||
#: c3nav/site/templates/site/report_list.html:11
|
||||
msgid "All reports"
|
||||
msgstr "Alle Meldungen"
|
||||
|
||||
#: c3nav/site/templates/site/report_list.html:12
|
||||
msgid "show open reports"
|
||||
msgstr "offene Meldungen anzeigen"
|
||||
|
||||
#: c3nav/site/templates/site/report_list.html:20
|
||||
msgid "State"
|
||||
msgstr "Status"
|
||||
|
||||
#: c3nav/site/views.py:76 c3nav/site/views.py:323
|
||||
msgid "You need to log in to unlock areas."
|
||||
msgstr "Du musst dich anmelden um Bereiche freizuschalten."
|
||||
|
@ -2945,7 +2990,7 @@ msgstr[1] "Du wurdest eingeladen, die folgenden Bereiche freizuschalten:"
|
|||
|
||||
#: c3nav/site/views.py:408
|
||||
msgid "Your report was submitted."
|
||||
msgstr "Deine Meldiung wurde abgesendet."
|
||||
msgstr "Deine Meldung wurde abgesendet."
|
||||
|
||||
#: c3nav/site/views.py:411
|
||||
msgid "You can keep track of it from your user dashboard."
|
||||
|
|
|
@ -23,6 +23,16 @@
|
|||
</p>
|
||||
{% endif %}
|
||||
|
||||
{% if request.user_permissions.can_review_reports %}
|
||||
<hr>
|
||||
<p>
|
||||
{% trans 'You can review reports' %}
|
||||
</p>
|
||||
<p>
|
||||
<a class="button" href="{% url 'site.report_list' %}">{% trans 'Show reports' %}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<hr>
|
||||
<p>
|
||||
<a class="button" href="{% url 'site.logout' %}">{% trans 'Log out' %}</a>
|
||||
|
|
22
src/c3nav/site/templates/site/fragment_pagination.html
Normal file
22
src/c3nav/site/templates/site/fragment_pagination.html
Normal file
|
@ -0,0 +1,22 @@
|
|||
{% load i18n %}
|
||||
<p>
|
||||
{% if objects.has_previous %}
|
||||
<a href="?{% if request.GET.s %}s={{ request.GET.s | urlencode }}&{% endif %}page=1">
|
||||
« {% trans 'first' %}
|
||||
</a> ·
|
||||
<a href="?{% if request.GET.s %}s={{ request.GET.s | urlencode }}&{% endif %}page={{ objects.previous_page_number }}">
|
||||
‹ {% trans 'previous' %}
|
||||
</a> ·
|
||||
{% endif %}
|
||||
{% with page_number=objects.number num_pages=objects.paginator.num_pages %}
|
||||
{% blocktrans %}Page {{ page_number }} of {{ num_pages }}{% endblocktrans %}
|
||||
{% endwith %}
|
||||
{% if objects.has_next %}
|
||||
· <a href="?{% if request.GET.s %}s={{ request.GET.s | urlencode }}&{% endif %}page={{ objects.next_page_number }}">
|
||||
{% trans 'next' %} ›
|
||||
</a>
|
||||
· <a href="?{% if request.GET.s %}s={{ request.GET.s | urlencode }}&{% endif %}page={{ objects.paginator.num_pages }}">
|
||||
{% trans 'last' %} »
|
||||
</a>
|
||||
{% endif %}
|
||||
</p>
|
38
src/c3nav/site/templates/site/report_list.html
Normal file
38
src/c3nav/site/templates/site/report_list.html
Normal file
|
@ -0,0 +1,38 @@
|
|||
{% extends 'site/base.html' %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
<main class="account">
|
||||
{% include 'site/fragment_messages.html' %}
|
||||
{% if filter == 'open' %}
|
||||
<h2>{% trans 'Open reports' %}</h2>
|
||||
<p><a href="{% url 'site.report_list' filter='all' %}">{% trans 'show all reports' %}</a></p>
|
||||
{% else %}
|
||||
<h2>{% trans 'All reports' %}</h2>
|
||||
<p><a href="{% url 'site.report_list' filter='all' %}">{% trans 'show open reports' %}</a></p>
|
||||
{% endif %}
|
||||
|
||||
{% include 'site/fragment_pagination.html' with objects=reports %}
|
||||
<table>
|
||||
<tr>
|
||||
<th>{% trans 'ID' %}</th>
|
||||
<th>{% trans 'Title' %}</th>
|
||||
<th>{% trans 'State' %}</th>
|
||||
</tr>
|
||||
{% for report in reports %}
|
||||
<tr>
|
||||
<td>{{ report.pk }}</td>
|
||||
<td><a href="{% url 'site.report_detail' pk=report.pk %}">{{ report.title }}</a></td>
|
||||
<td>
|
||||
{% if report.open %}
|
||||
<strong class="green">{% trans 'open' %}</strong>
|
||||
{% else %}
|
||||
<strong class="red">{% trans 'closed' %}</strong>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% include 'site/fragment_pagination.html' with objects=reports %}
|
||||
</main>
|
||||
{% endblock %}
|
|
@ -1,7 +1,8 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from c3nav.site.views import (about_view, access_redeem_view, account_view, change_password_view, choose_language,
|
||||
login_view, logout_view, map_index, qr_code, register_view, report_create, report_detail)
|
||||
login_view, logout_view, map_index, qr_code, register_view, report_create, report_detail,
|
||||
report_list)
|
||||
|
||||
slug = r'(?P<slug>[a-z0-9-_.:]+)'
|
||||
coordinates = r'(?P<coordinates>[a-z0-9-_:]+:-?\d+(\.\d+)?:-?\d+(\.\d+)?)'
|
||||
|
@ -26,9 +27,9 @@ urlpatterns = [
|
|||
url(r'^access/(?P<token>[^/]+)$', access_redeem_view, name='site.access.redeem'),
|
||||
url(r'^lang/$', choose_language, name='site.language'),
|
||||
url(r'^about/$', about_view, name='site.about'),
|
||||
url(r'^report/$', about_view, name='site.about'),
|
||||
url(r'^report/(?P<pk>\d+)/$', report_detail, name='site.report_detail'),
|
||||
url(r'^report/(?P<pk>\d+)/(?P<secret>[^/]+)/$', report_detail, name='site.report_detail'),
|
||||
url(r'^reports/(?P<filter>(open|all))/$', report_list, name='site.report_list'),
|
||||
url(r'^reports/(?P<pk>\d+)/$', report_detail, name='site.report_detail'),
|
||||
url(r'^reports/(?P<pk>\d+)/(?P<secret>[^/]+)/$', report_detail, name='site.report_detail'),
|
||||
url(r'^report/l/%s/$' % coordinates, report_create, name='site.report_create'),
|
||||
url(r'^report/l/(?P<location>\d+)/$', report_create, name='site.report_create'),
|
||||
url(r'^report/r/(?P<origin>[^/]+)/(?P<destination>[^/]+)/(?P<options>[^/]+)/$',
|
||||
|
|
|
@ -10,6 +10,7 @@ from django.contrib.auth.decorators import login_required
|
|||
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm, UserCreationForm
|
||||
from django.contrib.auth.views import redirect_to_login
|
||||
from django.core.exceptions import ObjectDoesNotExist, SuspiciousOperation
|
||||
from django.core.paginator import Paginator
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.db import transaction
|
||||
from django.http import Http404, HttpResponse, HttpResponseBadRequest
|
||||
|
@ -423,6 +424,22 @@ def report_create(request, coordinates=None, location=None, origin=None, destina
|
|||
})
|
||||
|
||||
|
||||
def report_list(request, filter):
|
||||
page = request.GET.get('page', 1)
|
||||
|
||||
queryset = Report.qs_for_request(request).order_by('-created').select_related('author')
|
||||
if filter == 'open':
|
||||
queryset.filter(open=True)
|
||||
|
||||
paginator = Paginator(queryset, 20)
|
||||
reports = paginator.page(page)
|
||||
|
||||
return render(request, 'site/report_list.html', {
|
||||
'filter': filter,
|
||||
'reports': reports,
|
||||
})
|
||||
|
||||
|
||||
def report_detail(request, pk, secret=None):
|
||||
if secret:
|
||||
qs = Report.objects.filter(secret=secret)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue