list reports

This commit is contained in:
Laura Klünder 2019-12-24 18:44:30 +01:00
parent d5086f79c0
commit 96b4a9c41a
8 changed files with 252 additions and 113 deletions

View file

@ -14,11 +14,11 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='userpermissions', model_name='userpermissions',
name='review_all_reports', 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( migrations.AddField(
model_name='userpermissions', model_name='userpermissions',
name='review_group_reports', 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'),
), ),
] ]

View file

@ -30,8 +30,8 @@ class UserPermissions(models.Model):
grant_all_access = models.BooleanField(default=False, verbose_name=_('can grant access to everything')) 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')) 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_all_reports = models.BooleanField(default=False, verbose_name=_('can review all reports'))
review_group_reports = models.ManyToManyField('mapdata.LocationGroup', review_group_reports = models.ManyToManyField('mapdata.LocationGroup', blank=True,
limit_choices_to={'access_restriction': None}, limit_choices_to={'access_restriction': None},
verbose_name=_('can review reports belonging to')) verbose_name=_('can review reports belonging to'))
@ -59,6 +59,10 @@ class UserPermissions(models.Model):
return () return ()
return tuple(self.review_group_reports.values_list('pk', flat=True)) 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 @classmethod
@contextmanager @contextmanager
def lock(cls, pk): def lock(cls, pk):
@ -84,6 +88,8 @@ class UserPermissions(models.Model):
result = cls.objects.filter(pk=user.pk).first() result = cls.objects.filter(pk=user.pk).first()
if not result: if not result:
result = cls(user=user, initial=True) result = cls(user=user, initial=True)
# noinspection PyStatementEffect
result.review_group_ids
cache.set(cache_key, result, 900) cache.set(cache_key, result, 900)
return result return result

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2019-12-22 00:44+0100\n"
"Last-Translator: Jenny Danzmayr <mail@evilscientress.at>\n" "Last-Translator: Jenny Danzmayr <mail@evilscientress.at>\n"
"Language-Team: \n" "Language-Team: \n"
@ -42,7 +42,7 @@ msgstr "Nich angemeldet."
msgid "Logout successful." msgid "Logout successful."
msgstr "Login erfolgreich." 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" msgid "secret"
msgstr "secret" msgstr "secret"
@ -62,94 +62,94 @@ msgstr "Befugnisse"
msgid "Important dates" msgid "Important dates"
msgstr "Wichtige Daten" msgstr "Wichtige Daten"
#: c3nav/control/forms.py:79 #: c3nav/control/forms.py:83
msgid "choose permissions…" msgid "choose permissions…"
msgstr "Erlaubnsise auswählen…" msgstr "Erlaubnsise auswählen…"
#: c3nav/control/forms.py:80 #: c3nav/control/forms.py:84
#, python-format #, python-format
msgid "everything possible (%d permission)" msgid "everything possible (%d permission)"
msgid_plural "everything possible (%d permissions)" msgid_plural "everything possible (%d permissions)"
msgstr[0] "alles mögliche (%d Erlaubnis)" msgstr[0] "alles mögliche (%d Erlaubnis)"
msgstr[1] "alles mögliche (%d Erlaubnisse)" msgstr[1] "alles mögliche (%d Erlaubnisse)"
#: c3nav/control/forms.py:84 #: c3nav/control/forms.py:88
msgid "Access Permission Groups" msgid "Access Permission Groups"
msgstr "Zugangserlaubnisgruppen" msgstr "Zugangserlaubnisgruppen"
#: c3nav/control/forms.py:88 c3nav/control/templates/control/access.html:4 #: c3nav/control/forms.py:92 c3nav/control/templates/control/access.html:4
#: c3nav/control/templates/control/user.html:60 #: c3nav/control/templates/control/user.html:64
#: c3nav/mapdata/models/access.py:149 #: c3nav/mapdata/models/access.py:149
msgid "Access Permissions" msgid "Access Permissions"
msgstr "Zugangserlaubnisse" msgstr "Zugangserlaubnisse"
#: c3nav/control/forms.py:97 c3nav/control/templates/control/user.html:91 #: c3nav/control/forms.py:101 c3nav/control/templates/control/user.html:95
#: c3nav/control/templates/control/user.html:134 #: c3nav/control/templates/control/user.html:138
msgid "never" msgid "never"
msgstr "nie" msgstr "nie"
#: c3nav/control/forms.py:101 #: c3nav/control/forms.py:105
#, python-format #, python-format
msgid "in %d minute" msgid "in %d minute"
msgid_plural "in %d minutes" msgid_plural "in %d minutes"
msgstr[0] "in %d Minute" msgstr[0] "in %d Minute"
msgstr[1] "in %d Minuten" msgstr[1] "in %d Minuten"
#: c3nav/control/forms.py:105 #: c3nav/control/forms.py:109
#, python-format #, python-format
msgid "in %d hour" msgid "in %d hour"
msgid_plural "in %d hours" msgid_plural "in %d hours"
msgstr[0] "in %d Stunde" msgstr[0] "in %d Stunde"
msgstr[1] "in %d Stunden" msgstr[1] "in %d Stunden"
#: c3nav/control/forms.py:108 #: c3nav/control/forms.py:112
msgid "in 1½ hour" msgid "in 1½ hour"
msgstr "in 1½ Stunden" msgstr "in 1½ Stunden"
#: c3nav/control/forms.py:112 #: c3nav/control/forms.py:116
#, python-format #, python-format
msgid "in %d day" msgid "in %d day"
msgid_plural "in %d days" msgid_plural "in %d days"
msgstr[0] "in %d Tag" msgstr[0] "in %d Tag"
msgstr[1] "in %d Tagen" msgstr[1] "in %d Tagen"
#: c3nav/control/forms.py:119 #: c3nav/control/forms.py:123
msgid "can pass on" msgid "can pass on"
msgstr "kann weitergeben" msgstr "kann weitergeben"
#: c3nav/control/forms.py:252 #: c3nav/control/forms.py:256
msgid "no" msgid "no"
msgstr "nein" msgstr "nein"
#: c3nav/control/forms.py:252 #: c3nav/control/forms.py:256
msgid "yes" msgid "yes"
msgstr "ja" msgstr "ja"
#: c3nav/control/forms.py:272 #: c3nav/control/forms.py:276
msgid "any type" msgid "any type"
msgstr "beliebiger Typ" 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" msgid "any"
msgstr "beliebig" msgstr "beliebig"
#: c3nav/control/forms.py:276 #: c3nav/control/forms.py:280
msgid "geometries changed" msgid "geometries changed"
msgstr "geometrien geändert" msgstr "geometrien geändert"
#: c3nav/control/forms.py:276 #: c3nav/control/forms.py:280
msgid "no geometries changed" msgid "no geometries changed"
msgstr "keine geometrien geändert" msgstr "keine geometrien geändert"
#: c3nav/control/forms.py:280 #: c3nav/control/forms.py:284
msgid "processed" msgid "processed"
msgstr "verarbeitet" msgstr "verarbeitet"
#: c3nav/control/forms.py:280 #: c3nav/control/forms.py:284
msgid "not processed" msgid "not processed"
msgstr "nicht verarbeitet" msgstr "nicht verarbeitet"
#: c3nav/control/forms.py:287 #: c3nav/control/forms.py:291
msgid "user id" msgid "user id"
msgstr "User ID" msgstr "User ID"
@ -197,23 +197,31 @@ msgstr "kann alle Zugangserlaubnisse erteilen"
msgid "can grant space access" msgid "can grant space access"
msgstr "kann Raum-Zugriffsberechtigungen erteilen" 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" msgid "API secret"
msgstr "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" msgid "User Permissions"
msgstr "Benutzerbefugnisse" 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" msgid "can edit"
msgstr "kann bearbeiten" msgstr "kann bearbeiten"
#: c3nav/control/models.py:101 #: c3nav/control/models.py:119
msgid "user space access" msgid "user space access"
msgstr "Benutzer-Raumzugrifsberechtigung" msgstr "Benutzer-Raumzugrifsberechtigung"
#: c3nav/control/models.py:102 #: c3nav/control/models.py:120
msgid "user space accesses" msgid "user space accesses"
msgstr "Benutzer-Raumzugrifsberechtigungen" msgstr "Benutzer-Raumzugrifsberechtigungen"
@ -243,7 +251,7 @@ msgid "Edit announcement"
msgstr "Ankündigung bearbeiten" msgstr "Ankündigung bearbeiten"
#: c3nav/control/templates/control/announcement.html:10 #: 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/changeset_edit.html:25
#: c3nav/editor/templates/editor/edit.html:32 #: c3nav/editor/templates/editor/edit.html:32
msgid "Save" msgid "Save"
@ -259,6 +267,7 @@ msgstr "Benutzer"
#: c3nav/control/templates/control/map_updates.html:59 #: c3nav/control/templates/control/map_updates.html:59
#: c3nav/control/templates/control/users.html:15 #: c3nav/control/templates/control/users.html:15
#: c3nav/mapdata/models/base.py:43 c3nav/mapdata/utils/locations.py:308 #: c3nav/mapdata/models/base.py:43 c3nav/mapdata/utils/locations.py:308
#: c3nav/site/templates/site/report_list.html:18
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
@ -325,23 +334,28 @@ msgid "Map Updates"
msgstr "Kartenänderungen" msgstr "Kartenänderungen"
#: c3nav/control/templates/control/fragment_pagination.html:5 #: c3nav/control/templates/control/fragment_pagination.html:5
#: c3nav/site/templates/site/fragment_pagination.html:5
msgid "first" msgid "first"
msgstr "erste" msgstr "erste"
#: c3nav/control/templates/control/fragment_pagination.html:8 #: c3nav/control/templates/control/fragment_pagination.html:8
#: c3nav/site/templates/site/fragment_pagination.html:8
msgid "previous" msgid "previous"
msgstr "vorherige" msgstr "vorherige"
#: c3nav/control/templates/control/fragment_pagination.html:12 #: c3nav/control/templates/control/fragment_pagination.html:12
#: c3nav/site/templates/site/fragment_pagination.html:12
#, python-format #, python-format
msgid "Page %(page_number)s of %(num_pages)s" msgid "Page %(page_number)s of %(num_pages)s"
msgstr "Seite %(page_number)s von %(num_pages)s" msgstr "Seite %(page_number)s von %(num_pages)s"
#: c3nav/control/templates/control/fragment_pagination.html:16 #: c3nav/control/templates/control/fragment_pagination.html:16
#: c3nav/site/templates/site/fragment_pagination.html:16
msgid "next" msgid "next"
msgstr "nächste" msgstr "nächste"
#: c3nav/control/templates/control/fragment_pagination.html:19 #: c3nav/control/templates/control/fragment_pagination.html:19
#: c3nav/site/templates/site/fragment_pagination.html:19
msgid "last" msgid "last"
msgstr "letzte" msgstr "letzte"
@ -432,9 +446,9 @@ msgstr ""
#: c3nav/control/templates/control/map_updates.html:89 #: c3nav/control/templates/control/map_updates.html:89
#: c3nav/control/templates/control/map_updates.html:96 #: c3nav/control/templates/control/map_updates.html:96
#: c3nav/control/templates/control/user.html:97 #: c3nav/control/templates/control/user.html:101
#: c3nav/control/templates/control/user.html:140 #: c3nav/control/templates/control/user.html:144
#: c3nav/control/templates/control/user.html:173 #: c3nav/control/templates/control/user.html:177
#: c3nav/mapdata/models/geometry/level.py:142 #: c3nav/mapdata/models/geometry/level.py:142
#: c3nav/mapdata/models/locations.py:122 c3nav/mapdata/models/locations.py:123 #: c3nav/mapdata/models/locations.py:122 c3nav/mapdata/models/locations.py:123
msgid "Yes" msgid "Yes"
@ -442,9 +456,9 @@ msgstr "Ja"
#: c3nav/control/templates/control/map_updates.html:91 #: c3nav/control/templates/control/map_updates.html:91
#: c3nav/control/templates/control/map_updates.html:98 #: c3nav/control/templates/control/map_updates.html:98
#: c3nav/control/templates/control/user.html:99 #: c3nav/control/templates/control/user.html:103
#: c3nav/control/templates/control/user.html:142 #: c3nav/control/templates/control/user.html:146
#: c3nav/control/templates/control/user.html:175 #: c3nav/control/templates/control/user.html:179
#: c3nav/mapdata/models/geometry/level.py:142 #: c3nav/mapdata/models/geometry/level.py:142
#: c3nav/mapdata/models/locations.py:122 c3nav/mapdata/models/locations.py:123 #: c3nav/mapdata/models/locations.py:122 c3nav/mapdata/models/locations.py:123
msgid "No" msgid "No"
@ -458,103 +472,103 @@ msgstr "im django Admin Panel zeigen"
msgid "General Permissions" msgid "General Permissions"
msgstr "Generelle Befugnisse" msgstr "Generelle Befugnisse"
#: c3nav/control/templates/control/user.html:24 #: c3nav/control/templates/control/user.html:28
#: c3nav/control/templates/control/user.html:111 #: c3nav/control/templates/control/user.html:115
#: c3nav/control/templates/control/user.html:151 #: c3nav/control/templates/control/user.html:155
msgid "none" msgid "none"
msgstr "keine" msgstr "keine"
#: c3nav/control/templates/control/user.html:34 #: c3nav/control/templates/control/user.html:38
msgid "This user has an API secret." msgid "This user has an API secret."
msgstr "Dieser Benutzer hat ein 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." msgid "You have an API secret."
msgstr "Du hast ein 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." msgid "You can not see it, but generate a new one."
msgstr "Du kannst es nich sehen, aber ein neues generieren." 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." msgid "This user has not an API secret."
msgstr "Dieser Benutzer hat kein 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." msgid "You can create one."
msgstr "Du kannst eins erstellen." msgstr "Du kannst eins erstellen."
#: c3nav/control/templates/control/user.html:49 #: c3nav/control/templates/control/user.html:53
msgid "Regenerate API secret" msgid "Regenerate API secret"
msgstr "API Secret neu generieren" msgstr "API Secret neu generieren"
#: c3nav/control/templates/control/user.html:50 #: c3nav/control/templates/control/user.html:54
msgid "Delete API secret" msgid "Delete API secret"
msgstr "API Secret löschen" msgstr "API Secret löschen"
#: c3nav/control/templates/control/user.html:52 #: c3nav/control/templates/control/user.html:56
msgid "Generate API secret" msgid "Generate API secret"
msgstr "API Secret generieren" msgstr "API Secret generieren"
#: c3nav/control/templates/control/user.html:55 #: c3nav/control/templates/control/user.html:59
msgid "Update API secret" msgid "Update API secret"
msgstr "API Secret updaten" msgstr "API Secret updaten"
#: c3nav/control/templates/control/user.html:64 #: c3nav/control/templates/control/user.html:68
#, python-format #, python-format
msgid "for %(restriction_title)s" msgid "for %(restriction_title)s"
msgstr "für %(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/editor/templates/editor/account_form.html:11
#: c3nav/site/templates/site/account_form.html:12 #: c3nav/site/templates/site/account_form.html:12
#: c3nav/site/templates/site/confirm.html:19 #: c3nav/site/templates/site/confirm.html:19
msgid "back" msgid "back"
msgstr "zurück" 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/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 #: c3nav/site/models.py:17
msgid "author" msgid "author"
msgstr "Autor" msgstr "Autor"
#: c3nav/control/templates/control/user.html:74 #: c3nav/control/templates/control/user.html:78
#: c3nav/control/templates/control/user.html:122 #: c3nav/control/templates/control/user.html:126
#: c3nav/mapdata/models/access.py:139 #: c3nav/mapdata/models/access.py:139
msgid "expires" msgid "expires"
msgstr "läuft ab" msgstr "läuft ab"
#: c3nav/control/templates/control/user.html:75 #: c3nav/control/templates/control/user.html:79
#: c3nav/control/templates/control/user.html:123 #: c3nav/control/templates/control/user.html:127
#: c3nav/mapdata/models/access.py:82 c3nav/mapdata/models/access.py:140 #: c3nav/mapdata/models/access.py:82 c3nav/mapdata/models/access.py:140
msgid "can grant" msgid "can grant"
msgstr "kann erteilen" msgstr "kann erteilen"
#: c3nav/control/templates/control/user.html:76 #: c3nav/control/templates/control/user.html:80
msgid "key" msgid "key"
msgstr "key" msgstr "key"
#: c3nav/control/templates/control/user.html:104 #: c3nav/control/templates/control/user.html:108
#: c3nav/control/templates/control/user.html:179 #: c3nav/control/templates/control/user.html:183
#: 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:114 #: c3nav/control/templates/control/user.html:118
#: c3nav/control/templates/control/user.html:197 #: c3nav/control/templates/control/user.html:201
msgid "Add" msgid "Add"
msgstr "Hinzufügen" 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:27 c3nav/mapdata/models/access.py:243
#: c3nav/mapdata/models/access.py:256 #: c3nav/mapdata/models/access.py:256
msgid "Access Restriction" msgid "Access Restriction"
msgstr "Zugangs­beschränkung" msgstr "Zugangs­beschrä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/fragment_changesets.html:10
#: c3nav/editor/templates/editor/list.html:26 #: c3nav/editor/templates/editor/list.html:26
#: c3nav/site/templates/site/map.html:100 #: c3nav/site/templates/site/map.html:100
@ -564,11 +578,11 @@ msgstr "Zugangs­beschränkung"
msgid "Details" msgid "Details"
msgstr "Details" msgstr "Details"
#: c3nav/control/templates/control/user.html:157 #: c3nav/control/templates/control/user.html:161
msgid "Space Access" msgid "Space Access"
msgstr "Raumzugriffserlaubnis" msgstr "Raumzugriffserlaubnis"
#: c3nav/control/templates/control/user.html:164 #: c3nav/control/templates/control/user.html:168
#: c3nav/editor/templates/editor/space.html:9 #: c3nav/editor/templates/editor/space.html:9
#: c3nav/mapdata/models/geometry/level.py:124 #: c3nav/mapdata/models/geometry/level.py:124
#: c3nav/mapdata/models/geometry/space.py:81 #: c3nav/mapdata/models/geometry/space.py:81
@ -789,7 +803,7 @@ msgid "Change Set"
msgstr "Änderungsset" msgstr "Änderungsset"
#: c3nav/editor/models/changedobject.py:35 c3nav/editor/models/changeset.py:39 #: 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 #: c3nav/site/models.py:14 c3nav/site/models.py:54
msgid "created" msgid "created"
msgstr "erstellt" msgstr "erstellt"
@ -865,6 +879,7 @@ msgstr "letzte Statusänderung"
#: c3nav/editor/models/changeset.py:48 c3nav/mapdata/models/base.py:64 #: 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/graph.py:38 c3nav/mapdata/models/locations.py:256
#: c3nav/mapdata/models/locations.py:423 c3nav/mapdata/utils/locations.py:344 #: c3nav/mapdata/models/locations.py:423 c3nav/mapdata/utils/locations.py:344
#: c3nav/site/templates/site/report_list.html:19
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
@ -872,8 +887,8 @@ msgstr "Titel"
msgid "Description" msgid "Description"
msgstr "Beschreibung" msgstr "Beschreibung"
#: c3nav/editor/models/changeset.py:51 c3nav/mapdata/models/report.py:66 #: c3nav/editor/models/changeset.py:51 c3nav/mapdata/models/report.py:71
#: c3nav/mapdata/models/report.py:113 #: c3nav/mapdata/models/report.py:154
msgid "assigned to" msgid "assigned to"
msgstr "zugewiesen" msgstr "zugewiesen"
@ -900,7 +915,7 @@ msgid_plural "%(num)d objects changed"
msgstr[0] "%(num)d Objekt geändert" msgstr[0] "%(num)d Objekt geändert"
msgstr[1] "%(num)d Objekte 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" msgid "datetime"
msgstr "Zeitpunkt" msgstr "Zeitpunkt"
@ -1147,7 +1162,7 @@ msgid "close dialog"
msgstr "Dialog schließen" msgstr "Dialog schließen"
#: c3nav/editor/templates/editor/fragment_nav.html:21 #: 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" msgid "Log out"
msgstr "Abmelden" msgstr "Abmelden"
@ -1279,7 +1294,7 @@ msgid "Activate direct editing"
msgstr "Direktes Bearbeiten aktivieren" msgstr "Direktes Bearbeiten aktivieren"
#: c3nav/editor/templates/editor/user.html:54 c3nav/editor/views/account.py:85 #: 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" msgid "Change password"
msgstr "Passwort ändern" msgstr "Passwort ändern"
@ -1681,9 +1696,10 @@ msgstr "Werte zurücksetzen"
msgid "save result to the stats directory" msgid "save result to the stats directory"
msgstr "Ergebnis im stats-Ordner speichern" msgstr "Ergebnis im stats-Ordner speichern"
#: c3nav/mapdata/models/access.py:23 c3nav/mapdata/models/report.py:59 #: c3nav/mapdata/models/access.py:23 c3nav/mapdata/models/report.py:64
#: c3nav/mapdata/models/report.py:110 #: c3nav/mapdata/models/report.py:151
#: c3nav/site/templates/site/report_detail.html:9 #: c3nav/site/templates/site/report_detail.html:10
#: c3nav/site/templates/site/report_list.html:28
msgid "open" msgid "open"
msgstr "offen" msgstr "offen"
@ -1980,7 +1996,7 @@ msgstr "Zielraum"
#: c3nav/mapdata/models/geometry/space.py:308 #: c3nav/mapdata/models/geometry/space.py:308
#: c3nav/mapdata/models/geometry/space.py:347 c3nav/mapdata/models/graph.py:48 #: 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" msgid "description"
msgstr "Beschreibung" msgstr "Beschreibung"
@ -2005,7 +2021,7 @@ msgid "Cross descriptions"
msgstr "Durchschreitungsbeschreibungen" msgstr "Durchschreitungsbeschreibungen"
#: c3nav/mapdata/models/geometry/space.py:386 #: c3nav/mapdata/models/geometry/space.py:386
#: c3nav/mapdata/models/report.py:111 #: c3nav/mapdata/models/report.py:152
msgid "comment" msgid "comment"
msgstr "Kommentar" msgstr "Kommentar"
@ -2301,92 +2317,92 @@ msgstr "Schriftgröße"
msgid "Label Settings" msgid "Label Settings"
msgstr "Labeleinstellungen" msgstr "Labeleinstellungen"
#: c3nav/mapdata/models/report.py:52 #: c3nav/mapdata/models/report.py:57
msgid "location issue" msgid "location issue"
msgstr "Ortfehler" msgstr "Ortfehler"
#: c3nav/mapdata/models/report.py:53 #: c3nav/mapdata/models/report.py:58
msgid "missing location" msgid "missing location"
msgstr "fehlender Ort" msgstr "fehlender Ort"
#: c3nav/mapdata/models/report.py:54 #: c3nav/mapdata/models/report.py:59
msgid "route issue" msgid "route issue"
msgstr "Routenfehler" msgstr "Routenfehler"
#: c3nav/mapdata/models/report.py:57 #: c3nav/mapdata/models/report.py:62
msgid "category" msgid "category"
msgstr "Kategorie" msgstr "Kategorie"
#: c3nav/mapdata/models/report.py:60 #: c3nav/mapdata/models/report.py:65
msgid "last_update" msgid "last_update"
msgstr "letzte Anderung" msgstr "letzte Anderung"
#: c3nav/mapdata/models/report.py:61 #: c3nav/mapdata/models/report.py:66
msgid "title" msgid "title"
msgstr "Titel" msgstr "Titel"
#: c3nav/mapdata/models/report.py:62 #: c3nav/mapdata/models/report.py:67
msgid "a short title for your report" msgid "a short title for your report"
msgstr "ein kurzer Titel für deine Meldung" 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" msgid "tell us precisely what's wrong"
msgstr "Sag uns im Detail was falsch ist" msgstr "Sag uns im Detail was falsch ist"
#: c3nav/mapdata/models/report.py:68 #: c3nav/mapdata/models/report.py:73
msgid "location" msgid "location"
msgstr "Ort" msgstr "Ort"
#: c3nav/mapdata/models/report.py:69 #: c3nav/mapdata/models/report.py:74
msgid "coordinates" msgid "coordinates"
msgstr "Koordinaten" msgstr "Koordinaten"
#: c3nav/mapdata/models/report.py:70 #: c3nav/mapdata/models/report.py:75
msgid "origin" msgid "origin"
msgstr "Start" msgstr "Start"
#: c3nav/mapdata/models/report.py:71 #: c3nav/mapdata/models/report.py:76
msgid "destination" msgid "destination"
msgstr "Ziel" msgstr "Ziel"
#: c3nav/mapdata/models/report.py:72 #: c3nav/mapdata/models/report.py:77
msgid "route options" msgid "route options"
msgstr "Routenoptionen" msgstr "Routenoptionen"
#: c3nav/mapdata/models/report.py:74 #: c3nav/mapdata/models/report.py:79
msgid "new location title" msgid "new location title"
msgstr "Neuer Ortstitel" 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" msgid "you have to supply a title in at least one language"
msgstr "Du musst einen Titel in mindestens einer Sprache angeben" 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" msgid "location groups"
msgstr "Ortgruppen" msgstr "Ortgruppen"
#: c3nav/mapdata/models/report.py:78 #: c3nav/mapdata/models/report.py:83
msgid "select all groups that apply, if any" msgid "select all groups that apply, if any"
msgstr "" msgstr ""
#: c3nav/mapdata/models/report.py:86 #: c3nav/mapdata/models/report.py:91
#: c3nav/site/templates/site/report_detail.html:6 #: c3nav/site/templates/site/report_detail.html:7
msgid "Report" msgid "Report"
msgstr "Meldung" msgstr "Meldung"
#: c3nav/mapdata/models/report.py:87 #: c3nav/mapdata/models/report.py:92
msgid "Reports" msgid "Reports"
msgstr "Meldungen" msgstr "Meldungen"
#: c3nav/mapdata/models/report.py:114 #: c3nav/mapdata/models/report.py:155
msgid "public" msgid "public"
msgstr "öffentlich" msgstr "öffentlich"
#: c3nav/mapdata/models/report.py:117 #: c3nav/mapdata/models/report.py:158
msgid "Report update" msgid "Report update"
msgstr "Meldungsupdate" msgstr "Meldungsupdate"
#: c3nav/mapdata/models/report.py:118 #: c3nav/mapdata/models/report.py:159
msgid "Report updates" msgid "Report updates"
msgstr "Meldungsupdates" msgstr "Meldungsupdates"
@ -2762,6 +2778,14 @@ msgstr "Du bist angemeldet als <strong>%(username)s</strong>."
msgid "You can access the control panel." msgid "You can access the control panel."
msgstr "Du kannst das Control Panel betreten." 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 #: c3nav/site/templates/site/fragment_report_meta.html:3
msgid "You are reporting an issue with the following location:" msgid "You are reporting an issue with the following location:"
msgstr "Du meldest einen Fehler beim folgenden Ort:" msgstr "Du meldest einen Fehler beim folgenden Ort:"
@ -2898,22 +2922,43 @@ msgstr "in c3nav öffnen"
msgid "Submit" msgid "Submit"
msgstr "Absenden" 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" msgid "closed"
msgstr "geschlossen" msgstr "geschlossen"
#: c3nav/site/templates/site/report_detail.html:15 #: c3nav/site/templates/site/report_detail.html:16
msgid "anonymous submission"
msgstr "anonyme Meldung"
#: c3nav/site/templates/site/report_detail.html:17
msgid "by" msgid "by"
msgstr "von" msgstr "von"
#: c3nav/site/templates/site/report_detail.html:18
msgid "anonymous submission"
msgstr "anonyme Meldung"
#: c3nav/site/templates/site/report_detail.html:35 #: c3nav/site/templates/site/report_detail.html:35
msgid "(none)" msgid "(none)"
msgstr "(keine)" 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 #: c3nav/site/views.py:76 c3nav/site/views.py:323
msgid "You need to log in to unlock areas." msgid "You need to log in to unlock areas."
msgstr "Du musst dich anmelden um Bereiche freizuschalten." 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 #: c3nav/site/views.py:408
msgid "Your report was submitted." msgid "Your report was submitted."
msgstr "Deine Meldiung wurde abgesendet." msgstr "Deine Meldung wurde abgesendet."
#: c3nav/site/views.py:411 #: c3nav/site/views.py:411
msgid "You can keep track of it from your user dashboard." msgid "You can keep track of it from your user dashboard."

View file

@ -23,6 +23,16 @@
</p> </p>
{% endif %} {% 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> <hr>
<p> <p>
<a class="button" href="{% url 'site.logout' %}">{% trans 'Log out' %}</a> <a class="button" href="{% url 'site.logout' %}">{% trans 'Log out' %}</a>

View 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> &middot;
<a href="?{% if request.GET.s %}s={{ request.GET.s | urlencode }}&{% endif %}page={{ objects.previous_page_number }}">
{% trans 'previous' %}
</a> &middot;
{% 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 %}
&middot; <a href="?{% if request.GET.s %}s={{ request.GET.s | urlencode }}&{% endif %}page={{ objects.next_page_number }}">
{% trans 'next' %}
</a>
&middot; <a href="?{% if request.GET.s %}s={{ request.GET.s | urlencode }}&{% endif %}page={{ objects.paginator.num_pages }}">
{% trans 'last' %} »
</a>
{% endif %}
</p>

View 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 %}

View file

@ -1,7 +1,8 @@
from django.conf.urls import url from django.conf.urls import url
from c3nav.site.views import (about_view, access_redeem_view, account_view, change_password_view, choose_language, 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-_.:]+)' slug = r'(?P<slug>[a-z0-9-_.:]+)'
coordinates = r'(?P<coordinates>[a-z0-9-_:]+:-?\d+(\.\d+)?:-?\d+(\.\d+)?)' 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'^access/(?P<token>[^/]+)$', access_redeem_view, name='site.access.redeem'),
url(r'^lang/$', choose_language, name='site.language'), url(r'^lang/$', choose_language, name='site.language'),
url(r'^about/$', about_view, name='site.about'), url(r'^about/$', about_view, name='site.about'),
url(r'^report/$', about_view, name='site.about'), url(r'^reports/(?P<filter>(open|all))/$', report_list, name='site.report_list'),
url(r'^report/(?P<pk>\d+)/$', report_detail, name='site.report_detail'), url(r'^reports/(?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<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/%s/$' % coordinates, report_create, name='site.report_create'),
url(r'^report/l/(?P<location>\d+)/$', 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>[^/]+)/$', url(r'^report/r/(?P<origin>[^/]+)/(?P<destination>[^/]+)/(?P<options>[^/]+)/$',

View file

@ -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.forms import AuthenticationForm, PasswordChangeForm, UserCreationForm
from django.contrib.auth.views import redirect_to_login from django.contrib.auth.views import redirect_to_login
from django.core.exceptions import ObjectDoesNotExist, SuspiciousOperation from django.core.exceptions import ObjectDoesNotExist, SuspiciousOperation
from django.core.paginator import Paginator
from django.core.serializers.json import DjangoJSONEncoder from django.core.serializers.json import DjangoJSONEncoder
from django.db import transaction from django.db import transaction
from django.http import Http404, HttpResponse, HttpResponseBadRequest 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): def report_detail(request, pk, secret=None):
if secret: if secret:
qs = Report.objects.filter(secret=secret) qs = Report.objects.filter(secret=secret)