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