[zopeorg-checkins] CVS: Products/ZopeOrg-NV - ZopeOrgWorkflow.py:1.18 __init__.py:1.19

Sidnei da Silva sidnei at x3ng.com.br
Tue Feb 11 13:41:52 EST 2003


Update of /cvs-zopeorg/Products/ZopeOrg-NV
In directory cvs.zope.org:/tmp/cvs-serv7019

Modified Files:
	ZopeOrgWorkflow.py __init__.py 
Log Message:
Ouch. Forgot to commit this before going to Paris. :(

=== Products/ZopeOrg-NV/ZopeOrgWorkflow.py 1.17 => 1.18 ===
-"""
-A specialized workflow for zope.org which defines a variety of new states 
-and transition conditions
-"""
-__version__='$Revision$'[11:-2]
-
-
-from Products.CMFCore.WorkflowTool import addWorkflowClass
-from Globals import InitializeClass
-from Products.CMFCore.WorkflowCore import ObjectDeleted, ObjectMoved
-from Products.CMFCore.utils import getToolByName, _checkPermission
-from Products.CMFCore.utils import _modifyPermissionMappings
-from Products.CMFDefault.DefaultWorkflow import DefaultWorkflowDefinition
-from Products.CMFDefault.Favorite import Favorite
-from Acquisition import aq_base, aq_inner, aq_parent
-from string import replace
-
-
-class ZopeOrgWorkflowDefinition( DefaultWorkflowDefinition ):
-    id = 'zopeorg_workflow'
-    title = 'General Zope.org Workflow'
-    _isAWorkflow = 1
-
-
-    def __init__(self, id):
-        self.id = id
-
-
-    def listObjectActions(self, info):
-        '''
-        Allows this workflow to
-        include actions to be displayed in the actions box.
-        Called only when this workflow is applicable to
-        info.content.
-        Returns the actions to be displayed to the user.
-        '''
-        if info.isAnonymous:
-            return None
-
-        # The following operation is quite expensive.
-        # We don't need to perform it if the user
-        # doesn't have the required permission.
-        content = info.content
-        content_url = info.content_url
-        content_creator = content.Creator()
-        pm = getToolByName(self, 'portal_membership')
-        current_user = pm.getAuthenticatedMember().getUserName()
-        review_state = self.getReviewStateOf(content)
-        actions = []
- 
-        allow_review = _checkPermission('Review portal content', content)
-        allow_request = _checkPermission('Request review', content)
-        allow_change = _checkPermission('Manage properties', content)
-        is_owner = current_user == content_creator 
-        is_sitemanager = _checkPermission('Manage portal', content)
-        append_action = (lambda name, p, url=content_url, a=actions.append:
-                         a({'name': name,
-                            'url': url + '/' + p,
-                            'permissions': (),
-                            'category': 'workflow'}))
- 
-        show_reject = 0
-        show_retract = 0
-        show_obsolete = 0
- 
-        if review_state == 'private':
-            if allow_request:
-                if is_sitemanager:
-                    append_action('Publish', 'content_publish_form')
-                else:
-                    append_action('Submit', 'content_submit_form')
-            if is_owner:
-                show_obsolete = 1
- 
-        elif review_state == 'pending':
-            if is_owner and allow_request:
-                show_retract = 1
-            if is_sitemanager or ( allow_review and not is_owner ):
-                append_action('Publish', 'content_publish_form')
-                show_reject = 1
- 
-        elif review_state == 'published':
-            if is_owner and allow_request:
-                show_retract = 1
-                show_obsolete = 1
-            if allow_review and not is_owner:
-                show_reject = 1
-
-        elif review_state == 'obsolete':
-            if allow_request or allow_review:
-                append_action('Restore', 'content_refresh_form')
-
-        if show_retract:
-            append_action('Retract', 'content_retract_form')
-        if show_obsolete:
-            append_action('Obsolete', 'content_obsolete_form')
-        if show_reject:
-            append_action('Reject', 'content_reject_form')
-        if allow_review or allow_request:
-            append_action('Status history', 'content_status_history')
- 
-        return actions
-
-
-    def listGlobalActions(self, info):
-        '''
-        Allows this workflow to
-        include actions to be displayed in the actions box.
-        Called on every request.
-        Returns the actions to be displayed to the user.
-        '''
-        if (info.isAnonymous or not _checkPermission(
-            'Review portal content', info.portal)):
-            return None
- 
-        actions = []
-        return actions
-
-
-    def isActionSupported(self, ob, action):
-        '''
-        Returns a true value if the given action name is supported.
-        '''
-        return (action in ( 'submit'
-                          , 'retract'
-                          , 'publish'
-                          , 'reject'
-                          , 'obsolete'
-                          , 'refresh'
-                          ))
-
-
-    def doActionFor(self, ob, action, comment='', **kw):
-        '''
-        Allows the user to request a workflow action.  This method
-        must perform its own security checks.
-        '''
-        allow_review = _checkPermission('Review portal content', ob)
-        allow_request = _checkPermission('Request review', ob)
-        allow_change = _checkPermission('Manage properties', ob)
-        is_sitemanager = _checkPermission('Manage portal', ob)
-        content_creator = ob.Creator()
-        pm = getToolByName(self, 'portal_membership')
-        current_user = pm.getAuthenticatedMember().getUserName()
-        is_owner = current_user == content_creator
-        review_state = self.getReviewStateOf(ob)
-        tool = aq_parent(aq_inner(self))
- 
-        if action == 'submit':
-            if not allow_request:
-                raise 'Unauthorized', 'Not authorized'
-            elif review_state != 'private':
-                raise 'Unauthorized', 'Already in submit state'
-            self.setReviewStateOf(ob, 'pending', action, comment)
- 
-        elif action == 'retract':
-            if not allow_request:
-                raise 'Unauthorized', 'Not authorized'
-            elif review_state == 'private':
-                raise 'Unauthorized', 'Already private'
-
-            if (not is_owner) and not allow_review:
-                raise 'Unauthorized', 'Not creator or reviewer'
-            self.setReviewStateOf(ob, 'private', action, comment)
- 
-        elif action == 'publish':
-            if ( not allow_review or is_owner ) and not is_sitemanager:
-                    raise 'Unauthorized', 'Not authorized'
-            self.setReviewStateOf(ob, 'published', action, comment)
-
-        elif action == 'reject':
-            if not allow_review or is_owner:
-                raise 'Unauthorized', 'Not authorized'
-                
-            self.setReviewStateOf(ob, 'private', action, comment)
-
-        elif action == 'obsolete':
-            if not allow_change:
-                raise 'Unauthorized', 'Not authorized'
-            self.setReviewStateOf(ob, 'obsolete', action, comment)
-            self.unindexObject()
-            raise ObjectDeleted
-
-        elif action == 'refresh':
-            if review_state != 'obsolete':
-                msg = 'Only "obsolete" content can be refreshed'
-                raise 'Unauthorized', msg
-            wf_tool = getToolByName(self, 'portal_workflow')
-            wf_chain = wf_tool.getChainFor(ob)
-            if wf_chain:
-                wf_id = wf_chain[0]
-            wf_history = wf_tool.getHistoryOf(wf_id, ob)
-            if len(wf_history) > 1:
-                prev_status = wf_history[-2]['review_state']
-            else:
-                prev_status = 'private'
-                
-            self.setReviewStateOf(ob, prev_status, action, comment)
-
-
-    def updateRoleMappingsFor(self, ob):
-        '''
-        Changes the object permissions according to the current
-        review_state.
-        '''
-        review_state = self.getReviewStateOf(ob)
-        if review_state == 'private':
-            anon_view = 0
-            owner_modify = 1
-            reviewer_view = 0
-        elif review_state == 'pending':
-            anon_view = 0
-            owner_modify = 0  # Require a retraction for editing.
-            reviewer_view = 1
-        elif review_state == 'published':
-            anon_view = 1
-            owner_modify = 0
-            reviewer_view = 1
-        elif review_state == 'obsolete':
-            anon_view = 1
-            owner_modify = 1
-            reviewer_view = 1
-
-        # Modify role to permission mappings directly.
- 
-        return _modifyPermissionMappings(ob,
-            {'View': {'Anonymous': anon_view,
-                      'Reviewer': reviewer_view,
-                      'Owner': 1,
-                      },
-             'Modify portal content': {'Owner': owner_modify}})
-
-
-InitializeClass( ZopeOrgWorkflowDefinition )
-
-addWorkflowClass( ZopeOrgWorkflowDefinition )
+from Products.CMFCore.WorkflowTool import addWorkflowFactory
+from Products.DCWorkflow.Default import createDefaultWorkflowClassic
+from Products.PythonScripts.PythonScript import PythonScript
+from Products.CMFCore.CMFCorePermissions import ReviewPortalContent, \
+     RequestReview
+
+obsolete_script_id = 'obsoleteObject'
+obsolete_script = '''
+## Script (Python) "%s"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=state_change
+##title=Uncatalog an obsolete object
+state_change.object.unindexObject()
+''' % obsolete_script_id
+
+refresh_script_id = 'refreshObject'
+refresh_script = '''
+## Script (Python) "%s"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=state_change
+##title=Revert an object to previous state, and recatalog it
+state_change.object.reindexObject()
+''' % refresh_script_id
+
+def createZopeOrgWorkflow(id):
+    wf = createDefaultWorkflowClassic(id)
+    setupZopeOrgWorkflow(wf)
+    return wf
+
+addWorkflowFactory( createZopeOrgWorkflow, id='zopeorg_default_workflow'
+                  , title='Default Zope.org Workflow')
+
+obsoletable_states = ('private', 'published')
+obsolete_state = 'obsolete'
+obsolete_trans = obsolete_state
+refresh_trans = 'refresh'
+
+def setupZopeOrgWorkflow(wf):
+    '''
+    Add obsoleting/refreshing transitions and state to classic wf
+    '''
+    wf.setProperties(title='Zope.org workflow')
+
+    wf.transitions.addTransition(obsolete_trans)
+    wf.transitions.addTransition(refresh_trans)
+
+    wf.states.addState(obsolete_state)
+    wf.states[obsolete_state].setProperties(
+        title='Obsolete (uncataloged)',
+        transitions=(refresh_trans,))
+
+    for state in obsoletable_states:
+        wf.states[state].transitions += (obsolete_trans,)
+
+    # eek! why no addScript() method?
+    wf.scripts._setObject(obsolete_script_id,
+                          PythonScript(obsolete_script_id))
+    getattr(wf.scripts, obsolete_script_id).write(obsolete_script)
+    wf.scripts._setObject(refresh_script_id, PythonScript(refresh_script_id))
+    getattr(wf.scripts, refresh_script_id).write(refresh_script)
+
+    wf.transitions[obsolete_trans].setProperties(
+        title = 'Make content obsolete',
+        new_state_id = obsolete_state,
+        actbox_name = 'Obsolete',
+        actbox_url = '%(content_url)s/content_obsolete_form',
+        props = {'guard_permissions': '%s;%s' % (ReviewPortalContent,
+                                                 RequestReview)},
+        after_script_name = obsolete_script_id)
+
+    wf.transitions[refresh_trans].setProperties(
+        title = 'Re-enable obsolete content',
+        new_state_id = 'private',
+        actbox_name = 'Refresh',
+        actbox_url = '%(content_url)s/content_refresh_form',
+        props = {'guard_permissions': '%s;%s' % (ReviewPortalContent,
+                                                 RequestReview)},
+        after_script_name = refresh_script_id)


=== Products/ZopeOrg-NV/__init__.py 1.18 => 1.19 ===
 from Products.CMFCore.utils import registerIcon, ToolInit, ContentInit
 from Products.CMFCore.CMFCorePermissions import AddPortalContent
 from Products.CMFCore import PortalFolder
-#import SoftwareProduct
-import NewsItemWorkflow
 import ZopeOrgWorkflow
-#import ZopeOrgMemberDataTool
-#import ZopeOrgMembershipTool
 import ContentList
 import Acquisition
 import CaseStudy
 import ZopeServiceProvider
+#import SoftwareProduct
+#import ZopeOrgMemberDataTool
+#import ZopeOrgMembershipTool
 
 #Hackish workaround to allow accesing the broken ZODB on ZopeOrg
 class ImplicitAcquirerWrapper:
@@ -37,21 +36,24 @@
 
 def initialize( context ):
     """ Initialize the ZopeOrg components """
-    registerIcon( NewsItemWorkflow.NewsItemWorkflowDefinition
-                , 'images/org_workflow.gif'
-                , globals()
-                )
-
-    registerIcon( ZopeOrgWorkflow.ZopeOrgWorkflowDefinition
-                , 'images/org_workflow.gif'
-                , globals()
-                )
 
     context.registerClass( ContentList.ContentList
                          , constructors=CL_CTORS
                          , permission='Manage portal'
                          )
 
+    ContentInit(
+       'Zope.org Content',
+       content_types = ( CaseStudy.CaseStudy
+                       , ZopeServiceProvider.ZopeServiceProvider
+                       ),
+       permission = AddPortalContent,
+       extra_constructors = ( CaseStudy.addCaseStudy
+                            , ZopeServiceProvider.addZSP
+                            ),
+       fti = ftis ,
+       ).initialize(context)
+
     #ToolInit(
     #    'Zope.Org Tools',
     #    tools = ( ZopeOrgMemberDataTool.ZopeOrgMemberDataTool
@@ -72,15 +74,3 @@
     #                         ),
     #    fti = ftis ,
     #    ).initialize(context)
-
-    ContentInit(
-       'Zope.org Content',
-       content_types = ( CaseStudy.CaseStudy
-                       , ZopeServiceProvider.ZopeServiceProvider
-                       ),
-       permission = AddPortalContent,
-       extra_constructors = ( CaseStudy.addCaseStudy
-                            , ZopeServiceProvider.addZSP
-                            ),
-       fti = ftis ,
-       ).initialize(context)





More information about the zopeorg-checkins mailing list