From 698aef71009f8db66abc8507acd410c75b390c07 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laura=20Kl=C3=BCnder?=
Date: Tue, 24 Dec 2019 19:03:22 +0100
Subject: [PATCH] show link to report dashboard if user has reported something
---
.../migrations/0079_auto_20191224_1858.py | 29 +++++++++++++++++++
src/c3nav/mapdata/models/report.py | 15 +++++++++-
src/c3nav/site/templates/site/account.html | 10 ++++++-
src/c3nav/site/views.py | 4 ++-
4 files changed, 55 insertions(+), 3 deletions(-)
create mode 100644 src/c3nav/mapdata/migrations/0079_auto_20191224_1858.py
diff --git a/src/c3nav/mapdata/migrations/0079_auto_20191224_1858.py b/src/c3nav/mapdata/migrations/0079_auto_20191224_1858.py
new file mode 100644
index 00000000..7f554607
--- /dev/null
+++ b/src/c3nav/mapdata/migrations/0079_auto_20191224_1858.py
@@ -0,0 +1,29 @@
+# Generated by Django 2.2.8 on 2019-12-24 17:58
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('mapdata', '0078_reports'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='report',
+ options={'default_related_name': 'reports', 'verbose_name': 'Report', 'verbose_name_plural': 'Reports'},
+ ),
+ migrations.AlterField(
+ model_name='report',
+ name='author',
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='reports', to=settings.AUTH_USER_MODEL, verbose_name='author'),
+ ),
+ migrations.AlterField(
+ model_name='report',
+ name='created_groups',
+ field=models.ManyToManyField(blank=True, help_text='select all groups that apply, if any', limit_choices_to={'can_report_missing': True}, related_name='reports', to='mapdata.LocationGroup', verbose_name='location groups'),
+ ),
+ ]
diff --git a/src/c3nav/mapdata/models/report.py b/src/c3nav/mapdata/models/report.py
index 2bc7daf3..e3210ab4 100644
--- a/src/c3nav/mapdata/models/report.py
+++ b/src/c3nav/mapdata/models/report.py
@@ -2,6 +2,7 @@ import string
from django.conf import settings
from django.contrib.auth import get_user_model
+from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.db.models import Q
@@ -90,7 +91,7 @@ class Report(models.Model):
class Meta:
verbose_name = _('Report')
verbose_name_plural = _('Reports')
- default_related_name = 'report'
+ default_related_name = 'reports'
@property
def form_cls(self):
@@ -137,8 +138,20 @@ class Report(models.Model):
description=self.description,
reviewers=reviewers)
+ @classmethod
+ def user_has_reports(cls, user):
+ if not user.is_authenticated:
+ return False
+ result = cache.get('user:has-reports:%d' % user.pk, None)
+ if result is None:
+ result = user.reports.exists()
+ cache.set('user:has-reports:%d' % user.pk, result, 900)
+ return result
+
def save(self, *args, **kwargs):
created = self.pk is None
+ if self.author:
+ cache.delete('user:has-reports:%d' % self.author.pk)
super().save(*args, **kwargs)
if created:
self.notify_reviewers()
diff --git a/src/c3nav/site/templates/site/account.html b/src/c3nav/site/templates/site/account.html
index e72267c3..0b28b00b 100644
--- a/src/c3nav/site/templates/site/account.html
+++ b/src/c3nav/site/templates/site/account.html
@@ -29,7 +29,15 @@
{% trans 'You can review reports' %}
- {% trans 'Show reports' %}
+ {% trans 'Show reports' %}
+
+ {% elif user_has_reports %}
+
+
+ {% trans 'You have submitted reports.' %}
+
+
+ {% trans 'Show your reports' %}
{% endif %}
diff --git a/src/c3nav/site/views.py b/src/c3nav/site/views.py
index c16ec928..e61c5762 100644
--- a/src/c3nav/site/views.py
+++ b/src/c3nav/site/views.py
@@ -303,7 +303,9 @@ def change_password_view(request):
@never_cache
@login_required(login_url='site.login')
def account_view(request):
- return render(request, 'site/account.html', {})
+ return render(request, 'site/account.html', {
+ 'user_has_reports': Report.user_has_reports(request.user),
+ })
@never_cache