def eventlog_detail(request, id): log = get_object_or_404(ActivityLog.objects.editor_events(), pk=id) review = None # I really cannot express the depth of the insanity incarnate in # our logging code... if len(log.arguments) > 1 and isinstance(log.arguments[1], Review): review = log.arguments[1] is_admin = acl.action_allowed(request, 'ReviewerAdminTools', 'View') can_undelete = review and review.deleted and (is_admin or request.user.pk == log.user.pk) if request.method == 'POST': # A Form seems overkill for this. if request.POST['action'] == 'undelete': if not can_undelete: raise PermissionDenied ReviewerScore.award_moderation_points(log.user, review.addon, review.id, undo=True) review.undelete() return redirect('editors.eventlog.detail', id) data = context(request, log=log, can_undelete=can_undelete) return render(request, 'editors/eventlog_detail.html', data)
def eventlog_detail(request, id): log = get_object_or_404(ActivityLog.objects.editor_events(), pk=id) review = None # I really cannot express the depth of the insanity incarnate in # our logging code... if len(log.arguments) > 1 and isinstance(log.arguments[1], Review): review = log.arguments[1] is_admin = acl.action_allowed(request, 'ReviewerAdminTools', 'View') can_undelete = review and review.deleted and ( is_admin or request.user.pk == log.user.pk) if request.method == 'POST': # A Form seems overkill for this. if request.POST['action'] == 'undelete': if not can_undelete: raise PermissionDenied ReviewerScore.award_moderation_points( log.user, review.addon, review.id, undo=True) review.undelete() return redirect('editors.eventlog.detail', id) data = context(request, log=log, can_undelete=can_undelete) return render(request, 'editors/eventlog_detail.html', data)
def delete(self, user_responsible=None): if user_responsible is None: user_responsible = self.user review_was_moderated = False # Log deleting reviews to moderation log, # except if the author deletes it if user_responsible != self.user: # Remember moderation state review_was_moderated = True from olympia.editors.models import ReviewerScore activity.log_create( amo.LOG.DELETE_REVIEW, self.addon, self, user=user_responsible, details=dict( title=unicode(self.title), body=unicode(self.body), addon_id=self.addon.pk, addon_title=unicode(self.addon.name), is_flagged=self.reviewflag_set.exists())) for flag in self.reviewflag_set.all(): flag.delete() log.info(u'Review deleted: %s deleted id:%s by %s ("%s": "%s")', user_responsible.name, self.pk, self.user.name, unicode(self.title), unicode(self.body)) self.update(deleted=True) # Force refreshing of denormalized data (it wouldn't happen otherwise # because we're not dealing with a creation). self.update_denormalized_fields() if (review_was_moderated): ReviewerScore.award_moderation_points(user_responsible, self.addon, self.pk)
def moderator_delete(self, user): from olympia.editors.models import ReviewerScore amo.log(amo.LOG.DELETE_REVIEW, self.addon, self, user=user, details=dict(title=unicode(self.title), body=unicode(self.body), addon_id=self.addon.pk, addon_title=unicode(self.addon.name), is_flagged=self.reviewflag_set.exists())) for flag in self.reviewflag_set.all(): flag.delete() self.delete(user_responsible=user) ReviewerScore.award_moderation_points(user, self.addon, self.pk)
def approve(self, user): from olympia.editors.models import ReviewerScore activity.log_create( amo.LOG.APPROVE_REVIEW, self.addon, self, user=user, details=dict( title=unicode(self.title), body=unicode(self.body), addon_id=self.addon.pk, addon_title=unicode(self.addon.name), is_flagged=self.reviewflag_set.exists())) for flag in self.reviewflag_set.all(): flag.delete() self.editorreview = False # We've already logged what we want to log, no need to pass # user_responsible=user. self.save() ReviewerScore.award_moderation_points(user, self.addon, self.pk)
def moderator_approve(self, user): from olympia.editors.models import ReviewerScore amo.log(amo.LOG.APPROVE_REVIEW, self.addon, self, user=user, details=dict(title=unicode(self.title), body=unicode(self.body), addon_id=self.addon.pk, addon_title=unicode(self.addon.name), is_flagged=self.reviewflag_set.exists())) for flag in self.reviewflag_set.all(): flag.delete() self.editorreview = False # We've already logged what we want to log, no need to pass # user_responsible=user. self.save() ReviewerScore.award_moderation_points(user, self.addon, self.pk)
def save(self): from olympia.reviews.helpers import user_can_delete_review for form in self.forms: if form.cleaned_data and user_can_delete_review( self.request, form.instance): 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.delete() amo.log(amo.LOG.DELETE_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)) if self.request: ReviewerScore.award_moderation_points( self.request.user, addon, review.id) elif action == reviews.REVIEW_MODERATE_KEEP: review.editorreview = False review.save() amo.log(amo.LOG.APPROVE_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)) if self.request: ReviewerScore.award_moderation_points( self.request.user, addon, review.id)
def save(self): from olympia.reviews.helpers import user_can_delete_review for form in self.forms: if form.cleaned_data and user_can_delete_review(self.request, form.instance): 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.delete() amo.log(amo.LOG.DELETE_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)) if self.request: ReviewerScore.award_moderation_points( self.request.user, addon, review.id) elif action == reviews.REVIEW_MODERATE_KEEP: review.editorreview = False review.save() amo.log(amo.LOG.APPROVE_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)) if self.request: ReviewerScore.award_moderation_points( self.request.user, addon, review.id)
def delete(self, user_responsible=None): if user_responsible is None: user_responsible = self.user review_was_moderated = False # Log deleting reviews to moderation log, # except if the author deletes it if user_responsible != self.user: # Remember moderation state review_was_moderated = True from olympia.editors.models import ReviewerScore activity.log_create(amo.LOG.DELETE_REVIEW, self.addon, self, user=user_responsible, details=dict( title=unicode(self.title), body=unicode(self.body), addon_id=self.addon.pk, addon_title=unicode(self.addon.name), is_flagged=self.reviewflag_set.exists())) for flag in self.reviewflag_set.all(): flag.delete() log.info(u'Review deleted: %s deleted id:%s by %s ("%s": "%s")', user_responsible.name, self.pk, self.user.name, unicode(self.title), unicode(self.body)) self.update(deleted=True) # Force refreshing of denormalized data (it wouldn't happen otherwise # because we're not dealing with a creation). self.update_denormalized_fields() if (review_was_moderated): ReviewerScore.award_moderation_points(user_responsible, self.addon, self.pk)
def test_award_moderation_points(self): ReviewerScore.award_moderation_points(self.user, self.addon, 1) score = ReviewerScore.objects.all()[0] assert score.score == ( amo.REVIEWED_SCORES.get(amo.REVIEWED_ADDON_REVIEW)) assert score.note_key == amo.REVIEWED_ADDON_REVIEW
def test_award_moderation_points(self): ReviewerScore.award_moderation_points(self.user, self.addon, 1) score = ReviewerScore.objects.all()[0] assert score.score == (amo.REVIEWED_SCORES.get( amo.REVIEWED_ADDON_REVIEW)) assert score.note_key == amo.REVIEWED_ADDON_REVIEW