[1] | 1 | from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition |
---|
| 2 | from Products.CMFCore.CMFCorePermissions import ModifyPortalContent |
---|
| 3 | from AccessControl.Permissions import view, access_contents_information |
---|
| 4 | from Products.DCWorkflow.Default import r_anon, r_manager, r_owner, p_access, p_modify, p_view |
---|
| 5 | from Products.CMFCore import CMFCorePermissions |
---|
| 6 | |
---|
| 7 | def setupWorkflow(wf): |
---|
| 8 | for state in ('private', 'published',): |
---|
| 9 | wf.states.addState(state) |
---|
| 10 | for transition in ('publish', 'hide'): |
---|
| 11 | wf.transitions.addTransition(transition) |
---|
| 12 | for permision in (p_access, p_modify, view): |
---|
| 13 | wf.addManagedPermission(permision) |
---|
| 14 | |
---|
| 15 | # set initial state |
---|
| 16 | wf.states.setInitialState('published') |
---|
| 17 | |
---|
| 18 | wf_private = wf.states['private'] |
---|
| 19 | wf_private.setProperties( |
---|
| 20 | title='Visible and editable only by owner', |
---|
| 21 | transitions=('publish',)) |
---|
| 22 | wf_private.setPermission(p_access, 0, (r_manager, r_owner)) |
---|
| 23 | wf_private.setPermission(p_view, 0, (r_manager, r_owner)) |
---|
| 24 | wf_private.setPermission(p_modify, 0, (r_manager, r_owner)) |
---|
| 25 | |
---|
| 26 | wf.permissions+=(CMFCorePermissions.ListFolderContents, ) |
---|
| 27 | wf.states.private.permission_roles[CMFCorePermissions.ListFolderContents]=['Authenticated', r_manager] |
---|
| 28 | |
---|
| 29 | wf_published = wf.states['published'] |
---|
| 30 | wf_published.setProperties( |
---|
| 31 | title='Public', |
---|
| 32 | transitions=('hide',)) |
---|
| 33 | wf_published.setPermission(p_access, 1, (r_manager,)) |
---|
| 34 | wf_published.setPermission(p_view, 1, (r_anon, r_manager)) |
---|
| 35 | wf_published.setPermission(p_modify, 0, (r_manager, )) |
---|
| 36 | |
---|
| 37 | wf.states.published.permission_roles[CMFCorePermissions.ListFolderContents]=[r_anon,] |
---|
| 38 | |
---|
| 39 | tdef = wf.transitions['hide'] |
---|
| 40 | tdef.setProperties( |
---|
| 41 | title='Member makes content private', |
---|
| 42 | new_state_id='private', |
---|
| 43 | actbox_name='Make private', |
---|
| 44 | actbox_url='%(content_url)s/content_hide_form', |
---|
| 45 | props={'guard_roles':r_owner}) |
---|
| 46 | |
---|
| 47 | tdef = wf.transitions['publish'] |
---|
| 48 | tdef.setProperties( |
---|
| 49 | title='Reviewer publishes content', |
---|
| 50 | new_state_id='published', |
---|
| 51 | actbox_name='Publish', |
---|
| 52 | actbox_url='%(content_url)s/content_publish_form', |
---|
| 53 | props={'guard_permissions':r_anon}) |
---|
| 54 | |
---|
| 55 | wf.variables.setStateVar('review_state') |
---|
| 56 | |
---|
| 57 | #create workflow |
---|
| 58 | def createWorkflow(id): |
---|
| 59 | wf = DCWorkflowDefinition(id) |
---|
| 60 | setupWorkflow(wf) |
---|
| 61 | return wf |
---|
| 62 | |
---|