Compare commits
6 Commits
9ae64e8cb1
...
37ecf28f2f
Author | SHA1 | Date | |
---|---|---|---|
37ecf28f2f | |||
12d5a976cc | |||
9086e2e75b | |||
3607eb0e4e | |||
3daf83d725 | |||
5ad0cb74cc |
src
fellchensammlung
tests/test_views
@ -680,6 +680,30 @@ class Report(models.Model):
|
||||
def get_moderation_actions(self):
|
||||
return ModerationAction.objects.filter(report=self)
|
||||
|
||||
@property
|
||||
def reported_content(self):
|
||||
"""
|
||||
Dynamically fetch the reported content based on subclass.
|
||||
The alternative would be to use the ContentType framework:
|
||||
https://docs.djangoproject.com/en/5.1/ref/contrib/contenttypes/
|
||||
"""
|
||||
if hasattr(self, "reportadoptionnotice"):
|
||||
return self.reportadoptionnotice.adoption_notice
|
||||
elif hasattr(self, "reportcomment"):
|
||||
return self.reportcomment.reported_comment
|
||||
return None
|
||||
|
||||
@property
|
||||
def reported_content_url(self):
|
||||
"""
|
||||
Same as reported_content, just for url
|
||||
"""
|
||||
if hasattr(self, "reportadoptionnotice"):
|
||||
print(self.reportadoptionnotice.adoption_notice.get_absolute_url)
|
||||
return self.reportadoptionnotice.adoption_notice.get_absolute_url
|
||||
elif hasattr(self, "reportcomment"):
|
||||
return self.reportcomment.reported_comment.get_absolute_url
|
||||
return None
|
||||
|
||||
class ReportAdoptionNotice(Report):
|
||||
adoption_notice = models.ForeignKey("AdoptionNotice", on_delete=models.CASCADE)
|
||||
@ -688,6 +712,9 @@ class ReportAdoptionNotice(Report):
|
||||
def reported_content(self):
|
||||
return self.adoption_notice
|
||||
|
||||
def __str__(self):
|
||||
return f"Report der Vermittlung {self.adoption_notice}"
|
||||
|
||||
|
||||
class ReportComment(Report):
|
||||
reported_comment = models.ForeignKey("Comment", on_delete=models.CASCADE)
|
||||
|
@ -1,9 +1,7 @@
|
||||
{% load i18n %}
|
||||
<div class="report card">
|
||||
<h2>
|
||||
{% blocktranslate %}
|
||||
Meldung von {{ report.reported_content }}
|
||||
{% endblocktranslate %}
|
||||
{% translate 'Meldung von ' %} <a href="{{ report.reported_content_url }}"><i>{{ report.reported_content }}</i></a>
|
||||
</h2>
|
||||
{% if report.reported_broken_rules %}
|
||||
{% translate "Regeln gegen die Verstoßen wurde" %}
|
||||
@ -13,19 +11,25 @@
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<p><b>{% translate "Kommentar zur Meldung" %}:</b>
|
||||
{{ report.user_comment }}
|
||||
<p>
|
||||
{% if report.user_comment %}
|
||||
<b>{% translate "Kommentar zur Meldung" %}:</b> {{ report.user_comment }}
|
||||
{% else %}
|
||||
<i>{% translate 'Es wurde kein Kommentar zur Meldung hinzugefügt.' %}</i>
|
||||
{% endif %}
|
||||
</p>
|
||||
<div class="container-edit-buttons">
|
||||
<form action="allow" class="">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="report_id" value="{{ report.pk }}">
|
||||
<button class="btn allow" type="submit">{% translate "Inhalt genehmigen" %}</button>
|
||||
</form>
|
||||
<form action="disallow" class="">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="report_id" value="{{ report.pk }}">
|
||||
<button class="btn allow" type="submit">{% translate "Inhalt als gesperrt kennzeichnen" %}</button>
|
||||
</form>
|
||||
</div>
|
||||
{% if is_mod_or_above %}
|
||||
<div class="container-edit-buttons">
|
||||
<form action="allow" class="">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="report_id" value="{{ report.pk }}">
|
||||
<button class="btn allow" type="submit">{% translate "Inhalt genehmigen" %}</button>
|
||||
</form>
|
||||
<form action="disallow" class="">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="report_id" value="{{ report.pk }}">
|
||||
<button class="btn allow" type="submit">{% translate "Inhalt als gesperrt kennzeichnen" %}</button>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
@ -429,10 +429,13 @@ def report_detail(request, report_id, form_complete=False):
|
||||
"""
|
||||
Detailed view of a report, including moderation actions
|
||||
"""
|
||||
report = Report.objects.get(pk=report_id)
|
||||
# Prefetching reduces the number of queries to the database that are needed (see reported_content)
|
||||
report = Report.objects.select_related("reportadoptionnotice", "reportcomment").get(pk=report_id)
|
||||
moderation_actions = ModerationAction.objects.filter(report_id=report_id)
|
||||
is_mod_or_above = user_is_trust_level_or_above(request.user, TrustLevel.MODERATOR)
|
||||
|
||||
context = {"report": report, "moderation_actions": moderation_actions, "form_complete": form_complete}
|
||||
context = {"report": report, "moderation_actions": moderation_actions,
|
||||
"form_complete": form_complete, "is_mod_or_above": is_mod_or_above}
|
||||
|
||||
return render(request, 'fellchensammlung/details/detail-report.html', context)
|
||||
|
||||
@ -503,7 +506,7 @@ def my_profile(request):
|
||||
|
||||
@user_passes_test(user_is_trust_level_or_above)
|
||||
def modqueue(request):
|
||||
open_reports = Report.objects.filter(status=Report.WAITING)
|
||||
open_reports = Report.objects.select_related("reportadoptionnotice", "reportcomment").filter(status=Report.WAITING)
|
||||
context = {"reports": open_reports}
|
||||
return render(request, 'fellchensammlung/modqueue.html', context=context)
|
||||
|
||||
|
@ -108,7 +108,7 @@ class BasicViewTest(TestCase):
|
||||
self.assertTrue(ReportComment.objects.filter(reported_comment=c.pk).exists())
|
||||
|
||||
def test_show_report_details_logged_in(self):
|
||||
self.client.login(username='testuser0', password='12345')
|
||||
self.client.login(username='testuser1', password='12345')
|
||||
report = ReportComment.objects.get(user_comment="ReportComment1")
|
||||
response = self.client.get(reverse('report-detail', args=(report.pk,)))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@ -125,7 +125,7 @@ class BasicViewTest(TestCase):
|
||||
self.assertNotContains(response, '<form action="allow" class="">')
|
||||
|
||||
def test_show_report_details_admin(self):
|
||||
self.client.login(username='testuser1', password='12345')
|
||||
self.client.login(username='testuser0', password='12345')
|
||||
report = ReportComment.objects.get(user_comment="ReportComment1")
|
||||
response = self.client.get(reverse('report-detail', args=(report.pk,)))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
Loading…
x
Reference in New Issue
Block a user