Exemple #1
0
def set_contact_worflow():
    portal = api.portal.get()
    portal_workflow = api.portal.get_tool('portal_workflow')
    workflow = portal_workflow.getWorkflowsFor('organization')
    if len(workflow) > 1:
        logger.info(u'To much workflow for contacts.')
        return
    if len(workflow) == 0:
        logger.info(u'No workflow for contacts.')
        return
    workflow_id = workflow[0].id
    if workflow_id == 'cpskin_collective_contact_workflow':
        logger.info(u'cpskin_collective_contact_workflow already set.')
        return
    chain = ('cpskin_collective_contact_workflow',)
    types = ('held_position',
             'organization',
             'person',
             'position')
    state_map = {'active': 'active',
                 'deactivated': 'deactivated'}
    remap_workflow(portal, type_ids=types, chain=chain,
                   state_map=state_map)
    util = queryUtility(IRAMCache)
    if util is not None:
        util.invalidateAll()
    def test_remap_to_no_workflow(self):

        view_at_d1 = [
            r['name'] for r in self.portal.d1.rolesOfPermission('View')
            if r['selected']
        ]
        self.assertTrue('Anonymous' in view_at_d1)

        remap_workflow(self.portal,
                       type_ids=(
                           'Document',
                           'News Item',
                       ),
                       chain=())

        self.assertEqual(self._chain(self.portal.d1), ())
        self.assertEqual(self._chain(self.portal.d2), ())
        self.assertEqual(self._chain(self.portal.n1), ())

        view_at_d1 = [
            r['name'] for r in self.portal.d1.rolesOfPermission('View')
            if r['selected']
        ]
        self.assertFalse('Anonymous' in view_at_d1)
        self.assertTrue(self.portal.d1.acquiredRolesAreUsedBy('View'))
def upgrade_timeslot_workflow(context, logger=None):
    """ Upgrade workflow of timeslots and days
    """

    if logger is None:
        # Called as upgrade step: define our own logger.
        logger = logging.getLogger('uwosh.timeslot')

    #Run the workflow setup
    setup = getToolByName(context, 'portal_setup')
    setup.runImportStepFromProfile(PROFILE_ID, 'workflow')

    remap_workflow(context,
                   type_ids=('Day', 'Time Slot'),
                   chain='(Default)',
                   state_map={'hidden': 'private'}
                  )

    remap_workflow(context,
                   type_ids=('Day', 'Time Slot'),
                   chain=('uwosh_timeslot_hidden_workflow',),
                   state_map={'private': 'open',
                              'pending': 'open',
                              'published': 'open'}
                  )
    return
    def test_remap_from_no_workflow(self):
        remap_workflow(self.portal,
                       type_ids=('Image', ),
                       chain=('plone_workflow', ))

        self.assertEqual(self._chain(self.portal.i1), ('plone_workflow', ))
        self.assertEqual(self._state(self.portal.i1), 'visible')
Exemple #5
0
    def test_remap_from_no_workflow(self):
        remap_workflow(self.portal,
                       type_ids=('Image', ),
                       chain=('plone_workflow', ))

        self.assertEquals(self._chain(self.portal.i1), ('plone_workflow', ))
        self.assertEquals(self._state(self.portal.i1), 'visible')
Exemple #6
0
 def _replaceProjectWorkflow(self):
     """ Replace the project workflow by new ones """
     from plone.app.workflow.remap import remap_workflow
     pw = self.portal.portal_workflow
     # pstaction
     if 'pst_action_workflow' not in pw.getChainForPortalType('pstaction'):
         mapping = {
             'created': 'created',
             'ongoing': 'ongoing',
             'stopped': 'stopped',
             'terminated': 'terminated',
             'to_be_scheduled': 'to_be_scheduled'
         }
         remap_workflow(self.context, ['pstaction'],
                        ['pst_action_workflow'],
                        state_map=mapping)
     # objectives
     if 'pst_objective_workflow' not in pw.getChainForPortalType(
             'operationalobjective'):
         mapping = {
             'created': 'created',
             'ongoing': 'ongoing',
             'stopped': 'achieved',
             'terminated': 'achieved',
             'to_be_scheduled': 'ongoing'
         }
         remap_workflow(self.context,
                        ['strategicobjective', 'operationalobjective'],
                        ['pst_objective_workflow'],
                        state_map=mapping)
    def test_remap_to_no_workflow(self):
        view_at_d1 = [
            r['name']
            for r in self.portal.d1.rolesOfPermission('View')
            if r['selected']
        ]
        self.assertIn('Anonymous', view_at_d1)

        remap_workflow(
            self.portal,
            type_ids=('Document', 'News Item', ),
            chain=(),
        )

        self.assertEqual(self._chain(self.portal.d1), ())
        self.assertEqual(self._chain(self.portal.d2), ())
        self.assertEqual(self._chain(self.portal.n1), ())

        view_at_d1 = [
            r['name']
            for r in self.portal.d1.rolesOfPermission('View')
            if r['selected']
        ]
        self.assertFalse('Anonymous' in view_at_d1)
        self.assertTrue(self.portal.d1.acquiredRolesAreUsedBy('View'))
Exemple #8
0
def _remapSubscriberWorkflow(context):
    type_ids = ('Subscriber',)
    chain = ('subscriber_workflow',)
    state_map = {'published': 'published'}
    logger.info('Remapping Subscriber workflow')
    remap_workflow(context, type_ids=type_ids, chain=chain,
                   state_map=state_map)
    logger.info('Subscriber workflow remapped')
    def test_remap_to_default(self):
        self.workflow.setDefaultChain('plone_workflow')
        remap_workflow(
            self.portal,
            type_ids=('Image', ),
            chain='(Default)',
        )

        self.assertEqual(self._chain(self.portal.i1), ('plone_workflow', ))
 def simulateCommunityWF(self):
     """Make minimal changes to simulate the 2.5 style WF defaults"""
     from plone.app.workflow.remap import remap_workflow
     # remap_workflow(self.portal, type_ids=('PressRoom', 'Topic'), 
     #                chain=('plone_workflow',))
     remap_workflow(self.portal, type_ids=('Folder',), 
                    chain=('folder_workflow',))
     workflow = getToolByName(self.portal, 'portal_workflow')
     workflow.setDefaultChain('plone_workflow')
Exemple #11
0
    def test_remap_multiple_no_state_map(self):
        remap_workflow(self.portal, type_ids=("Document", "News Item"), chain=("plone_workflow",))

        self.assertEquals(self._chain(self.portal.d1), ("plone_workflow",))
        self.assertEquals(self._chain(self.portal.d2), ("plone_workflow",))
        self.assertEquals(self._chain(self.portal.n1), ("plone_workflow",))

        self.assertEquals(self._state(self.portal.d1), "visible")
        self.assertEquals(self._state(self.portal.d2), "visible")
        self.assertEquals(self._state(self.portal.n1), "visible")
Exemple #12
0
    def test_remap_multiple_no_state_map(self):
        remap_workflow(self.portal,
                       type_ids=('Document', 'News Item', ),
                       chain=('plone_workflow', ))

        self.assertEquals(self._chain(self.portal.d1), ('plone_workflow', ))
        self.assertEquals(self._chain(self.portal.d2), ('plone_workflow', ))
        self.assertEquals(self._chain(self.portal.n1), ('plone_workflow', ))

        self.assertEquals(self._state(self.portal.d1), 'visible')
        self.assertEquals(self._state(self.portal.d2), 'visible')
        self.assertEquals(self._state(self.portal.n1), 'visible')
    def test_remap_multiple_no_state_map(self):
        remap_workflow(self.portal,
                       type_ids=('Document', 'News Item', ),
                       chain=('plone_workflow', ))

        self.assertEqual(self._chain(self.portal.d1), ('plone_workflow', ))
        self.assertEqual(self._chain(self.portal.d2), ('plone_workflow', ))
        self.assertEqual(self._chain(self.portal.n1), ('plone_workflow', ))

        self.assertEqual(self._state(self.portal.d1), 'visible')
        self.assertEqual(self._state(self.portal.d2), 'visible')
        self.assertEqual(self._state(self.portal.n1), 'visible')
def from_2_x_to_3_0(context):
    log = logging.getLogger('FacultyStaffDirectory')
    
    context.runImportStepFromProfile('profile-Products.FacultyStaffDirectory:default','workflow')
    try:
        remap_workflow(context,
                       ('FSDFacultyStaffDirectory',),
                       ('fsd_directory_workflow',),
                       {})
    except Exception, message:
        log.error(message)
        raise
    def test_remap_with_partial_state_map(self):
        remap_workflow(self.portal,
                       type_ids=('Document', 'News Item', ),
                       chain=('plone_workflow', ),
                       state_map={'published': 'published'})

        self.assertEqual(self._chain(self.portal.d1), ('plone_workflow', ))
        self.assertEqual(self._chain(self.portal.d2), ('plone_workflow', ))
        self.assertEqual(self._chain(self.portal.n1), ('plone_workflow', ))

        self.assertEqual(self._state(self.portal.d1), 'published')
        self.assertEqual(self._state(self.portal.d2), 'visible')
        self.assertEqual(self._state(self.portal.n1), 'published')
Exemple #16
0
    def test_remap_with_partial_state_map(self):
        remap_workflow(self.portal,
                       type_ids=('Document', 'News Item', ),
                       chain=('plone_workflow', ),
                       state_map={'published': 'published'})

        self.assertEquals(self._chain(self.portal.d1), ('plone_workflow', ))
        self.assertEquals(self._chain(self.portal.d2), ('plone_workflow', ))
        self.assertEquals(self._chain(self.portal.n1), ('plone_workflow', ))

        self.assertEquals(self._state(self.portal.d1), 'published')
        self.assertEquals(self._state(self.portal.d2), 'visible')
        self.assertEquals(self._state(self.portal.n1), 'published')
def to_one(context):
    context.runImportStepFromProfile('profile-cpskin.workflow:to1', 'workflow')
    chain = ('cpskin_collective_contact_workflow',)
    types = ('held_position',
             'organization',
             'person',
             'position')
    state_map = {'active': 'active',
                 'deactivated': 'deactivated'}
    remap_workflow(context, type_ids=types, chain=chain,
                   state_map=state_map)
    util = queryUtility(IRAMCache)
    if util is not None:
        util.invalidateAll()
Exemple #18
0
    def test_remap_to_no_workflow(self):

        view_at_d1 = [r["name"] for r in self.portal.d1.rolesOfPermission("View") if r["selected"]]
        self.failUnless("Anonymous" in view_at_d1)

        remap_workflow(self.portal, type_ids=("Document", "News Item"), chain=())

        self.assertEquals(self._chain(self.portal.d1), ())
        self.assertEquals(self._chain(self.portal.d2), ())
        self.assertEquals(self._chain(self.portal.n1), ())

        view_at_d1 = [r["name"] for r in self.portal.d1.rolesOfPermission("View") if r["selected"]]
        self.failIf("Anonymous" in view_at_d1)
        self.failUnless(self.portal.d1.acquiredRolesAreUsedBy("View"))
Exemple #19
0
 def _remapContactsWokflows(self):
     """Use 'plonemeeting_activity_managers_workflow' instead 'collective_contact_core_workflow'
        for person and held_position portal_types."""
     logger.info(
         "Changing workflow for person and held_position portal_types...")
     person_wf = self.wfTool.getWorkflowsFor('person')[0]
     if person_wf.getId() != 'plonemeeting_activity_managers_workflow':
         remap_workflow(context=self.portal,
                        type_ids=['person', 'held_position'],
                        chain=['plonemeeting_activity_managers_workflow'],
                        state_map={
                            'active': 'active',
                            'deactivated': 'inactive'
                        })
     logger.info('Done.')
Exemple #20
0
    def test_remap_with_partial_state_map(self):
        remap_workflow(
            self.portal,
            type_ids=("Document", "News Item"),
            chain=("plone_workflow",),
            state_map={"published": "published"},
        )

        self.assertEquals(self._chain(self.portal.d1), ("plone_workflow",))
        self.assertEquals(self._chain(self.portal.d2), ("plone_workflow",))
        self.assertEquals(self._chain(self.portal.n1), ("plone_workflow",))

        self.assertEquals(self._state(self.portal.d1), "published")
        self.assertEquals(self._state(self.portal.d2), "visible")
        self.assertEquals(self._state(self.portal.n1), "published")
Exemple #21
0
 def set_contact_worflow(self):
     portal = api.portal.get()
     workflow_id = self.get_workflow_id('organization')
     if workflow_id == 'cpskin_collective_contact_workflow':
         self._redirect('cpskin_collective_contact_workflow already set.')
     chain = ('cpskin_collective_contact_workflow', )
     types = ('held_position', 'organization', 'person', 'position')
     state_map = {'active': 'active', 'deactivated': 'deactivated'}
     remap_workflow(portal,
                    type_ids=types,
                    chain=chain,
                    state_map=state_map)
     util = queryUtility(IRAMCache)
     if util is not None:
         util.invalidateAll()
     self._redirect('cpskin_collective_contact_workflow set.')
def from_2_x_to_3_0(context):
    log = logging.getLogger('FacultyStaffDirectory')
    
    context.runImportStepFromProfile('profile-Products.FacultyStaffDirectory:default','workflow')
    try:
        remap_workflow(context,
                       ('FSDFacultyStaffDirectory',),
                       ('fsd_directory_workflow',),
                       {})
    except Exception as message:
        log.error(message)
        raise

    # log it
    log = logging.getLogger("FacultyStaffDirectory")
    log.info("Upgraded version 2 to version 3.0b1")
Exemple #23
0
def add_cpskin_collective_contact_workflow(context):
    context.runImportStepFromProfile('profile-cpskin.workflow:to1', 'workflow')
    chain = ('cpskin_collective_contact_workflow',)
    types = ('held_position',
            'organization',
            'person',
            'position')
    state_map = {'active': 'active',
            'deactivated': 'deactivated'}
    remap_workflow(context, type_ids=types, chain=chain,
            state_map=state_map)
    util = queryUtility(IRAMCache)
    if util is not None:
        util.invalidateAll()

    # set a workflow version
    context.runAllImportStepsFromProfile('profile-cpskin.workflow:default')
Exemple #24
0
 def set_contact_worflow(self):
     portal = api.portal.get()
     workflow_id = self.get_workflow_id('organization')
     if workflow_id == 'cpskin_collective_contact_workflow':
         self._redirect('cpskin_collective_contact_workflow already set.')
     chain = ('cpskin_collective_contact_workflow',)
     types = ('held_position',
              'organization',
              'person',
              'position')
     state_map = {'active': 'active',
                  'deactivated': 'deactivated'}
     remap_workflow(portal, type_ids=types, chain=chain,
                    state_map=state_map)
     util = queryUtility(IRAMCache)
     if util is not None:
         util.invalidateAll()
     self._redirect('cpskin_collective_contact_workflow set.')
Exemple #25
0
def set_contact_worflow():
    portal = api.portal.get()
    portal_workflow = api.portal.get_tool("portal_workflow")
    workflow = portal_workflow.getWorkflowsFor("organization")
    if len(workflow) > 1:
        logger.info(u"To much workflow for contacts.")
        return
    if len(workflow) == 0:
        logger.info(u"No workflow for contacts.")
        return
    workflow_id = workflow[0].id
    if workflow_id == "cpskin_collective_contact_workflow":
        logger.info(u"cpskin_collective_contact_workflow already set.")
        return
    chain = ("cpskin_collective_contact_workflow",)
    types = ("held_position", "organization", "person", "position")
    state_map = {"active": "active", "deactivated": "deactivated"}
    remap_workflow(portal, type_ids=types, chain=chain, state_map=state_map)
    util = queryUtility(IRAMCache)
    if util is not None:
        util.invalidateAll()
    def __call__(self):
        self.errors = {}
        state = self.selected_state
        transitions = self.available_transitions
        state_id = state.id

        self.is_using_state = False
        for transition in transitions:
            if transition.new_state_id == state_id:
                self.is_using_state = True
                break

        if self.request.get('form.actions.delete', False):
            self.authorize()
            if self.is_using_state:
                replacement = self.request.get('replacement-state',
                    self.available_states[0].id)
                for transition in self.available_transitions:
                    if state_id == transition.new_state_id:
                        transition.new_state_id = replacement

                chains = self.portal_workflow.listChainOverrides()
                types_ids = [c[0] for c in chains
                                if self.selected_workflow.id in c[1]]
                remap_workflow(self.context, types_ids,
                    (self.selected_workflow.id, ), {state_id: replacement})

            self.selected_workflow.states.deleteStates([state_id])

            return self.handle_response(
                message=_('msg_state_deleted',
                    default=u'"${id}" state has been successfully deleted.',
                    mapping={'id': state_id}))
        elif self.request.get('form.actions.cancel', False) == 'Cancel':
            return self.handle_response(
                message=_('msg_state_deletion_canceled',
                    default=u'Deleting the "${id}" state has been canceled.',
                    mapping={'id': state_id}))
        else:
            return self.handle_response(tmpl=self.template)
Exemple #27
0
    def test_remap_to_default(self):
        remap_workflow(self.portal,
                       type_ids=('Folder', ),
                       chain='(Default)')

        self.assertEquals(self._chain(self.portal.i1), ('plone_workflow', ))
Exemple #28
0
    def test_remap_to_default(self):
        remap_workflow(self.portal, type_ids=("Folder",), chain="(Default)")

        self.assertEquals(self._chain(self.portal.i1), ("plone_workflow",))
Exemple #29
0
    def test_remap_from_no_workflow(self):
        remap_workflow(self.portal, type_ids=("Image",), chain=("plone_workflow",))

        self.assertEquals(self._chain(self.portal.i1), ("plone_workflow",))
        self.assertEquals(self._state(self.portal.i1), "visible")
Exemple #30
0
    def __call__(self):
        """Perform the update and redirect if necessary, or render the page
        """
        postback = True
        context = aq_inner(self.context)

        form = self.request.form
        submitted = form.get('form.submitted', False)
        save_button = form.get('form.button.Save', None) is not None
        cancel_button = form.get('form.button.Cancel', None) is not None
        type_id = form.get('old_type_id', None)

        if submitted and not cancel_button:
            if type_id:
                portal_types = getToolByName(self.context, 'portal_types')
                portal_repository = getToolByName(self.context,
                                                  'portal_repository')

                fti = getattr(portal_types, type_id)

                # Set FTI properties

                addable = form.get('addable', False)
                allow_discussion = form.get('allow_discussion', False)

                fti.manage_changeProperties(
                    global_allow=bool(addable),
                    allow_discussion=bool(allow_discussion)
                )

                version_policy = form.get('versionpolicy', "off")
                if version_policy != self.current_versioning_policy():
                    newpolicy = [
                        p for p in VERSION_POLICIES
                        if p["id"] == version_policy][0]

                    versionable_types = list(
                        portal_repository.getVersionableContentTypes()
                    )
                    if not newpolicy["policy"]:
                        # check if we need to remove
                        if type_id in versionable_types:
                            versionable_types.remove(type_id)
                        self.remove_versioning_behavior(fti)
                    else:
                        # check if we should add
                        if type_id not in versionable_types:
                            versionable_types.append(safe_unicode(type_id))
                        self.add_versioning_behavior(fti)

                    for policy in portal_repository.listPolicies():
                        policy_id = policy.getId()
                        if policy_id in newpolicy["policy"]:
                            portal_repository.addPolicyForContentType(
                                type_id,
                                policy_id
                            )
                        else:
                            portal_repository.removePolicyFromContentType(
                                type_id,
                                policy_id
                            )

                    portal_repository.setVersionableContentTypes(
                        versionable_types
                    )

                # Set Registry-entries
                registry = getUtility(IRegistry)

                searchable = form.get('searchable', False)
                site_settings = registry.forInterface(
                    ISearchSchema, prefix="plone")
                blacklisted = [i for i in site_settings.types_not_searched]
                if searchable and type_id in blacklisted:
                    blacklisted.remove(type_id)
                elif not searchable and type_id not in blacklisted:
                    blacklisted.append(type_id)
                site_settings.types_not_searched = tuple(blacklisted)

                default_page_type = form.get('default_page_type', False)
                types_settings = registry.forInterface(
                    ITypesSchema, prefix="plone")
                default_page_types = [
                    safe_unicode(i) for i in types_settings.default_page_types]
                if default_page_type and type_id not in default_page_types:
                    default_page_types.append(safe_unicode(type_id))
                elif not default_page_type and type_id in default_page_types:
                    default_page_types.remove(type_id)
                types_settings.default_page_types = default_page_types

                redirect_links = form.get('redirect_links', False)
                types_settings.redirect_links = redirect_links

            # Update workflow
            if self.have_new_workflow() \
                    and form.get('form.workflow.submitted', False) \
                    and save_button:
                if self.new_workflow_is_different():
                    new_wf = self.new_workflow()
                    if new_wf == '[none]':
                        chain = ()
                    elif new_wf == '(Default)':
                        chain = new_wf
                    else:
                        chain = (new_wf,)
                    state_map = dict([
                        (s['old_state'], s['new_state'])
                        for s in form.get('new_wfstates', [])
                    ])
                    if '[none]' in state_map:
                        state_map[None] = state_map['[none]']
                        del state_map['[none]']
                    if type_id:
                        type_ids = (type_id,)
                    else:
                        wt = getToolByName(self.context, 'portal_workflow')
                        tt = getToolByName(self.context, 'portal_types')
                        nondefault = [
                            info[0] for info in wt.listChainOverrides()
                        ]
                        type_ids = [
                            type for type in tt.listContentTypes()
                            if type not in nondefault
                        ]
                        wt.setChainForPortalTypes(
                            type_ids,
                            wt.getDefaultChain()
                        )
                        wt.setDefaultChain(','.join(chain))
                        chain = '(Default)'

                    remap_workflow(context, type_ids=type_ids, chain=chain,
                                   state_map=state_map)

                    data = {'workflow': new_wf}
                    notify(ConfigurationChangedEvent(self, data))

                else:
                    portal_workflow = getToolByName(context, 'portal_workflow')
                    if self.new_workflow() == '(Default)':
                        # The WorkflowTool API can not handle this sanely
                        cbt = portal_workflow._chains_by_type
                        if type_id in cbt:
                            del cbt[type_id]
                    else:
                        portal_workflow.setChainForPortalTypes(
                            (type_id,),
                            self.new_workflow()
                        )

                self.request.response.redirect(
                    '%s/@@content-controlpanel?type_id=%s' % (
                        context.absolute_url(),
                        type_id
                    )
                )
                postback = False

        elif cancel_button:
            self.request.response.redirect(
                self.context.absolute_url() + '/@@overview-controlpanel')
            postback = False

        if postback:
            return self.template()
    def test_remap_to_default(self):
        remap_workflow(self.portal,
                       type_ids=('Folder', ),
                       chain='(Default)')

        self.assertEqual(self._chain(self.portal.i1), ('plone_workflow', ))
Exemple #32
0
    def __call__(self):
        """Perform the update and redirect if necessary, or render the page
        """
        postback = True
        context = aq_inner(self.context)

        form = self.request.form
        submitted = form.get('form.submitted', False)
        save_button = form.get('form.button.Save', None) is not None
        cancel_button = form.get('form.button.Cancel', None) is not None
        type_id = form.get('old_type_id', None)

        if submitted and not cancel_button:
            if type_id:
                portal_types = getToolByName(self.context, 'portal_types')
                portal_repository = getToolByName(self.context,
                                                  'portal_repository')
                portal_properties = getToolByName(self.context,
                                                  'portal_properties')
                site_properties = getattr(portal_properties, 'site_properties')

                fti = getattr(portal_types, type_id)

                # Set FTI properties

                addable = form.get('addable', False)
                allow_discussion = form.get('allow_discussion', False)

                fti.manage_changeProperties(
                    global_allow=bool(addable),
                    allow_discussion=bool(allow_discussion))

                version_policy = form.get('versionpolicy', "off")
                if version_policy != self.current_versioning_policy():
                    newpolicy = [
                        p for p in VERSION_POLICIES
                        if p["id"] == version_policy
                    ][0]

                    versionable_types = list(
                        portal_repository.getVersionableContentTypes())
                    if not newpolicy["policy"]:
                        if type_id in versionable_types:
                            versionable_types.remove(type_id)
                    else:
                        if type_id not in versionable_types:
                            versionable_types.append(type_id)

                    for policy in portal_repository.listPolicies():
                        policy_id = policy.getId()
                        if policy_id in newpolicy["policy"]:
                            portal_repository.addPolicyForContentType(
                                type_id, policy_id)
                        else:
                            portal_repository.removePolicyFromContentType(
                                type_id, policy_id)

                    portal_repository.setVersionableContentTypes(
                        versionable_types)

                searchable = form.get('searchable', False)
                blacklisted = list(
                    site_properties.getProperty('types_not_searched'))
                if searchable and type_id in blacklisted:
                    blacklisted.remove(type_id)
                elif not searchable and type_id not in blacklisted:
                    blacklisted.append(type_id)
                site_properties.manage_changeProperties(types_not_searched = \
                                                        blacklisted)

                if type_id == 'Link':
                    redirect_links = form.get('redirect_links', False)
                    site_properties.manage_changeProperties(redirect_links = \
                                                            redirect_links)

            # Update workflow
            if self.have_new_workflow() and \
               form.get('form.workflow.submitted', False) and \
               save_button:
                if self.new_workflow_is_different():
                    new_wf = self.new_workflow()
                    if new_wf == '[none]':
                        chain = ()
                    elif new_wf == '(Default)':
                        chain = new_wf
                    else:
                        chain = (new_wf, )
                    state_map = dict([(s['old_state'], s['new_state']) for s in \
                                      form.get('new_wfstates', [])])
                    if state_map.has_key('[none]'):
                        state_map[None] = state_map['[none]']
                        del state_map['[none]']
                    if type_id:
                        type_ids = (type_id, )
                    else:
                        wt = getToolByName(self.context, 'portal_workflow')
                        tt = getToolByName(self.context, 'portal_types')
                        nondefault = [
                            info[0] for info in wt.listChainOverrides()
                        ]
                        type_ids = [
                            type for type in tt.listContentTypes()
                            if type not in nondefault
                        ]
                        wt.setChainForPortalTypes(type_ids,
                                                  wt.getDefaultChain())
                        wt.setDefaultChain(','.join(chain))
                        chain = '(Default)'

                    remap_workflow(context,
                                   type_ids=type_ids,
                                   chain=chain,
                                   state_map=state_map)

                    data = {'workflow': new_wf}
                    notify(ConfigurationChangedEvent(self, data))

                else:
                    portal_workflow = getToolByName(context, 'portal_workflow')
                    if self.new_workflow() == '(Default)':
                        # The WorkflowTool API can not handle this sanely
                        cbt = portal_workflow._chains_by_type
                        if cbt.has_key(type_id):
                            del cbt[type_id]
                    else:
                        portal_workflow.setChainForPortalTypes(
                            (type_id, ), self.new_workflow())

                self.request.response.redirect('%s/@@types-controlpanel?\
type_id=%s' % (context.absolute_url(), type_id))
                postback = False

        elif cancel_button:
            self.request.response.redirect(self.context.absolute_url() + \
                                           '/plone_control_panel')
            postback = False

        if postback:
            return self.template()
Exemple #33
0
    def __call__(self):
        """Perform the update and redirect if necessary, or render the page
        """
        postback = True
        context = aq_inner(self.context)

        form = self.request.form
        submitted = form.get('form.submitted', False)
        save_button = form.get('form.button.Save', None) is not None
        cancel_button = form.get('form.button.Cancel', None) is not None
        type_id = form.get('old_type_id', None)

        if submitted and not cancel_button:
            if type_id:
                portal_types = getToolByName(self.context, 'portal_types')
                portal_repository = getToolByName(self.context,
                                                  'portal_repository')

                fti = getattr(portal_types, type_id)

                # Set FTI properties

                addable = form.get('addable', False)
                allow_discussion = form.get('allow_discussion', False)

                fti.manage_changeProperties(
                    global_allow=bool(addable),
                    allow_discussion=bool(allow_discussion))

                version_policy = form.get('versionpolicy', "off")
                if version_policy != self.current_versioning_policy():
                    newpolicy = [
                        p for p in VERSION_POLICIES
                        if p["id"] == version_policy
                    ][0]

                    versionable_types = list(
                        portal_repository.getVersionableContentTypes())
                    if not newpolicy["policy"]:
                        # check if we need to remove
                        if type_id in versionable_types:
                            versionable_types.remove(type_id)
                        self.remove_versioning_behavior(fti)
                    else:
                        # check if we should add
                        if type_id not in versionable_types:
                            versionable_types.append(safe_unicode(type_id))
                        self.add_versioning_behavior(fti)

                    for policy in portal_repository.listPolicies():
                        policy_id = policy.getId()
                        if policy_id in newpolicy["policy"]:
                            portal_repository.addPolicyForContentType(
                                type_id, policy_id)
                        else:
                            portal_repository.removePolicyFromContentType(
                                type_id, policy_id)

                    portal_repository.setVersionableContentTypes(
                        versionable_types)

                # Set Registry-entries
                registry = getUtility(IRegistry)

                searchable = form.get('searchable', False)
                site_settings = registry.forInterface(ISearchSchema,
                                                      prefix="plone")
                blacklisted = [i for i in site_settings.types_not_searched]
                if searchable and type_id in blacklisted:
                    blacklisted.remove(type_id)
                elif not searchable and type_id not in blacklisted:
                    blacklisted.append(type_id)
                site_settings.types_not_searched = tuple(blacklisted)

                default_page_type = form.get('default_page_type', False)
                types_settings = registry.forInterface(ITypesSchema,
                                                       prefix="plone")
                default_page_types = [
                    safe_unicode(i) for i in types_settings.default_page_types
                ]
                if default_page_type and type_id not in default_page_types:
                    default_page_types.append(safe_unicode(type_id))
                elif not default_page_type and type_id in default_page_types:
                    default_page_types.remove(type_id)
                types_settings.default_page_types = default_page_types

                redirect_links = form.get('redirect_links', False)
                types_settings.redirect_links = redirect_links

            # Update workflow
            if self.have_new_workflow() \
                    and form.get('form.workflow.submitted', False) \
                    and save_button:
                if self.new_workflow_is_different():
                    new_wf = self.new_workflow()
                    if new_wf == '[none]':
                        chain = ()
                    elif new_wf == '(Default)':
                        chain = new_wf
                    else:
                        chain = (new_wf, )
                    state_map = dict([(s['old_state'], s['new_state'])
                                      for s in form.get('new_wfstates', [])])
                    if '[none]' in state_map:
                        state_map[None] = state_map['[none]']
                        del state_map['[none]']
                    if type_id:
                        type_ids = (type_id, )
                    else:
                        wt = getToolByName(self.context, 'portal_workflow')
                        tt = getToolByName(self.context, 'portal_types')
                        nondefault = [
                            info[0] for info in wt.listChainOverrides()
                        ]
                        type_ids = [
                            type for type in tt.listContentTypes()
                            if type not in nondefault
                        ]
                        wt.setChainForPortalTypes(type_ids,
                                                  wt.getDefaultChain())
                        wt.setDefaultChain(','.join(chain))
                        chain = '(Default)'

                    remap_workflow(context,
                                   type_ids=type_ids,
                                   chain=chain,
                                   state_map=state_map)

                    data = {'workflow': new_wf}
                    notify(ConfigurationChangedEvent(self, data))

                else:
                    portal_workflow = getToolByName(context, 'portal_workflow')
                    if self.new_workflow() == '(Default)':
                        # The WorkflowTool API can not handle this sanely
                        cbt = portal_workflow._chains_by_type
                        if type_id in cbt:
                            del cbt[type_id]
                    else:
                        portal_workflow.setChainForPortalTypes(
                            (type_id, ), self.new_workflow())

                self.request.response.redirect(
                    '%s/@@content-controlpanel?type_id=%s' %
                    (context.absolute_url(), type_id))
                postback = False

        elif cancel_button:
            self.request.response.redirect(self.context.absolute_url() +
                                           '/@@overview-controlpanel')
            postback = False

        if postback:
            return self.template()
Exemple #34
0
    def __call__(self):
        """Perform the update and redirect if necessary, or render the page
        """
        postback = True
        context = aq_inner(self.context)

        form = self.request.form
        submitted = form.get('form.submitted', False)
        save_button = form.get('form.button.Save', None) is not None
        cancel_button = form.get('form.button.Cancel', None) is not None
        type_id = form.get('old_type_id', None)

        if submitted and not cancel_button:
            if type_id:
                portal_types = getToolByName(self.context, 'portal_types')
                portal_repository = getToolByName(self.context,
                                                  'portal_repository')
                portal_properties = getToolByName(self.context,
                                                  'portal_properties')
                site_properties = getattr(portal_properties, 'site_properties')

                fti = getattr(portal_types, type_id)

                # Set FTI properties

                addable = form.get('addable', False)
                allow_discussion = form.get('allow_discussion', False)

                fti.manage_changeProperties(global_allow = bool(addable),
                                            allow_discussion = bool(allow_discussion))

                version_policy = form.get('versionpolicy', "off")
                if version_policy!=self.current_versioning_policy():
                    newpolicy=[p for p in VERSION_POLICIES if p["id"]==version_policy][0]


                    versionable_types = list(portal_repository.getVersionableContentTypes())
                    if not newpolicy["policy"]:
                        if type_id in versionable_types:
                            versionable_types.remove(type_id)
                    else:
                        if type_id not in versionable_types:
                            versionable_types.append(type_id)

                    for policy in portal_repository.listPolicies():
                        policy_id = policy.getId()
                        if policy_id in newpolicy["policy"]:
                            portal_repository.addPolicyForContentType(type_id, policy_id)
                        else:
                            portal_repository.removePolicyFromContentType(type_id, policy_id)

                    portal_repository.setVersionableContentTypes(versionable_types)

                searchable = form.get('searchable', False)
                blacklisted = list(site_properties.getProperty('types_not_searched'))
                if searchable and type_id in blacklisted:
                    blacklisted.remove(type_id)
                elif not searchable and type_id not in blacklisted:
                    blacklisted.append(type_id)
                site_properties.manage_changeProperties(types_not_searched = \
                                                        blacklisted)

                redirect_links = form.get('redirect_links', False)
                site_properties.manage_changeProperties(redirect_links = \
                                                        redirect_links)

            # Update workflow
            if self.have_new_workflow() and \
               form.get('form.workflow.submitted', False) and \
               save_button:
                if self.new_workflow_is_different():
                    new_wf = self.new_workflow()
                    if new_wf == '[none]':
                        chain = ()
                    elif new_wf == '(Default)':
                        chain = new_wf
                    else:
                        chain = (new_wf,)
                    state_map = dict([(s['old_state'], s['new_state']) for s in \
                                      form.get('new_wfstates', [])])
                    if state_map.has_key('[none]'):
                        state_map[None] = state_map['[none]']
                        del state_map['[none]']
                    if type_id:
                        type_ids=(type_id,)
                    else:
                        wt = getToolByName(self.context, 'portal_workflow')
                        tt = getToolByName(self.context, 'portal_types')
                        nondefault = [info[0] for info in wt.listChainOverrides()]
                        type_ids = [type for type in tt.listContentTypes() if type not in nondefault]
                        wt.setChainForPortalTypes(type_ids, wt.getDefaultChain())
                        wt.setDefaultChain(','.join(chain))
                        chain='(Default)'

                    remap_workflow(context, type_ids=type_ids, chain=chain,
                                   state_map=state_map)

                    data = {'workflow': new_wf}
                    notify(ConfigurationChangedEvent(self, data))

                else:
                    portal_workflow = getToolByName(context, 'portal_workflow')
                    if self.new_workflow()=='(Default)':
                        # The WorkflowTool API can not handle this sanely
                        cbt=portal_workflow._chains_by_type
                        if cbt.has_key(type_id):
                            del cbt[type_id]
                    else:
                        portal_workflow.setChainForPortalTypes((type_id,),
                                self.new_workflow())

                self.request.response.redirect('%s/@@types-controlpanel?\
type_id=%s' % (context.absolute_url() , type_id))
                postback = False

        elif cancel_button:
            self.request.response.redirect(self.context.absolute_url() + \
                                           '/plone_control_panel')
            postback = False

        if postback:
            return self.template()
Exemple #35
0
def restore_links_workflow(context):
    portal = api.portal.get()
    remap_workflow(portal, type_ids=("Link", ), chain="(Default)")