[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - DiscussionTool: Make sure to only ask "real" content for their type

Jens Vagelpohl jens at dataflake.org
Wed Sep 24 09:02:15 EDT 2008


Log message for revision 91426:
  - DiscussionTool: Make sure to only ask "real" content for their type
    information when checking whether discussions are allowed or not.
  

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
  U   Products.CMFDefault/trunk/Products/CMFDefault/DiscussionTool.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionTool.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2008-09-24 13:02:03 UTC (rev 91425)
+++ Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2008-09-24 13:02:14 UTC (rev 91426)
@@ -4,6 +4,9 @@
 2.2.0 (unreleased)
 ------------------
 
+- DiscussionTool: Make sure to only ask "real" content for their type
+  information when checking whether discussions are allowed or not.
+
 - skins: Display add actions in the main_template.
   Using folder_factories is now deprecated.
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/DiscussionTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/DiscussionTool.py	2008-09-24 13:02:03 UTC (rev 91425)
+++ Products.CMFDefault/trunk/Products/CMFDefault/DiscussionTool.py	2008-09-24 13:02:14 UTC (rev 91426)
@@ -24,6 +24,7 @@
 
 from Products.CMFCore.interfaces import IDiscussionResponse
 from Products.CMFCore.interfaces import IDiscussionTool
+from Products.CMFCore.interfaces import IDynamicType
 from Products.CMFCore.utils import _checkPermission
 from Products.CMFCore.utils import registerToolInterface
 from Products.CMFCore.utils import UniqueObject
@@ -104,9 +105,13 @@
         """
         if hasattr( aq_base(content), 'allow_discussion' ):
             return bool(content.allow_discussion)
-        typeInfo = content.getTypeInfo()
-        if typeInfo:
-            return bool( typeInfo.allowDiscussion() )
+
+        if IDynamicType.providedBy(content):
+            # Grabbing type information objects only works for dynamic types
+            typeInfo = content.getTypeInfo()
+            if typeInfo:
+                return bool( typeInfo.allowDiscussion() )
+
         return False
 
     #

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionTool.py	2008-09-24 13:02:03 UTC (rev 91425)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionTool.py	2008-09-24 13:02:14 UTC (rev 91426)
@@ -91,6 +91,10 @@
 
         self.failIf(dtool.isDiscussionAllowedFor(baz))
 
+        # Make sure isDiscussionAllowedFor does not blow up on items
+        # that aren't content and/or discussable at all.
+        self.failIf(dtool.isDiscussionAllowedFor(self.site.portal_types))
+
     def test_getDiscussionFor(self):
         dtool = self.site.portal_discussion
         foo = self.site._setObject( 'foo', DummyFolder() )



More information about the Checkins mailing list