diff --git a/src/collective/task/profiles/default/workflows/task_workflow/definition.xml b/src/collective/task/profiles/default/workflows/task_workflow/definition.xml index 27ba654..ebc3a4e 100644 --- a/src/collective/task/profiles/default/workflows/task_workflow/definition.xml +++ b/src/collective/task/profiles/default/workflows/task_workflow/definition.xml @@ -14,6 +14,7 @@ Manager Reviewer Editor + Reader Manager @@ -26,6 +27,7 @@ Manager Reviewer Editor + Reader Manager @@ -36,6 +38,7 @@ Manager Reviewer Editor + Reader Manager @@ -48,6 +51,7 @@ Manager Reviewer Editor + Reader Manager @@ -60,6 +64,7 @@ Manager Reviewer Editor + Reader Manager @@ -75,6 +80,7 @@ Manager Reviewer Editor + Reader Manager diff --git a/src/collective/task/subscribers.py b/src/collective/task/subscribers.py index 2b41ad5..7f40587 100644 --- a/src/collective/task/subscribers.py +++ b/src/collective/task/subscribers.py @@ -1,3 +1,4 @@ +from Acquisition import aq_parent from five import grok from OFS.interfaces import IObjectWillBeRemovedEvent @@ -71,6 +72,16 @@ def set_enquirer(context, event): enquirer = api.user.get_current().id enquirer_dm = LocalRolesToPrincipalsDataManager(context, IBaseTask['enquirer']) enquirer_dm.set((enquirer,)) + + parent = aq_parent(context) + if IBaseTask.providedBy(parent): + # parent is also a task, we create Reader local role value on its own + # roles, unless parent enquirer is the greffier. + if not 'Greffier' in api.user.get_roles(parent.enquirer[0]): + for user_id, roles in parent.get_local_roles(): + if 'Reader' in roles or 'Reviewer' in roles: + context.manage_addLocalRoles(user_id, ['Reader']) + context.reindexObject()