misc: move get_role_translation function to formdata (#38254)

This commit is contained in:
Nicolas Roche 2020-12-12 10:49:22 +01:00
parent a0a88ef952
commit e4c5bea0d8
6 changed files with 32 additions and 40 deletions

View File

@ -75,7 +75,7 @@ from wcs.formdata import FormData
from wcs.formdef import FormDef
from wcs.roles import logged_users_role, Role
from wcs.variables import LazyFieldVar
from wcs.workflows import get_role_translation, template_on_formdata, WorkflowStatusItem
from wcs.workflows import template_on_formdata, WorkflowStatusItem
from .submission import FormFillPage
@ -3292,7 +3292,7 @@ class FormBackOfficeStatusPage(FormStatusPage):
r += htmltext('<ul class="form-inspector biglist">')
for key, label in (workflow.roles or {}).items():
r += htmltext('<li><span class="label">%s</span>') % label
acting_role_id = get_role_translation(self.filled, key)
acting_role_id = self.filled.get_role_translation(key)
if acting_role_id:
try:
acting_role = Role.get(acting_role_id)

View File

@ -676,12 +676,25 @@ class FormData(StorableObject):
def get_display_id(self):
return str(self.id_display or self.id)
def get_role_translation(self, role_name):
if role_name == '_submitter':
raise Exception('_submitter is not a valid role')
elif str(role_name).startswith('_'):
role_id = None
if self.workflow_roles:
role_id = self.workflow_roles.get(role_name)
if not role_id and self.formdef.workflow_roles:
role_id = self.formdef.workflow_roles.get(role_name)
if role_id is None:
return role_id
return str(role_id)
else:
return str(role_name)
def get_handling_role_id(self):
# TODO: look at current status and return the role(s) actually
# concerned by the handling of the formdata
from wcs.workflows import get_role_translation
return get_role_translation(self, '_receiver')
return self.get_role_translation('_receiver')
def get_handling_role(self):
try:
@ -986,10 +999,8 @@ class FormData(StorableObject):
# make sure the handling roles always gets access to the formdata, till
# the very end (where it may be that there is no workflow status item
# at all).
from wcs.workflows import get_role_translation
for function_key in self.formdef.workflow.roles.keys():
handling_role = get_role_translation(self, function_key)
handling_role = self.get_role_translation(function_key)
if handling_role:
status_action_roles.add(handling_role)
@ -1010,8 +1021,6 @@ class FormData(StorableObject):
if not wf_status:
return []
from wcs.workflows import get_role_translation
status_action_roles = set()
for item in wf_status.items or []:
if not hasattr(item, 'by') or not item.by:
@ -1023,7 +1032,7 @@ class FormData(StorableObject):
if role == '_submitter':
status_action_roles.add(role)
else:
real_role = get_role_translation(self, role)
real_role = self.get_role_translation(role)
if real_role:
status_action_roles.add(real_role)

View File

@ -23,7 +23,7 @@ from ..qommon import errors
from wcs.api import get_user_from_api_query_string, is_url_signed
from wcs.roles import logged_users_role
from wcs.workflows import WorkflowGlobalActionWebserviceTrigger, get_role_translation, perform_items
from wcs.workflows import WorkflowGlobalActionWebserviceTrigger, perform_items
class HookDirectory(Directory):
@ -49,7 +49,7 @@ class HookDirectory(Directory):
break
if not user:
continue
if get_role_translation(self.formdata, role) in user.get_roles():
if self.formdata.get_role_translation(role) in user.get_roles():
break
else:
raise errors.AccessForbiddenError('insufficient roles')

View File

@ -21,8 +21,7 @@ from ..qommon.form import *
from ..qommon.cron import CronJob
from ..qommon import emails
from wcs.workflows import WorkflowStatusItem, register_item_class, get_role_translation
from wcs.workflows import WorkflowStatusItem, register_item_class
from wcs.roles import Role
@ -66,7 +65,7 @@ class AggregationEmailWorkflowStatusItem(WorkflowStatusItem):
return
for dest in self.to:
dest = get_role_translation(formdata, dest)
dest = formdata.get_role_translation(dest)
try:
aggregate = AggregationEmail.get(dest)
except KeyError:

View File

@ -24,7 +24,7 @@ from ..qommon.template import TemplateError
from ..qommon import get_logger
from wcs.roles import Role
from wcs.workflows import WorkflowStatusItem, register_item_class, template_on_formdata, get_role_translation
from wcs.workflows import WorkflowStatusItem, register_item_class, template_on_formdata
from .wscall import WebserviceCallStatusItem
@ -152,7 +152,7 @@ class SendNotificationWorkflowStatusItem(WebserviceCallStatusItem):
users.append(formdata.get_user())
continue
dest = get_role_translation(formdata, dest)
dest = formdata.get_role_translation(dest)
try:
role = Role.get(dest)
except KeyError:

View File

@ -522,7 +522,7 @@ class Workflow(StorableObject):
actions.append(action)
break
roles = [
get_role_translation(formdata, x) for x in (trigger.roles or []) if x != '_submitter'
formdata.get_role_translation(x) for x in (trigger.roles or []) if x != '_submitter'
]
if set(roles).intersection(user.get_roles()):
actions.append(action)
@ -1633,7 +1633,7 @@ class WorkflowStatus(object):
continue
if user is None:
continue
role = get_role_translation(filled, role)
role = filled.get_role_translation(role)
if role in user.get_roles():
break
else:
@ -1724,7 +1724,7 @@ class WorkflowStatus(object):
for role in visibility_roles:
if role != '_submitter':
role = get_role_translation(formdata, role)
role = formdata.get_role_translation(role)
if role in user_roles:
return True
return False
@ -1926,7 +1926,7 @@ class WorkflowStatusItem(XmlSerialisable):
continue
if not user:
continue
role = get_role_translation(formdata, role)
role = formdata.get_role_translation(role)
if role in user.get_roles():
return True
@ -2392,22 +2392,6 @@ class WorkflowStatusJumpItem(WorkflowStatusItem):
return ('status', 'set_marker_on_status', 'condition')
def get_role_translation(formdata, role_name):
if role_name == '_submitter':
raise Exception('_submitter is not a valid role')
elif str(role_name).startswith('_'):
role_id = None
if formdata.workflow_roles:
role_id = formdata.workflow_roles.get(role_name)
if not role_id and formdata.formdef.workflow_roles:
role_id = formdata.formdef.workflow_roles.get(role_name)
if role_id is None:
return role_id
return str(role_id)
else:
return str(role_name)
def get_role_translation_label(workflow, role_id):
if role_id == logged_users_role().id:
return logged_users_role().name
@ -2967,7 +2951,7 @@ class SendmailWorkflowStatusItem(WorkflowStatusItem):
addresses.append(submitter_email)
continue
dest = get_role_translation(formdata, dest)
dest = formdata.get_role_translation(dest)
try:
role = Role.get(dest)
@ -3160,7 +3144,7 @@ class DisplayMessageWorkflowStatusItem(WorkflowStatusItem):
if filled.is_submitter(user):
return True
elif user:
role = get_role_translation(filled, role)
role = filled.get_role_translation(role)
if role in user.get_roles():
return True
return False