diff --git a/pedagogy/forms.py b/pedagogy/forms.py index ed883189..e16db188 100644 --- a/pedagogy/forms.py +++ b/pedagogy/forms.py @@ -23,6 +23,7 @@ # from django import forms +from django.utils.translation import ugettext_lazy as _ from core.views.forms import MarkdownInput from core.models import User @@ -122,3 +123,15 @@ class UVCommentReportForm(forms.ModelForm): self.fields["reporter"].initial = reporter_id self.fields["comment"].queryset = UVComment.objects.filter(id=comment_id).all() self.fields["comment"].initial = comment_id + + +class UVCommentModerationForm(forms.Form): + """ + Form handeling bulk comment deletion + """ + + reports = forms.ModelMultipleChoiceField( + UVCommentReport.objects.all(), + label=_("Reported comments"), + widget=forms.CheckboxSelectMultiple, + ) diff --git a/pedagogy/templates/pedagogy/moderation.jinja b/pedagogy/templates/pedagogy/moderation.jinja new file mode 100644 index 00000000..5960ac3e --- /dev/null +++ b/pedagogy/templates/pedagogy/moderation.jinja @@ -0,0 +1,36 @@ +{% extends "core/base.jinja" %} +{% from 'core/macros.jinja' import select_all_checkbox %} + +{% block title %} +{% trans %}UV comment moderation{% endtrans %} +{% endblock title %} + +{% block content %} +
+ {% csrf_token %} +

{{ select_all_checkbox("moderation_form") }}

+ + + + + + + + + + + {% set queryset = form.reports.field.queryset %} + {% for widget in form.reports.subwidgets %} + {% set report = queryset.get(id=widget.data.value) %} + + + + + + + {% endfor %} + +
{% trans %}UV{% endtrans %}{% trans %}Comment{% endtrans %}{% trans %}Reason{% endtrans %}{% trans %}Delete{% endtrans %}
{{ report.comment.uv }}{{ report.comment.comment|markdown }}{{ report.reason|markdown }}{{ widget.tag() }}
+

+
+{% endblock content %} diff --git a/pedagogy/views.py b/pedagogy/views.py index 6551ee40..bb1ab78e 100644 --- a/pedagogy/views.py +++ b/pedagogy/views.py @@ -34,6 +34,7 @@ from django.views.generic import ( from django.core import serializers from django.utils import html from django.http import HttpResponse +from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse_lazy from django.shortcuts import get_object_or_404 @@ -47,7 +48,12 @@ from core.views import ( from haystack.query import SearchQuerySet -from pedagogy.forms import UVForm, UVCommentForm, UVCommentReportForm +from pedagogy.forms import ( + UVForm, + UVCommentForm, + UVCommentReportForm, + UVCommentModerationForm, +) from pedagogy.models import UV, UVComment, UVCommentReport # Some mixins @@ -226,12 +232,27 @@ class UVCommentReportCreateView(CanCreateMixin, CreateView): ) -class UVModerationFormView(CanEditPropMixin, FormView): +class UVModerationFormView(FormView): """ Moderation interface (Privileged) """ - pass + form_class = UVCommentModerationForm + template_name = "pedagogy/moderation.jinja" + + def dispatch(self, request, *args, **kwargs): + if not request.user.is_owner(UV()): + raise PermissionDenied + return super(UVModerationFormView, self).dispatch(request, *args, **kwargs) + + def form_valid(self, form): + form_clean = form.clean() + for report in form_clean.get("reports", []): + report.comment.delete() + return super(UVModerationFormView, self).form_valid(form) + + def get_success_url(self): + return reverse_lazy("pedagogy:moderation") class UVCreateView(CanCreateMixin, CreateView):