admin: display list of source status (#5739)
This commit is contained in:
parent
c60cf90548
commit
7e774f9f05
|
@ -115,14 +115,7 @@ def graphviz(workflow, url_prefix='', select=None, svg=True,
|
|||
for status in workflow.possible_status:
|
||||
i = status.id
|
||||
for item in status.items:
|
||||
next_status_ids = []
|
||||
for status_key in item.__dict__:
|
||||
if status_key == 'status' or \
|
||||
status_key.startswith('status_') or \
|
||||
status_key.endswith('_status'):
|
||||
next_id = getattr(item, status_key, None)
|
||||
if next_id:
|
||||
next_status_ids.append(next_id)
|
||||
next_status_ids = [x.id for x in item.get_target_status()]
|
||||
if not next_status_ids:
|
||||
next_status_ids = [status.id]
|
||||
for next_id in next_status_ids:
|
||||
|
@ -355,6 +348,23 @@ class WorkflowStatusPage(Directory):
|
|||
r += htmltext('</ul>')
|
||||
r += htmltext('</div>') # bo-block
|
||||
|
||||
source_status = []
|
||||
for status in self.workflow.possible_status:
|
||||
if status is self.status:
|
||||
continue
|
||||
for item in status.items:
|
||||
if self.status in item.get_target_status():
|
||||
source_status.append(status)
|
||||
break
|
||||
|
||||
if source_status:
|
||||
r += htmltext('<div class="bo-block">')
|
||||
r += htmltext('<h3>%s</h3>') % _('Jumps')
|
||||
r += htmltext('<p>%s ') % _('This status is reachable from the following status:')
|
||||
r += htmltext(', ').join([htmltext('<a href="../%s/">%s</a>') % (x.id, x.name) for x in source_status])
|
||||
r += htmltext('.</p>')
|
||||
r += htmltext('</div>')
|
||||
|
||||
r += htmltext('<p><a href="../../">%s</a></p>') % _('Back to workflow main page')
|
||||
|
||||
r += htmltext('<div class="bo-block">')
|
||||
|
|
|
@ -122,7 +122,7 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
def render_as_line(self):
|
||||
if not self.status:
|
||||
return _('Change Status Automatically (not completed)')
|
||||
wf_status = self.get_status()
|
||||
wf_status = self.get_target_status()
|
||||
if not wf_status:
|
||||
return _('Change Status Automatically (broken)')
|
||||
reasons = []
|
||||
|
@ -135,10 +135,10 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
|
||||
if reasons:
|
||||
return _('Change Status Automatically (to %(name)s) (%(reasons)s)') % {
|
||||
'name': wf_status.name,
|
||||
'name': wf_status[0].name,
|
||||
'reasons': ', '.join(reasons)}
|
||||
else:
|
||||
return _('Change Status Automatically (to %s)') % wf_status.name
|
||||
return _('Change Status Automatically (to %s)') % wf_status[0].name
|
||||
|
||||
def get_parameters(self):
|
||||
return ('status', 'condition', 'trigger', 'by', 'timeout')
|
||||
|
@ -186,9 +186,9 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
return
|
||||
|
||||
if self.must_jump(formdata):
|
||||
wf_status = self.get_status()
|
||||
wf_status = self.get_target_status()
|
||||
if wf_status:
|
||||
formdata.status = 'wf-%s' % wf_status.id
|
||||
formdata.status = 'wf-%s' % wf_status[0].id
|
||||
|
||||
def must_jump(self, formdata):
|
||||
must_jump = True
|
||||
|
@ -243,7 +243,7 @@ def workflows_with_timeout():
|
|||
wfs_status[id] = {}
|
||||
if not wfs_status[id].has_key(status_str):
|
||||
wfs_status[id][status_str] = []
|
||||
if not item.get_status():
|
||||
if not item.get_target_status():
|
||||
# this will catch status being a removed status
|
||||
continue
|
||||
wfs_status[id][status_str].append(item)
|
||||
|
|
|
@ -34,9 +34,9 @@ class TimeoutWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
is_available = classmethod(is_available)
|
||||
|
||||
def render_as_line(self):
|
||||
if self.status and self.get_status() and self.timeout:
|
||||
if self.status and self.get_target_status() and self.timeout:
|
||||
return _('Change Status on Timeout to "%(status)s" after %(time)s') % \
|
||||
{'status': self.get_status().name, 'time': seconds2humanduration(self.timeout)}
|
||||
{'status': self.get_target_status()[0].name, 'time': seconds2humanduration(self.timeout)}
|
||||
else:
|
||||
return _('Change Status on Timeout (not completed)')
|
||||
|
||||
|
|
|
@ -769,6 +769,10 @@ class WorkflowStatusItem:
|
|||
def get_substitution_variables(self, formdata):
|
||||
return {}
|
||||
|
||||
def get_target_status(self):
|
||||
"""Returns a list of status this item can lead to."""
|
||||
return []
|
||||
|
||||
def export_to_xml(self, charset, include_id=False):
|
||||
item = ET.Element('item')
|
||||
item.attrib['type'] = self.key
|
||||
|
@ -938,18 +942,18 @@ class WorkflowStatusJumpItem(WorkflowStatusItem):
|
|||
status = None
|
||||
endpoint = False
|
||||
|
||||
def get_status(self):
|
||||
def get_target_status(self):
|
||||
if not self.status:
|
||||
return None
|
||||
return []
|
||||
try:
|
||||
return [x for x in self.parent.parent.possible_status if x.id == self.status][0]
|
||||
return [x for x in self.parent.parent.possible_status if x.id == self.status]
|
||||
except IndexError:
|
||||
get_publisher().get_app_logger().error(
|
||||
'reference to invalid status in workflow %s, status %s, item %s' % (
|
||||
self.parent.parent.name,
|
||||
self.parent.name,
|
||||
self.description))
|
||||
return None
|
||||
return []
|
||||
|
||||
def add_parameters_widgets(self, form, parameters, prefix='', formdef=None):
|
||||
if 'status' in parameters:
|
||||
|
@ -1126,9 +1130,9 @@ class ChoiceWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
|
||||
def submit_form(self, form, formdata, user, evo):
|
||||
if form.get_submit() == 'button%s' % self.id:
|
||||
wf_status = self.get_status()
|
||||
wf_status = self.get_target_status()
|
||||
if wf_status:
|
||||
evo.status = 'wf-%s' % wf_status.id
|
||||
evo.status = 'wf-%s' % wf_status[0].id
|
||||
form.clear_errors()
|
||||
return True # get out of processing loop
|
||||
|
||||
|
@ -1155,8 +1159,8 @@ class JumpOnSubmitWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
|
||||
def render_as_line(self):
|
||||
if self.status:
|
||||
if self.get_status():
|
||||
return _('Change Status on Submit (to %s)') % self.get_status().name
|
||||
if self.get_target_status():
|
||||
return _('Change Status on Submit (to %s)') % self.get_target_status()[0].name
|
||||
else:
|
||||
return _('Change Status on Submit (broken)')
|
||||
else:
|
||||
|
@ -1164,9 +1168,9 @@ class JumpOnSubmitWorkflowStatusItem(WorkflowStatusJumpItem):
|
|||
|
||||
def submit_form(self, form, formdata, user, evo):
|
||||
if form.is_submitted() and not form.has_errors():
|
||||
wf_status = self.get_status()
|
||||
wf_status = self.get_target_status()
|
||||
if wf_status:
|
||||
evo.status = 'wf-%s' % wf_status.id
|
||||
evo.status = 'wf-%s' % wf_status[0].id
|
||||
|
||||
def get_parameters(self):
|
||||
return ('status',)
|
||||
|
|
Loading…
Reference in New Issue