From f50dfe6a0dd3601a6c1f942985188d350999b778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 6 Feb 2014 17:04:32 +0100 Subject: [PATCH] allow supervisors (except the greffier) to see subtasks (#4225) --- .../default/workflows/task_workflow/definition.xml | 6 ++++++ src/collective/task/subscribers.py | 11 +++++++++++ 2 files changed, 17 insertions(+) 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()