77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
|
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
|