[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - Discussions: Replaced the old (and no longer working) way to force

Jens Vagelpohl jens at dataflake.org
Sun Sep 14 05:35:55 EDT 2008


Log message for revision 91135:
  - Discussions: Replaced the old (and no longer working) way to force
    Discussion Items into published state by default with a real
    single-state workflow so they are put into published state correctly.
    (https://bugs.launchpad.net/zope-cmf/+bug/161720)
  

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
  U   Products.CMFDefault/trunk/Products/CMFDefault/DiscussionItem.py
  A   Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows/singlestate_workflow/
  A   Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows/singlestate_workflow/definition.xml
  U   Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows.xml
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionReply.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2008-09-13 23:23:33 UTC (rev 91134)
+++ Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2008-09-14 09:35:53 UTC (rev 91135)
@@ -4,6 +4,11 @@
 2.2.0 (unreleased)
 ------------------
 
+- Discussions: Replaced the old (and no longer working) way to force 
+  Discussion Items into published state by default with a real 
+  single-state workflow so they are put into published state correctly.
+  (https://bugs.launchpad.net/zope-cmf/+bug/161720)
+
 - ZMI: Prevent users from creating content through the ZMI by hiding the
   entry for "CMFDefault Content".
 

Modified: Products.CMFDefault/trunk/Products/CMFDefault/DiscussionItem.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/DiscussionItem.py	2008-09-13 23:23:33 UTC (rev 91134)
+++ Products.CMFDefault/trunk/Products/CMFDefault/DiscussionItem.py	2008-09-14 09:35:53 UTC (rev 91135)
@@ -48,8 +48,6 @@
     portal_type         = 'Discussion Item'
     allow_discussion    = 1
     in_reply_to         = None
-    # XXX this is wrong, it precludes the use of a normal workflow.
-    review_state        ='published'
 
     security = ClassSecurityInfo()
 

Added: Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows/singlestate_workflow/definition.xml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows/singlestate_workflow/definition.xml	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows/singlestate_workflow/definition.xml	2008-09-14 09:35:53 UTC (rev 91135)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<dc-workflow workflow_id="singlestate_workflow"
+             title="Single-state workflow"
+             description="" state_variable="review_state"
+             initial_state="published">
+
+ <permission>Access contents information</permission>
+ <permission>Modify portal content</permission>
+ <permission>View</permission>
+
+ <state state_id="published" title="Public">
+  <permission-map name="Access contents information"
+                  acquired="True">
+   <permission-role>Anonymous</permission-role>
+   <permission-role>Manager</permission-role>
+  </permission-map>
+  <permission-map name="Modify portal content"
+                  acquired="False">
+   <permission-role>Manager</permission-role>
+   <permission-role>Owner</permission-role>
+  </permission-map>
+  <permission-map name="View" acquired="True">
+   <permission-role>Anonymous</permission-role>
+   <permission-role>Manager</permission-role>
+  </permission-map>
+ </state>
+
+</dc-workflow>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows.xml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows.xml	2008-09-13 23:23:33 UTC (rev 91134)
+++ Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/workflows.xml	2008-09-14 09:35:53 UTC (rev 91135)
@@ -2,10 +2,14 @@
 <object name="portal_workflow" meta_type="CMF Workflow Tool">
  <property name="title"></property>
  <object name="default_workflow" meta_type="Workflow"/>
+ <object name="singlestate_workflow" meta_type="Workflow"/>
  <bindings>
   <default>
    <bound-workflow workflow_id="default_workflow"/>
   </default>
+  <type type_id="Discussion Item">
+    <bound-workflow workflow_id="singlestate_workflow"/>
+  </type>
   <type type_id="CMF BTree Folder"/>
   <type type_id="Folder"/>
  </bindings>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionReply.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionReply.py	2008-09-13 23:23:33 UTC (rev 91134)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_DiscussionReply.py	2008-09-14 09:35:53 UTC (rev 91135)
@@ -19,6 +19,7 @@
 from Testing import ZopeTestCase
 
 from AccessControl.SecurityManagement import newSecurityManager
+from AccessControl.SecurityManagement import getSecurityManager
 from zope.app.component.hooks import setSite
 
 from Products.CMFDefault.testing import FunctionalLayer
@@ -50,12 +51,22 @@
 
     def testDiscussionReply(self):
         self.discussion.getDiscussionFor(self.portal.doc)
-        self.portal.doc.talkback.createReply('Title', 'Text')
-        reply = self.portal.doc.talkback.objectValues()[0]
+        reply_id = self.portal.doc.talkback.createReply('Title', 'Text')
+        talkback = self.discussion.getDiscussionFor(self.portal.doc)
+        reply = talkback.getReply(reply_id)
         self.assertEqual(reply.Title(), 'Title')
         self.assertEqual(reply.EditableBody(), 'Text')
 
+        # Make sure the user who created the reply can actually see it
+        # https://bugs.launchpad.net/zope-cmf/+bug/161720
+        state = self.portal.portal_workflow.getInfoFor(reply, 'review_state')
+        self.assertEqual(state, 'published')
+        member = self.portal.portal_membership.getAuthenticatedMember()
+        self.failUnless(member.has_permission('View', reply))
+        self.failUnless(member.has_permission('Access contents information',
+                         reply))
 
+
 class DiscussionReplyTestMember(DiscussionReplyTest):
 
     # Run the test again as another Member, i.e. reply to someone



More information about the Checkins mailing list