Anonymous avatar Anonymous committed 24da369

Fixed #12325 -- Allows zero values for moderate_after and close_after fields of comment moderators. Thanks, Gabriel Hurley.

Comments (0)

Files changed (3)

django/contrib/comments/moderation.py

         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
 
         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
 

docs/ref/contrib/comments/moderation.txt

         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
 
         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
 --------------------------------
 

tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py

     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"]
 
         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)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.