workflows: add user to jumps done from global actions (#74480) #771

Merged
fpeters merged 1 commits from wip/74480-global-action-jump-author into main 2023-10-27 08:34:26 +02:00
3 changed files with 14 additions and 7 deletions

View File

@ -3858,6 +3858,7 @@ def test_user_global_action(pub):
resp = app.get(formdata.get_url())
assert 'HELLO WORLD GLOBAL ACTION' in resp.text
assert resp.pyquery('.endpoint .user').text() == 'User Name'
assert formdef.data_class().get(formdata.id).status == 'wf-finished'
trace_event, trace_action = WorkflowTrace.select_for_formdata(formdata)[:2]
assert (

View File

@ -244,6 +244,14 @@ class Evolution:
def datetime(self):
return datetime.datetime(*self.time[:6])
def set_user(self, formdata, user):
if user is None:
self.who = None
elif formdata.is_submitter(user):
self.who = '_submitter'
else:
self.who = user.id
def get_status(self):
status = self.status
if not self.status:
@ -692,7 +700,7 @@ class FormData(StorableObject):
if action.id != action_id:
continue
with push_perform_workflow(self):
return perform_items(action.items, self, global_action=True)
return perform_items(action.items, formdata=self, user=user, global_action=True)
def get_workflow_messages(self, position='top', user=None):
wf_status = self.get_visible_status(user=user)

View File

@ -75,7 +75,7 @@ def lax_int(s):
return -1
def perform_items(items, formdata, depth=20, global_action=False):
def perform_items(items, formdata, depth=20, user=None, global_action=False):
if depth == 0: # prevents infinite loops
return
url = None
@ -101,6 +101,8 @@ def perform_items(items, formdata, depth=20, global_action=False):
if not formdata.evolution:
formdata.evolution = []
evo = Evolution()
if global_action:
evo.set_user(formdata=formdata, user=user)
evo.time = time.localtime()
evo.status = formdata.status
formdata.evolution.append(evo)
@ -2221,11 +2223,7 @@ class SerieOfActionsMixin:
def handle_form(self, form, filled, user, evo):
evo.time = time.localtime()
if user:
if filled.is_submitter(user):
evo.who = '_submitter'
else:
evo.who = user.id
evo.set_user(formdata=filled, user=user)
if not filled.evolution:
filled.evolution = []