92 строки
3.3 KiB
Python
92 строки
3.3 KiB
Python
from django import forms
|
|
from django.forms.models import modelformset_factory
|
|
|
|
import happyforms
|
|
from tower import ugettext_lazy as _lazy
|
|
|
|
from quieter_formset.formset import BaseModelFormSet
|
|
|
|
import amo
|
|
import reviews
|
|
from .models import ReviewFlag, Review
|
|
|
|
|
|
class ReviewReplyForm(forms.Form):
|
|
title = forms.CharField(required=False)
|
|
body = forms.CharField(widget=forms.Textarea(attrs={'rows': 3}))
|
|
|
|
|
|
class ReviewForm(ReviewReplyForm):
|
|
rating = forms.ChoiceField(zip(range(1, 6), range(1, 6)))
|
|
|
|
|
|
class ReviewFlagForm(forms.ModelForm):
|
|
|
|
class Meta:
|
|
model = ReviewFlag
|
|
|
|
def clean(self):
|
|
data = super(ReviewFlagForm, self).clean()
|
|
if 'note' in data and data['note'].strip():
|
|
data['flag'] = ReviewFlag.OTHER
|
|
return data
|
|
|
|
|
|
class BaseReviewFlagFormSet(BaseModelFormSet):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.form = ModerateReviewFlagForm
|
|
super(BaseReviewFlagFormSet, self).__init__(*args, **kwargs)
|
|
|
|
def save(self):
|
|
for form in self.forms:
|
|
if form.cleaned_data:
|
|
action = int(form.cleaned_data['action'])
|
|
|
|
is_flagged = (form.instance.reviewflag_set.count() > 0)
|
|
|
|
if action != reviews.REVIEW_MODERATE_SKIP: # Delete flags.
|
|
for flag in form.instance.reviewflag_set.all():
|
|
flag.delete()
|
|
|
|
review = form.instance
|
|
addon = review.addon
|
|
if action == reviews.REVIEW_MODERATE_DELETE:
|
|
review_addon = review.addon
|
|
review_id = review.id
|
|
review.delete()
|
|
amo.log(amo.LOG.DELETE_REVIEW, review_addon, review_id,
|
|
details=dict(title=unicode(review.title),
|
|
body=unicode(review.body),
|
|
addon_id=addon.id,
|
|
addon_title=unicode(addon.name),
|
|
is_flagged=is_flagged))
|
|
elif action == reviews.REVIEW_MODERATE_KEEP:
|
|
review.editorreview = False
|
|
review.save()
|
|
amo.log(amo.LOG.APPROVE_REVIEW, review.addon, review,
|
|
details=dict(title=unicode(review.title),
|
|
body=unicode(review.body),
|
|
addon_id=addon.id,
|
|
addon_title=unicode(addon.name),
|
|
is_flagged=is_flagged))
|
|
|
|
|
|
class ModerateReviewFlagForm(happyforms.ModelForm):
|
|
|
|
action_choices = [(reviews.REVIEW_MODERATE_KEEP,
|
|
_lazy('Keep review; remove flags')),
|
|
(reviews.REVIEW_MODERATE_SKIP, _lazy('Skip for now')),
|
|
(reviews.REVIEW_MODERATE_DELETE, _lazy('Delete review'))]
|
|
action = forms.ChoiceField(choices=action_choices, required=False,
|
|
initial=0, widget=forms.RadioSelect())
|
|
|
|
class Meta:
|
|
model = Review
|
|
fields = ('action',)
|
|
|
|
|
|
ReviewFlagFormSet = modelformset_factory(Review, extra=0,
|
|
form=ModerateReviewFlagForm,
|
|
formset=BaseReviewFlagFormSet)
|