コード例 #1
0
 def test_list_wf_states(self):
     imail = sub_create(self.portal['incoming-mail'], 'dmsincomingmail',
                        datetime.now(), 'my-id')
     self.assertEqual(list_wf_states(imail, 'unknown'), [])
     self.assertEqual(
         [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [
             'created', 'to_assign', 'to_do', 'in_progress', 'realized',
             'closed'
         ])
     # We rename a state id
     states = imail.portal_workflow.task_workflow.states
     states.manage_renameObject('to_do', 'NEW')
     # use cache
     self.assertEqual(
         [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [
             'created', 'to_assign', 'to_do', 'in_progress', 'realized',
             'closed'
         ])
     invalidate_cachekey_volatile_for(
         'imio.dms.mail.utils.list_wf_states.task')
     # 'imio.dms.mail.utils.list_wf_states
     self.assertEqual(
         [s_id for s_id, s_tit in list_wf_states(imail, 'task')], [
             'created', 'to_assign', 'in_progress', 'realized', 'closed',
             'NEW'
         ])
コード例 #2
0
 def __call__(self, context):
     terms = []
     for st_id, st_tit in list_wf_states(context, 'task'):
         terms.append(
             SimpleVocabulary.createTerm(
                 st_id, st_id,
                 translate(safe_unicode(st_tit),
                           domain='plone',
                           context=context.REQUEST)))
     return SimpleVocabulary(terms)
コード例 #3
0
 def __call__(self, context):
     terms = []
     tl = api.portal.get().portal_properties.site_properties.getProperty(
         'default_language', 'fr')
     for st_id, st_tit in list_wf_states(context, 'dmsoutgoingmail'):
         terms.append(
             SimpleVocabulary.createTerm(
                 st_id, st_id,
                 translate(safe_unicode(st_tit),
                           domain='plone',
                           target_language=tl)))
     return SimpleVocabulary(terms)
コード例 #4
0
def configure_group_encoder(portal_types, contacts_part=False):
    """
        Used to configure a creating function and group for some internal organizations.
        Update portal_type to add behavior, configure localroles field
    """
    # function
    functions = get_registry_functions()
    if CREATING_GROUP_SUFFIX not in [fct['fct_id'] for fct in functions]:
        functions.append({
            'fct_title': u'Indicateur du service',
            'fct_id': CREATING_GROUP_SUFFIX,
            'fct_orgs': [],
            'fct_management': False,
            'enabled': True
        })
        set_registry_functions(functions)
    if contacts_part and CONTACTS_PART_SUFFIX not in [
            fct['fct_id'] for fct in functions
    ]:
        functions.append({
            'fct_title': u'Contacts par défaut',
            'fct_id': CONTACTS_PART_SUFFIX,
            'fct_orgs': [],
            'fct_management': False,
            'enabled': True
        })
        set_registry_functions(functions)
    # role and permission
    portal = api.portal.get()
    # existing_roles = list(portal.valid_roles())
    # if CREATING_FIELD_ROLE not in existing_roles:
    #     existing_roles.append(CREATING_FIELD_ROLE)
    #     portal.__ac_roles__ = tuple(existing_roles)
    #     portal.manage_permission('imio.dms.mail: Write creating group field',
    #                              ('Manager', 'Site Administrator', CREATING_FIELD_ROLE), acquire=0)

    # local roles config
    config = {
        'dmsincomingmail': {  # i_e ok
            'created': {
                CREATING_GROUP_SUFFIX: {
                    'roles': [
                        'Contributor', 'Editor', 'DmsFile Contributor',
                        'Base Field Writer', 'Treating Group Writer'
                    ]
                }
            },
            #                                                          CREATING_FIELD_ROLE]}},
            'proposed_to_manager': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Base Field Writer', 'Reader']
                }
            },
            'proposed_to_agent': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Reader']
                }
            },
            'in_treatment': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Reader']
                }
            },
            'closed': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Reader']
                }
            }
        },
        'dmsincoming_email': {
            'created': {
                CREATING_GROUP_SUFFIX: {
                    'roles': [
                        'Contributor', 'Editor', 'DmsFile Contributor',
                        'Base Field Writer', 'Treating Group Writer'
                    ]
                }
            },
            #                                                          CREATING_FIELD_ROLE]}},
            'proposed_to_manager': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Base Field Writer', 'Reader']
                }
            },
            'proposed_to_agent': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Reader']
                }
            },
            'in_treatment': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Reader']
                }
            },
            'closed': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Reader']
                }
            }
        },
        'dmsoutgoingmail': {
            'to_be_signed': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Editor', 'Reviewer']
                }
            },
            'sent': {
                CREATING_GROUP_SUFFIX: {
                    'roles': ['Reader', 'Reviewer']
                }
            },
            'scanned': {
                CREATING_GROUP_SUFFIX: {
                    'roles': [
                        'Contributor', 'Editor', 'Reviewer',
                        'DmsFile Contributor', 'Base Field Writer',
                        'Treating Group Writer'
                    ]
                }
            },
        },
        # 'dmsoutgoing_email': {
        #     'to_be_signed': {CREATING_GROUP_SUFFIX: {'roles': ['Editor', 'Reviewer']}},
        #     'sent': {CREATING_GROUP_SUFFIX: {'roles': ['Reader', 'Reviewer']}},
        #     'scanned': {CREATING_GROUP_SUFFIX: {'roles': ['Contributor', 'Editor', 'Reviewer', 'DmsFile Contributor',
        #                                                   'Base Field Writer', 'Treating Group Writer']}},
        # },
    }

    # add localroles for possible proposed_to_n_plus_ states
    # only incoming mails
    if 'dmsincomingmail' in portal_types:  # i_e ok
        for typ in ('dmsincomingmail', 'dmsincoming_email'):
            states = list_wf_states(portal, typ)
            for st_id, st_tit in states:
                if st_id.startswith('proposed_to_n_plus_'):
                    config[typ][st_id] = {
                        CREATING_GROUP_SUFFIX: {
                            'roles': ['Reader']
                        }
                    }

    # criterias config
    criterias = {
        'dmsincomingmail':
        ('incoming-mail', 'mail-searches', 'all_mails'),  # i_e ok
        'dmsoutgoingmail': ('outgoing-mail', 'mail-searches', 'all_mails'),
        'organization': ('contacts', 'orgs-searches', 'all_orgs'),
        'person': ('contacts', 'persons-searches', 'all_persons'),
        'held_position': ('contacts', 'hps-searches', 'all_hps'),
        'contact_list': ('contacts', 'cls-searches', 'all_cls'),
    }

    for portal_type in portal_types:
        # behaviors
        fti = getUtility(IDexterityFTI, name=portal_type)
        # try:
        #     fti = getUtility(IDexterityFTI, name=portal_type)
        # except ComponentLookupError:
        #     continue
        if 'imio.dms.mail.content.behaviors.IDmsMailCreatingGroup' not in fti.behaviors:
            old_bav = tuple(fti.behaviors)
            fti.behaviors = tuple(
                list(fti.behaviors) +
                ['imio.dms.mail.content.behaviors.IDmsMailCreatingGroup'])
            ftiModified(
                fti,
                ObjectModifiedEvent(
                    fti,
                    DexterityFTIModificationDescription('behaviors', old_bav)))

        # local roles
        if config.get(portal_type):
            msg = add_fti_configuration(portal_type,
                                        config[portal_type],
                                        keyname='creating_group')
            if msg:
                logger.warn(msg)

        # criterias
        folder_id, category_id, default_id = criterias.get(
            portal_type, ('', '', ''))
        if folder_id:
            reimport_faceted_config(
                portal[folder_id][category_id],
                xml='mail-searches-group-encoder.xml',
                default_UID=portal[folder_id][category_id][default_id].UID())

    # display added field for im and om
    if not contacts_part:
        config = {'dmsincomingmail': 'imail', 'dmsoutgoingmail': 'omail'}
        key = 'imio.dms.mail.browser.settings.IImioDmsMailConfig.{}_fields'.format(
            config[portal_types[0]])
        fields = api.portal.get_registry_record(key)
        if 'IDmsMailCreatingGroup.creating_group' not in [
                f['field_name'] for f in fields
        ]:
            fields.append({
                'field_name': 'IDmsMailCreatingGroup.creating_group',
                'read_tal_condition': u'',
                'write_tal_condition': u''
            })
            api.portal.set_registry_record(key, fields)
コード例 #5
0
ファイル: vocabularies.py プロジェクト: gotcha/imio.dms.mail
 def __call__(self, context):
     terms = []
     for state in list_wf_states(context, 'task'):
         terms.append(SimpleVocabulary.createTerm(
             state, state, translate(state, domain='plone', context=context.REQUEST)))
     return SimpleVocabulary(terms)