Esempio n. 1
0
    def testListWFStatesByTitle(self):
        from Products.CMFPlone.WorkflowTool import WorkflowTool
        from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition
        from Products.DCWorkflow.States import StateDefinition

        tool = WorkflowTool()

        # Test without workflows
        self.assertListEqual(tool.listWFStatesByTitle(), [])
        self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True), [])

        # Test with an empty workflow
        tool["foo"] = DCWorkflowDefinition("foo")

        self.assertListEqual(tool.listWFStatesByTitle(), [])
        self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True), [])

        # Test with dummy states
        tool["foo"].states["private"] = StateDefinition("private")
        tool["foo"].states["published"] = StateDefinition("published")

        expected = [(
            "",
            "private",
        ), ("", "published")]
        self.assertListEqual(tool.listWFStatesByTitle(), expected)
        self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True),
                             expected)

        # Test with concurrent states
        tool["bar"] = DCWorkflowDefinition("bar")
        tool["bar"].states["private"] = StateDefinition("private")
        tool["bar"].states["pending"] = StateDefinition("pending")
        tool["bar"].states["published"] = StateDefinition("published")
        tool["bar"].states["published"].setProperties(title="Published")
        expected = [
            (
                "",
                "private",
            ),
            ("", "published"),
            (
                "",
                "private",
            ),
            ("", "pending"),
            ("Published", "published"),
        ]
        self.assertListEqual(tool.listWFStatesByTitle(), expected)
        expected = [
            (
                "",
                "private",
            ),
            ("", "published"),
            ("", "pending"),
            ("Published", "published"),
        ]
        self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True),
                             expected)
def createHansardWorkflow(self, id):
    """Create the workflow for Bungeni.
    """

    ob = DCWorkflowDefinition(id)
    setupHansardWorkflow(self, ob)
    return ob
Esempio n. 3
0
    def setUp(self):
        from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI
        from Products.CMFCore.tests.base.dummy import DummySite
        from Products.CMFCore.tests.base.dummy import DummyUserFolder
        from Products.CMFCore.tests.base.tidata import FTIDATA_DUMMY
        SecurityTest.setUp(self)
        self.site = DummySite('site').__of__(self.root)
        self.acl_users = self.site._setObject('acl_users', DummyUserFolder())
        self.ttool = self.site._setObject('portal_types', self._makeOne())
        fti = FTIDATA_DUMMY[0].copy()
        self.ttool._setObject('Dummy Content', FTI(**fti))

        # setup workflow tool
        # to test 'Instance creation conditions' of workflows
        from Products.CMFCore.WorkflowTool import WorkflowTool
        self.site._setObject('portal_workflow', WorkflowTool())
        wftool = self.site.portal_workflow

        from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition
        wftool._setObject('wf', DCWorkflowDefinition('wf'))
        wftool.setDefaultChain('wf')
        wf = wftool.wf
        wf.states.addState('initial')
        wf.states.setInitialState('initial')

        from Products.DCWorkflow.Guard import Guard
        g = Guard()
        wf.creation_guard = g
Esempio n. 4
0
def createWestminsterBillWorkflow(self, id):
    """Create the workflow for Bungeni.
    """

    ob = DCWorkflowDefinition(id)
    setupWestminsterBillWorkflow(self, ob)
    return ob
Esempio n. 5
0
def createLensWorkflow(self, id):
    """Create the workflow for Lensmaker.
    """

    ob = DCWorkflowDefinition(id)
    setupLensWorkflow(self, ob)
    return ob
def createRotaFolderWorkflow(self, id):
    """Create the workflow for Bungeni.
    """

    ob = DCWorkflowDefinition(id)
    setupRotaFolderWorkflow(self, ob)
    return ob
def createMemberAutoWorkflow(self, id):
    """Create the workflow for Bungeni.
    """

    ob = DCWorkflowDefinition(id)
    setupMemberAutoWorkflow(self, ob)
    return ob
Esempio n. 8
0
def createOfficeWorkflow(self, id):
    """Create the workflow for Bungeni.
    """

    ob = DCWorkflowDefinition(id)
    setupOfficeWorkflow(self, ob)
    return ob
Esempio n. 9
0
def createParliamentWorkflow(self, id):
    """Create the workflow for Bungeni.
    """

    ob = DCWorkflowDefinition(id)
    setupParliamentWorkflow(self, ob)
    return ob
Esempio n. 10
0
def createPoliticalGroupWorkflow(self, id):
    """Create the workflow for Bungeni.
    """

    ob = DCWorkflowDefinition(id)
    setupPoliticalGroupWorkflow(self, ob)
    return ob
Esempio n. 11
0
    def _constructDummyWorkflow(self):
        from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition

        wftool = self.site.portal_workflow
        wftool._setObject('wf', DCWorkflowDefinition('wf'))
        wftool.setDefaultChain('wf')
        wf = wftool.wf

        wf.states.addState('private')
        sdef = wf.states['private']
        sdef.setProperties(transitions=('publish', ))

        wf.states.addState('published')
        wf.states.setInitialState('private')

        wf.transitions.addTransition('publish')
        tdef = wf.transitions['publish']
        tdef.setProperties(title='', new_state_id='published', actbox_name='')

        wf.variables.addVariable('comments')
        vdef = wf.variables['comments']
        vdef.setProperties(
            description='',
            default_expr="python:state_change.kwargs.get('comment', '')",
            for_status=1,
            update_always=1)
Esempio n. 12
0
def addMissingWorkflows(context):
    """Add new Plone 3.0 workflows
    """
    portal = getToolByName(context, 'portal_url').getPortalObject()
    wft = getToolByName(portal, 'portal_workflow', None)
    if wft is None:
        return

    new_workflow_ids = [ 'intranet_workflow', 'intranet_folder_workflow',
                        'one_state_workflow', 'simple_publication_workflow']
    encoding = 'utf-8'
    path_prefix = os.path.join(package_home(cmfplone_globals), 'profiles',
            'default', 'workflows')

    for wf_id in new_workflow_ids:
        if wf_id in wft.objectIds():
            logger.info("Workflow %s already installed; doing nothing" % wf_id)
            continue

        path = os.path.join(path_prefix, wf_id, 'definition.xml')
        body = open(path,'r').read()

        wft._setObject(wf_id, DCWorkflowDefinition(wf_id))
        wf = wft[wf_id]
        wfdc = WorkflowDefinitionConfigurator(wf)

        ( workflow_id
        , title
        , state_variable
        , initial_state
        , states
        , transitions
        , variables
        , worklists
        , permissions
        , scripts
        , description
        , manager_bypass
        , creation_guard
        ) = wfdc.parseWorkflowXML(body, encoding)

        _initDCWorkflow( wf
                       , title
                       , description
                       , manager_bypass
                       , creation_guard
                       , state_variable
                       , initial_state
                       , states
                       , transitions
                       , variables
                       , worklists
                       , permissions
                       , scripts
                       , portal     # not sure what to pass here
                                    # the site or the wft?
                                    # (does it matter at all?)
                      )
        logger.info("Added workflow %s" % wf_id)
Esempio n. 13
0
    def _constructDummyWorkflow(self):
        from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition

        wftool = self.site.portal_workflow
        wftool._setObject('wf', DCWorkflowDefinition('wf'))
        wftool.setDefaultChain('wf')
        wf = wftool.wf
        wf.worklists.addWorklist('reviewer_queue')
Esempio n. 14
0
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)
Esempio n. 15
0
    def setUp(self):
        self.site = DummySite('site')
        self.site._setObject('portal_types', DummyTool())
        self.site._setObject('portal_workflow', WorkflowTool())

        # Construct a workflow
        wftool = self.site.portal_workflow
        wftool._setObject('wf', DCWorkflowDefinition('wf'))
        wftool.setDefaultChain('wf')
Esempio n. 16
0
    def setUp(self):
        self.site = DummySite('site')

        # Construct a workflow
        self.wtool = WorkflowTool()
        self.wtool._setObject('wf', DCWorkflowDefinition('wf'))
        self.wtool.setDefaultChain('wf')
        sm = getSiteManager()
        sm.registerUtility(self.wtool, IWorkflowTool)
        sm.registerUtility(DummyTool(), ITypesTool)
Esempio n. 17
0
  def _checkTransitionGuard(self, t, ob, **kw):
    # This check can be implemented with a guard expression, but
    # it has a lot of overhead to use a TALES, so we make a special
    # treatment for the frequent case, that is, disallow the trigger
    # on a temporary document.
    if t.temporary_document_disallowed:
      isTempDocument = getattr(ob, 'isTempDocument', None)
      if isTempDocument is not None:
        if isTempDocument():
          return 0

    return DCWorkflowDefinition._checkTransitionGuard(self, t, ob, **kw)
Esempio n. 18
0
    def _checkTransitionGuard(self, t, ob, **kw):
        # This check can be implemented with a guard expression, but
        # it has a lot of overhead to use a TALES, so we make a special
        # treatment for the frequent case, that is, disallow the trigger
        # on a temporary document.
        if t.temporary_document_disallowed:
            isTempDocument = getattr(ob, 'isTempDocument', None)
            if isTempDocument is not None:
                if isTempDocument():
                    return 0

        return DCWorkflowDefinition._checkTransitionGuard(self, t, ob, **kw)
Esempio n. 19
0
def create(workflow_id):
    """create a workflow

    >>> from Products.AlphaFlow.Extensions import dcworkflow
    >>> wf = dcworkflow.create('simple')
    >>> wf.getId()
    'simple'

    >>> wf = dcworkflow.create('complex')
    >>> wf.getId()
    'complex'
    """
    ob = DCWorkflowDefinition(workflow_id)
    return ob
def createPSC_improvementproposal_workflow(id):
    "..."
    ob = DCWorkflowDefinition(id)
    setupPSC_improvementproposal_workflow(ob)
    return ob
Esempio n. 21
0
def createERP5Workflow(id):
    """Creates an ERP5 Workflow """
    ob = DCWorkflowDefinition(id)
    setupERP5Workflow(ob)
    return ob
Esempio n. 22
0
def importWorkflowTool(context):
    """ Import worflow tool and contained workflow definitions.

    o 'context' must implement IImportContext.

    o Register via Python:

      registry = site.portal_setup.getImportStepRegistry()
      registry.registerStep( 'importWorkflowTool'
                           , '20040602-01'
                           , Products.CMFSetup.workflow.importWorkflowTool
                           , ()
                           , 'Workflow import'
                           , 'Import worflow tool and contained workflow '
                             'definitions.'
                           )

    o Register via XML:

      <setup-step id="importWorkflowTool"
                  version="20040602-01"
                  handler="Products.CMFSetup.workflow.importWorkflowTool"
                  title="Workflow import"
      >Import worflow tool and contained workflow definitions.</setup-step>

    """
    site = context.getSite()
    encoding = context.getEncoding()
    tool = getToolByName(site, 'portal_workflow')

    if context.shouldPurge():

        tool.setDefaultChain('')
        if tool._chains_by_type is not None:
            tool._chains_by_type.clear()

        for workflow_id in tool.getWorkflowIds():
            tool._delObject(workflow_id)

    text = context.readDataFile(_FILENAME)

    if text is not None:

        wftc = WorkflowToolConfigurator(site, encoding)
        tool_info = wftc.parseXML(text)

        wfdc = WorkflowDefinitionConfigurator(site)

        for info in tool_info['workflows']:

            if info['meta_type'] == DCWorkflowDefinition.meta_type:

                filename = info['filename']
                sep = filename.rfind('/')
                if sep == -1:
                    wf_text = context.readDataFile(filename)
                else:
                    wf_text = context.readDataFile(filename[sep + 1:],
                                                   filename[:sep])

                (workflow_id, title, state_variable, initial_state, states,
                 transitions, variables, worklists, permissions,
                 scripts) = wfdc.parseWorkflowXML(wf_text, encoding)

                workflow_id = str(workflow_id)  # No unicode!

                tool._setObject(workflow_id, DCWorkflowDefinition(workflow_id))

                workflow = tool._getOb(workflow_id)

                _initDCWorkflow(workflow, title, state_variable, initial_state,
                                states, transitions, variables, worklists,
                                permissions, scripts, context)
            else:
                pass  # TODO: handle non-DCWorkflows

        for type_id, workflow_ids in tool_info['bindings'].items():

            chain = ','.join(workflow_ids)
            if type_id is None:
                tool.setDefaultChain(chain)
            else:
                tool.setChainForPortalTypes((type_id, ), chain)

    return 'Workflows imported.'
Esempio n. 23
0
def createCollector_issue_workflow(id):
    "..."
    ob = DCWorkflowDefinition(id)
    setupCollector_issue_workflow(ob)
    return ob
Esempio n. 24
0
def createElementWorkflow(id):
    ob=DCWorkflowDefinition(id)
    setupElementWorkflow(ob)
    ob.setProperties(title=ECMCE_WORKFLOW_TITLE)
    return ob
def createPatchWorkflow(id):
    wf = DCWorkflowDefinition(id)
    wf.setProperties(title='Patch Workflow [Rhaptos]')

    for s in ('created', 'submitted', 'applied', 'rejected'):
        wf.states.addState(s)
    for t in ('submit', 'apply', 'reject'):
        wf.transitions.addTransition(t)
    for v in ('action', 'actor', 'comments', 'review_history', 'time'):
        wf.variables.addVariable(v)

    wf.states.setInitialState('created')

    # Configure states
    sdef = wf.states['created']
    sdef.setProperties(title='Newly created', transitions=('submit', ))

    sdef = wf.states['submitted']
    sdef.setProperties(
        title='Submitted and pending review',
        transitions=(
            'apply',
            'reject',
        ),
        description=
        'Waiting on a reviewer to accept the patch and apply it to the correct content'
    )

    sdef = wf.states['applied']
    sdef.setProperties(
        title='Accepted by a reviwer',
        description=
        'The patch has been accepted and applied to a working copy of the content item.  The changes will not be public, however, until the item is published'
    )

    sdef = wf.states['rejected']
    sdef.setProperties(
        title='Rejected by a reviwer',
        description='The changes have been rejected by a reviewer.')

    # Configure transitions
    tdef = wf.transitions['apply']
    tdef.setProperties(title='Reviewer applies changes',
                       new_state_id='applied')

    tdef = wf.transitions['reject']
    tdef.setProperties(title='Reviewer rejects changes',
                       new_state_id='rejected')

    tdef = wf.transitions['submit']
    tdef.setProperties(title='Submit for review', new_state_id='submitted')

    # Configure variables
    wf.variables.setStateVar('review_state')

    vdef = wf.variables['action']
    vdef.setProperties(description='The last transition',
                       default_expr='transition/getId|nothing',
                       for_status=1,
                       update_always=1)

    vdef = wf.variables['actor']
    vdef.setProperties(description='The ID of the user who performed '
                       'the last transition',
                       default_expr='user/getId',
                       for_status=1,
                       update_always=1)

    vdef = wf.variables['comments']
    vdef.setProperties(
        description='Comments about the last transition',
        default_expr="python:state_change.kwargs.get('comment', '')",
        for_status=1,
        update_always=1)

    vdef = wf.variables['review_history']
    vdef.setProperties(description='Provides access to workflow history',
                       default_expr="state_change/getHistory",
                       props={'guard_permissions': View})

    vdef = wf.variables['time']
    vdef.setProperties(description='Time of the last transition',
                       default_expr="state_change/getDateTime",
                       for_status=1,
                       update_always=1)

    configureEventPermissions(wf)
    return wf
Esempio n. 26
0
def create_UWOshOIEProgramWorkflow(id):
    """Create, setup and return the workflow.
    """
    ob = DCWorkflowDefinition(id)
    setup_UWOshOIEProgramWorkflow(ob)
    return ob
Esempio n. 27
0
def createPSC_release_workflow(id):
    "..."
    ob = DCWorkflowDefinition(id)
    setupPSC_release_workflow(ob)
    return ob
def createPatchWorkflow(id):
    wf=DCWorkflowDefinition(id)
    wf.setProperties(title='Patch Workflow [Rhaptos]')

    for s in ('created', 'submitted', 'applied', 'rejected'):
        wf.states.addState(s)
    for t in ('submit', 'apply', 'reject'):
        wf.transitions.addTransition(t)
    for v in ('action', 'actor', 'comments', 'review_history', 'time'):
        wf.variables.addVariable(v)

    wf.states.setInitialState('created')

    # Configure states
    sdef = wf.states['created']
    sdef.setProperties(title='Newly created', transitions=('submit',))

    sdef = wf.states['submitted']
    sdef.setProperties(title='Submitted and pending review', transitions=('apply', 'reject',),
                       description='Waiting on a reviewer to accept the patch and apply it to the correct content')

    sdef = wf.states['applied']
    sdef.setProperties(title='Accepted by a reviwer',
                       description='The patch has been accepted and applied to a working copy of the content item.  The changes will not be public, however, until the item is published')

    sdef = wf.states['rejected']
    sdef.setProperties(title='Rejected by a reviwer',
                       description='The changes have been rejected by a reviewer.')
        
    # Configure transitions
    tdef = wf.transitions['apply']
    tdef.setProperties(title='Reviewer applies changes', new_state_id='applied')
                       
    tdef = wf.transitions['reject']
    tdef.setProperties(title='Reviewer rejects changes', new_state_id='rejected')

    tdef = wf.transitions['submit']
    tdef.setProperties(title='Submit for review', new_state_id='submitted')

    # Configure variables
    wf.variables.setStateVar('review_state')

    vdef = wf.variables['action']
    vdef.setProperties(description='The last transition',
                       default_expr='transition/getId|nothing',
                       for_status=1, update_always=1)

    vdef = wf.variables['actor']
    vdef.setProperties(description='The ID of the user who performed '
                       'the last transition',
                       default_expr='user/getId',
                       for_status=1, update_always=1)

    vdef = wf.variables['comments']
    vdef.setProperties(description='Comments about the last transition',
                       default_expr="python:state_change.kwargs.get('comment', '')",
                       for_status=1, update_always=1)

    vdef = wf.variables['review_history']
    vdef.setProperties(description='Provides access to workflow history',
                       default_expr="state_change/getHistory",
                       props={'guard_permissions': View})

    vdef = wf.variables['time']
    vdef.setProperties(description='Time of the last transition',
                       default_expr="state_change/getDateTime",
                       for_status=1, update_always=1)


    configureEventPermissions(wf)
    return wf
Esempio n. 29
0
def createDefaultWorkflowRev2(id):
    '''
    '''
    ob = DCWorkflowDefinition(id)
    setupDefaultWorkflowRev2(ob)
    return ob
Esempio n. 30
0
def createEasyshop_order_workflow(id):
    "..."
    ob = DCWorkflowDefinition(id)
    setupEasyshop_order_workflow(ob)
    return ob
Esempio n. 31
0
def createDefaultWorkflowClassic(id):
    '''
    '''
    ob = DCWorkflowDefinition(id)
    setupDefaultWorkflowClassic(ob)
    return ob
Esempio n. 32
0
def createPloneboardWorkflow(id):
    ob=DCWorkflowDefinition(id)
    setupPloneboardWorkflow(ob)
    ob.setProperties(title='Ploneboard Workflow [Ploneboard]')
    return ob