Ticket #11625: comment_mod_actions.diff

File comment_mod_actions.diff, 4.3 KB (added by wayla, 6 years ago)

initial patch with tests

  • django/contrib/comments/admin.py

    diff --git a/django/contrib/comments/admin.py b/django/contrib/comments/admin.py
    index 3b1fb14..fda2651 100644
    a b  
    11from django.contrib import admin
    2 from django.contrib.comments.models import Comment
     2from django.contrib.comments.models import Comment, CommentFlag
    33from django.utils.translation import ugettext_lazy as _
    4 from django.contrib.comments import get_model
     4from django.contrib.comments import get_model, signals
    55
    66class CommentsAdmin(admin.ModelAdmin):
    77    fieldsets = (
    class CommentsAdmin(admin.ModelAdmin): 
    2121    date_hierarchy = 'submit_date'
    2222    ordering = ('-submit_date',)
    2323    search_fields = ('comment', 'user__username', 'user_name', 'user_email', 'user_url', 'ip_address')
     24    actions = ['approve', 'remove']
     25
     26    def approve(self, request, queryset):
     27        """ Approve comments through moderation. """
     28        cnt = 0
     29        for comment in queryset:
     30            # Flag the comment as approved.
     31            flag, created = CommentFlag.objects.get_or_create(
     32                comment = comment,
     33                user    = request.user,
     34                flag    = CommentFlag.MODERATOR_APPROVAL
     35            )
     36
     37            comment.is_removed = False
     38            comment.is_public = True
     39            comment.save()
     40
     41            signals.comment_was_flagged.send(
     42                sender  = comment.__class__,
     43                comment = comment,
     44                flag    = flag,
     45                created = created,
     46                request = request
     47            )
     48            cnt += 1
     49        self.message_user(request, '%s successfully approved.' % self._get_message_bit(cnt))
     50    approve.short_description = 'Approve selected comments'
     51
     52    def remove(self, request, queryset):
     53        """ Remove comments through moderation. """
     54        cnt = 0
     55        for comment in queryset:
     56            # Flag the comment as removed.
     57            flag, created = CommentFlag.objects.get_or_create(
     58                comment = comment,
     59                user    = request.user,
     60                flag    = CommentFlag.MODERATOR_DELETION
     61            )
     62
     63            comment.is_removed = True
     64            comment.save()
     65
     66            signals.comment_was_flagged.send(
     67                sender  = comment.__class__,
     68                comment = comment,
     69                flag    = flag,
     70                created = created,
     71                request = request
     72            )
     73            cnt += 1
     74        self.message_user(request, '%s successfully removed.' % self._get_message_bit(cnt))
     75    remove.short_description = 'Remove selected comments'
     76
     77    def _get_message_bit(self, rows_updated):
     78        if rows_updated == 1:
     79            return '1 comment was'
     80        else:
     81            return '%s comments were' % rows_updated
    2482
    2583# Only register the default admin if the model is the built-in comment model
    2684# (this won't be true if there's a custom comment app).
  • tests/regressiontests/comment_tests/tests/__init__.py

    diff --git a/tests/regressiontests/comment_tests/tests/__init__.py b/tests/regressiontests/comment_tests/tests/__init__.py
    index 449fea4..b2ead81 100644
    a b from regressiontests.comment_tests.tests.templatetag_tests import * 
    8787from regressiontests.comment_tests.tests.comment_view_tests import *
    8888from regressiontests.comment_tests.tests.moderation_view_tests import *
    8989from regressiontests.comment_tests.tests.comment_utils_moderators_tests import *
     90from regressiontests.comment_tests.tests.admin_moderation_tests import *
  • tests/regressiontests/comment_tests/urls.py

    diff --git a/tests/regressiontests/comment_tests/urls.py b/tests/regressiontests/comment_tests/urls.py
    index 0058689..76ca4b9 100644
    a b  
    11from django.conf.urls.defaults import *
     2from django.contrib import admin
    23
    34urlpatterns = patterns('regressiontests.comment_tests.custom_comments.views',
    45    url(r'^post/$',          'custom_submit_comment'),
    urlpatterns = patterns('regressiontests.comment_tests.custom_comments.views', 
    78    url(r'^approve/(\d+)/$', 'custom_approve_comment'),
    89)
    910
     11urlpatterns += patterns('',
     12    url(r'^admin/', include(admin.site.urls)),
     13)
     14
Back to Top