[Checkins] SVN: Products.CMFDefault/branches/2.2/Products/CMFDefault/ - WorkflowTool/DiscussionItem: Create a set of GenericSetup

Jens Vagelpohl jens at dataflake.org
Wed Dec 9 08:48:24 EST 2009


Log message for revision 106329:
  - WorkflowTool/DiscussionItem: Create a set of GenericSetup
    upgrade steps to instantiate the new single-state workflow
    for Discussion Items and associate it with the content type.
  

Changed:
  U   Products.CMFDefault/branches/2.2/Products/CMFDefault/CHANGES.txt
  U   Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/configure.zcml
  U   Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/to22.py

-=-
Modified: Products.CMFDefault/branches/2.2/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/branches/2.2/Products/CMFDefault/CHANGES.txt	2009-12-09 12:56:18 UTC (rev 106328)
+++ Products.CMFDefault/branches/2.2/Products/CMFDefault/CHANGES.txt	2009-12-09 13:48:24 UTC (rev 106329)
@@ -4,6 +4,10 @@
 2.2.0 (unreleased)
 ------------------
 
+- WorkflowTool/DiscussionItem: Create a set of GenericSetup 
+  upgrade steps to instantiate the new single-state workflow 
+  for Discussion Items and associate it with the content type.
+
 - MetadataTool: Replaced write-on-read upgrade for the Dublin Core
   metadata definitions with a set of GenericSetup upgrade steps.
 

Modified: Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/configure.zcml
===================================================================
--- Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/configure.zcml	2009-12-09 12:56:18 UTC (rev 106328)
+++ Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/configure.zcml	2009-12-09 13:48:24 UTC (rev 106329)
@@ -104,6 +104,18 @@
         />
 
     <genericsetup:upgradeStep
+        title="Add Single-state workflow"
+        handler=".to22.add_singlestate_workflow"
+        checker=".to22.check_singlestate_workflow"
+        />
+
+    <genericsetup:upgradeStep
+        title="Upgrade Discussion Item workflow"
+        handler=".to22.upgrade_discussionitem_workflow"
+        checker=".to22.check_discussionitem_workflow"
+        />
+
+    <genericsetup:upgradeStep
         title="Upgrade workflow definitions"
         handler=".to22.upgrade_workflow_definitions"
         checker=".to22.check_workflow_definitions"

Modified: Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/to22.py
===================================================================
--- Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/to22.py	2009-12-09 12:56:18 UTC (rev 106328)
+++ Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/to22.py	2009-12-09 13:48:24 UTC (rev 106329)
@@ -17,12 +17,15 @@
 import logging
 from urllib import quote
 
+from AccessControl.Permissions import access_contents_information
+from AccessControl.Permissions import view
 from Acquisition import aq_base
 from Acquisition import aq_inner
 from Acquisition import aq_parent
 from zope.component.interfaces import ComponentLookupError
 
 from Products.CMFCore.interfaces import IWorkflowDefinition
+from Products.CMFCore.permissions import ModifyPortalContent
 from Products.CMFCore.utils import getToolByName
 
 _KNOWN_IMPORT_STEPS = (
@@ -316,3 +319,58 @@
     metadata_tool.DCMI = dcmi
     logger.info('Dublin Core metadata definition updated.')
 
+
+_SINGLESTATE_WF_ID = 'singlestate_workflow'
+
+def check_singlestate_workflow(tool):
+    """2.1.x to 2.2.0 upgrade step checker
+    """
+    wf_tool = getToolByName(tool, 'portal_workflow')
+    return wf_tool.getWorkflowById(_SINGLESTATE_WF_ID) is None
+
+def add_singlestate_workflow(tool):
+    """2.1.x to 2.2.0 upgrade step handler
+    """
+    wf_tool = getToolByName(tool, 'portal_workflow')
+    if wf_tool.getWorkflowById(_SINGLESTATE_WF_ID) is None:
+        from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition
+        wf = DCWorkflowDefinition(_SINGLESTATE_WF_ID)
+        wf.title = 'Single-state workflow'
+        wf.initial_state = 'published'
+        wf.state_var = 'review_state'
+        wf.manager_bypass = False
+        wf.permissions = ( access_contents_information
+                         , ModifyPortalContent
+                         , view
+                         )
+        wf.states.addState('published')
+        public = wf.states.published
+        public.title = 'Public'
+        public.setPermission( access_contents_information
+                            , True
+                            , ('Anonymous', 'Manager')
+                            )
+        public.setPermission(ModifyPortalContent, False, ('Manager', 'Owner'))
+        public.setPermission(view, True, ('Anonymous', 'Manager'))
+        wf_tool._setObject(_SINGLESTATE_WF_ID, wf)
+
+def check_discussionitem_workflow(tool):
+    """2.1.x to 2.2.0 upgrade step checker
+    """
+    wf_tool = getToolByName(tool, 'portal_workflow')
+    discussion_overrides = [x for x in wf_tool.listChainOverrides()
+                                               if x[0] == 'Discussion Item']
+
+    # Only apply if Discussion Item has an empty workflow chain
+    if discussion_overrides and not discussion_overrides[0][1]:
+        return True
+
+    return False
+
+def upgrade_discussionitem_workflow(tool):
+    """2.1.x to 2.2.0 upgrade step handler
+    """
+    wf_tool = getToolByName(tool, 'portal_workflow')
+    wf_tool.setChainForPortalTypes(('Discussion Item',), _SINGLESTATE_WF_ID)
+
+



More information about the checkins mailing list