summaryrefslogtreecommitdiffstats
path: root/users/views/report.py
diff options
context:
space:
mode:
Diffstat (limited to 'users/views/report.py')
-rw-r--r--users/views/report.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/users/views/report.py b/users/views/report.py
new file mode 100644
index 0000000..f7e29ed
--- /dev/null
+++ b/users/views/report.py
@@ -0,0 +1,76 @@
+from django import forms
+from django.shortcuts import get_object_or_404, render
+from django.utils.decorators import method_decorator
+from django.views.generic import FormView
+
+from users.decorators import identity_required
+from users.models import Report
+from users.shortcuts import by_handle_or_404
+
+
+@method_decorator(identity_required, name="dispatch")
+class SubmitReport(FormView):
+ """
+ Submits a report on a user or a post
+ """
+
+ template_name = "users/report.html"
+
+ class form_class(forms.Form):
+ type = forms.ChoiceField(
+ choices=[
+ ("", "------"),
+ ("spam", "Spam or inappropriate advertising"),
+ ("hateful", "Hateful, abusive, or violent speech"),
+ ("other", "Something else"),
+ ],
+ label="Why are you reporting this?",
+ )
+
+ complaint = forms.CharField(
+ widget=forms.Textarea,
+ help_text="Please describe why you think this should be removed",
+ )
+
+ forward = forms.BooleanField(
+ widget=forms.Select(
+ choices=[
+ (False, "Do not send to other server"),
+ (True, "Send to other server"),
+ ]
+ ),
+ help_text="Should we also send an anonymous copy of this to their server?",
+ required=False,
+ )
+
+ def dispatch(self, request, handle, post_id=None):
+ self.identity = by_handle_or_404(self.request, handle, local=False)
+ if post_id:
+ self.post_obj = get_object_or_404(self.identity.posts, pk=post_id)
+ else:
+ self.post_obj = None
+ return super().dispatch(request)
+
+ def form_valid(self, form):
+ # Create the report
+ report = Report.objects.create(
+ type=form.cleaned_data["type"],
+ complaint=form.cleaned_data["complaint"],
+ subject_identity=self.identity,
+ subject_post=self.post_obj,
+ source_identity=self.request.identity,
+ source_domain=self.request.identity.domain,
+ forward=form.cleaned_data.get("forward", False),
+ )
+ # Show a thanks page
+ return render(
+ self.request,
+ "users/report_sent.html",
+ {"report": report},
+ )
+
+ def get_context_data(self, *args, **kwargs):
+ context = super().get_context_data(*args, **kwargs)
+ context["identity"] = self.identity
+ context["post"] = self.post_obj
+ return context