From 9b7be918edb6a821af786975db645b8f8d261a2c Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sat, 13 Nov 2010 18:42:56 +0000 Subject: [PATCH] Fixed #12325 -- Allows zero values for moderate_after and close_after fields of comment moderators. Thanks, Gabriel Hurley. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14556 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/comments/moderation.py | 10 ++++++---- docs/ref/contrib/comments/moderation.txt | 12 ++++++++++-- .../tests/comment_utils_moderators_tests.py | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/django/contrib/comments/moderation.py b/django/contrib/comments/moderation.py index 7f429c55e0..17d61dadd6 100644 --- a/django/contrib/comments/moderation.py +++ b/django/contrib/comments/moderation.py @@ -205,8 +205,9 @@ class CommentModerator(object): if self.enable_field: if not getattr(content_object, self.enable_field): return False - if self.auto_close_field and self.close_after: - if self._get_delta(datetime.datetime.now(), getattr(content_object, self.auto_close_field)).days >= self.close_after: + if self.auto_close_field and self.close_after is not None: + close_after_date = getattr(content_object, self.auto_close_field) + if close_after_date is not None and self._get_delta(datetime.datetime.now(), close_after_date).days >= self.close_after: return False return True @@ -220,8 +221,9 @@ class CommentModerator(object): non-public), ``False`` otherwise. """ - if self.auto_moderate_field and self.moderate_after: - if self._get_delta(datetime.datetime.now(), getattr(content_object, self.auto_moderate_field)).days >= self.moderate_after: + if self.auto_moderate_field and self.moderate_after is not None: + moderate_after_date = getattr(content_object, self.auto_moderate_field) + if moderate_after_date is not None and self._get_delta(datetime.datetime.now(), moderate_after_date).days >= self.moderate_after: return True return False diff --git a/docs/ref/contrib/comments/moderation.txt b/docs/ref/contrib/comments/moderation.txt index 519bc5edd1..4f4b326cb2 100644 --- a/docs/ref/contrib/comments/moderation.txt +++ b/docs/ref/contrib/comments/moderation.txt @@ -104,7 +104,9 @@ Built-in moderation options If :attr:`auto_close_field` is used, this must specify the number of days past the value of the field specified by :attr:`auto_close_field` after which new comments for an object - should be disallowed. Default value is ``None``. + should be disallowed. Allowed values are ``None``, 0 (which disallows + comments immediately), or any positive integer. Default value is + ``None``. .. attribute:: email_notification @@ -126,12 +128,18 @@ Built-in moderation options If :attr:`auto_moderate_field` is used, this must specify the number of days past the value of the field specified by :attr:`auto_moderate_field` after which new comments for an object - should be marked non-public. Default value is ``None``. + should be marked non-public. Allowed values are ``None``, 0 (which + moderates comments immediately), or any positive integer. Default + value is ``None``. Simply subclassing :class:`CommentModerator` and changing the values of these options will automatically enable the various moderation methods for any models registered using the subclass. +.. versionchanged:: 1.3 + +``moderate_after`` and ``close_after`` now accept 0 as a valid value. + Adding custom moderation methods -------------------------------- diff --git a/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py b/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py index 2e93b8b19a..9728490bc2 100644 --- a/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py +++ b/tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py @@ -19,6 +19,14 @@ class EntryModerator4(CommentModerator): auto_moderate_field = 'pub_date' moderate_after = 7 +class EntryModerator5(CommentModerator): + auto_moderate_field = 'pub_date' + moderate_after = 0 + +class EntryModerator6(CommentModerator): + auto_close_field = 'pub_date' + close_after = 0 + class CommentUtilsModeratorTests(CommentTestCase): fixtures = ["comment_utils.xml"] @@ -73,3 +81,13 @@ class CommentUtilsModeratorTests(CommentTestCase): moderator.register(Entry, EntryModerator4) c1, c2 = self.createSomeComments() self.assertEquals(c2.is_public, False) + + def testAutoModerateFieldImmediate(self): + moderator.register(Entry, EntryModerator5) + c1, c2 = self.createSomeComments() + self.assertEquals(c2.is_public, False) + + def testAutoCloseFieldImmediate(self): + moderator.register(Entry, EntryModerator6) + c1, c2 = self.createSomeComments() + self.assertEquals(Comment.objects.all().count(), 0) \ No newline at end of file