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

@ -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>

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 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>[^/]+)/$',

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.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)