def can_access_archival_file_form(user, content):
    """Returns True if the user has 'Modify portal content' permission in any
    open dossier state. And the containing dossier is
     - not a templatefolder
     - not inactive
    """

    assert IBaseDocument.providedBy(
        content), 'Content needs to provide IBaseDocument'

    dossier = find_parent_dossier(content)
    if ITemplateFolder.providedBy(dossier):
        return False
    if api.content.get_state(obj=dossier) == 'dossier-state-inactive':
        return False

    wftool = api.portal.get_tool('portal_workflow')
    workflow_id = wftool.getChainForPortalType(dossier.portal_type)[0]
    user_roles = user.getRolesInContext(dossier)

    for open_state in DOSSIER_STATES_OPEN:
        state = wftool.get(workflow_id).states.get(open_state)
        roles_with_modify = state.permission_roles['Modify portal content']
        return bool(set(roles_with_modify).intersection(user_roles))

    return False
def can_access_public_trial_edit_form(user, content):
    """Returns True if the user has 'Modify portal content' permission in any
    open dossier state. And the containing dossier is
     - not a templatefolder
     - not inactive
     - not an inbox
    """

    assert IBaseDocument.providedBy(
        content), 'Content needs to provide IBaseDocument'

    wftool = getToolByName(content, 'portal_workflow')
    dossier = find_parent_dossier(content)

    if ITemplateFolder.providedBy(dossier):
        return False
    if IInbox.providedBy(dossier):
        return False
    if wftool.getInfoFor(dossier, 'review_state') == 'dossier-state-inactive':
        return False

    workflow_id = wftool.getChainForPortalType(dossier.portal_type)[0]
    user_roles = user.getRolesInContext(dossier)

    has_role = False

    for open_state in DOSSIER_STATES_OPEN:
        state = wftool.get(workflow_id).states.get(open_state)

        if state is None:
            continue

        roles_with_modify = state.permission_roles['Modify portal content']

        has_role = bool(set(roles_with_modify) & set(user_roles))

        if has_role:
            break
        else:
            continue
    return has_role
Example #3
0
def can_access_public_trial_edit_form(user, content):
    """Returns True if the user has 'Modify portal content' permission in any
    open dossier state. And the containing dossier is
     - not a templatefolder
     - not inactive
     - not an inbox
    """

    assert IBaseDocument.providedBy(
        content), 'Content needs to provide IBaseDocument'

    wftool = getToolByName(content, 'portal_workflow')
    dossier = find_parent_dossier(content)

    if ITemplateFolder.providedBy(dossier):
        return False
    if IInbox.providedBy(dossier):
        return False
    if wftool.getInfoFor(dossier, 'review_state') == 'dossier-state-inactive':
        return False

    workflow_id = wftool.getChainForPortalType(dossier.portal_type)[0]
    user_roles = user.getRolesInContext(dossier)

    has_role = False

    for open_state in DOSSIER_STATES_OPEN:
        state = wftool.get(workflow_id).states.get(open_state)

        if state is None:
            continue

        roles_with_modify = state.permission_roles['Modify portal content']

        has_role = bool(set(roles_with_modify) & set(user_roles))

        if has_role:
            break
        else:
            continue
    return has_role
    def test_find_parent_inbox(self):
        self.login(self.secretariat_user)

        self.assertEquals(self.inbox, find_parent_dossier(self.inbox_document))
Example #5
0
    def test_find_first_parent_dossier(self):
        dossier = create(Builder('dossier'))
        task = create(Builder('task').within(dossier))
        document = create(Builder('document').within(task))

        self.assertEquals(dossier, find_parent_dossier(document))
Example #6
0
    def test_find_parent_on_nested_dossierts(self):
        dossier = create(Builder('dossier'))
        subdossier = create(Builder('dossier').within(dossier))
        document = create(Builder('document').within(subdossier))

        self.assertEquals(subdossier, find_parent_dossier(document))
Example #7
0
 def test_raise_valuerror_if_plone_root_is_reached(self):
     document = create(Builder('document'))
     with self.assertRaises(ValueError):
         find_parent_dossier(document)
Example #8
0
 def test_raise_valuerror_if_plone_root_is_passed(self):
     with self.assertRaises(ValueError):
         find_parent_dossier(self.portal)
Example #9
0
 def test_return_itself_if_dossier_is_passed(self):
     dossier = create(Builder('dossier'))
     self.assertEquals(dossier, find_parent_dossier(dossier))
    def test_find_first_parent_dossier(self):
        self.login(self.regular_user)

        self.assertEquals(self.dossier, find_parent_dossier(self.taskdocument))
    def test_find_parent_on_nested_dossiers(self):
        self.login(self.regular_user)

        self.assertEquals(self.subdossier, find_parent_dossier(self.subdocument))
Example #12
0
 def test_raise_valuerror_if_plone_root_is_reached(self):
     document = create(Builder('document'))
     with self.assertRaises(ValueError):
         find_parent_dossier(document)
    def test_raise_valuerror_if_plone_root_is_reached(self):
        self.login(self.regular_user)

        document = create(Builder('document'))
        with self.assertRaises(ValueError):
            find_parent_dossier(self.leaf_repofolder)
    def test_raise_valuerror_if_plone_root_is_passed(self):
        self.login(self.regular_user)

        with self.assertRaises(ValueError):
            find_parent_dossier(self.portal)
    def test_return_itself_if_dossier_is_passed(self):
        self.login(self.regular_user)

        self.assertEquals(self.dossier, find_parent_dossier(self.dossier))
Example #16
0
 def test_return_itself_if_dossier_is_passed(self):
     dossier = create(Builder('dossier'))
     self.assertEquals(dossier, find_parent_dossier(dossier))
Example #17
0
    def test_find_first_parent_dossier(self):
        dossier = create(Builder('dossier'))
        task = create(Builder('task').within(dossier))
        document = create(Builder('document').within(task))

        self.assertEquals(dossier, find_parent_dossier(document))
Example #18
0
    def test_find_parent_on_nested_dossierts(self):
        dossier = create(Builder('dossier'))
        subdossier = create(Builder('dossier').within(dossier))
        document = create(Builder('document').within(subdossier))

        self.assertEquals(subdossier, find_parent_dossier(document))