0001-workflows-add-target-roles-in-display-message-workfl.patch
tests/test_workflow_import.py | ||
---|---|---|
406 | 406 |
assert wf2.possible_status[0].items[0].rules == [ |
407 | 407 |
{'value': 'a', 'role_id': role3.id}, {'value': 'b', 'role_id': role4.id}] |
408 | 408 |
assert wf2.possible_status[0].items[0].dispatch_type == 'automatic' |
409 | ||
410 | ||
411 |
def test_display_message_action(): |
|
412 |
wf = Workflow(name='status') |
|
413 |
st1 = wf.add_status('Status1', 'st1') |
|
414 | ||
415 |
from wcs.workflows import DisplayMessageWorkflowStatusItem |
|
416 | ||
417 |
display = DisplayMessageWorkflowStatusItem() |
|
418 |
display.message = 'hey' |
|
419 |
display.to = ['_submitter', '1'] |
|
420 |
st1.items.append(display) |
|
421 |
display.parent = st1 |
|
422 | ||
423 |
wf2 = assert_import_export_works(wf) |
|
424 |
assert wf2.possible_status[0].items[0].message == display.message |
|
425 |
for role_id in display.to: |
|
426 |
assert role_id in wf2.possible_status[0].items[0].to |
tests/test_workflows.py | ||
---|---|---|
779 | 779 |
display_message.message = '[foo]' |
780 | 780 |
assert display_message.get_message(formdata) == '1 < 3' |
781 | 781 | |
782 |
def test_workflow_display_message_to(pub): |
|
783 |
workflow = Workflow(name='display message to') |
|
784 |
st1 = workflow.add_status('Status1', 'st1') |
|
785 | ||
786 |
role = Role(name='foorole') |
|
787 |
role.store() |
|
788 |
role2 = Role(name='no-one-role') |
|
789 |
role2.store() |
|
790 |
user = pub.user_class(name='baruser') |
|
791 |
user.roles = [] |
|
792 |
user.store() |
|
793 | ||
794 |
FormDef.wipe() |
|
795 |
formdef = FormDef() |
|
796 |
formdef.url_name = 'foobar' |
|
797 |
formdef._workflow = workflow |
|
798 | ||
799 |
formdata = formdef.data_class()() |
|
800 |
formdata.status = 'wf-st1' |
|
801 | ||
802 |
display_message = DisplayMessageWorkflowStatusItem() |
|
803 |
display_message.parent = st1 |
|
804 |
st1.items.append(display_message) |
|
805 | ||
806 |
display_message.message = 'all' |
|
807 |
display_message.to = None |
|
808 |
assert display_message.get_message(formdata) == 'all' |
|
809 |
assert formdata.workflow_messages() == ['all'] |
|
810 | ||
811 |
display_message.message = 'to-role' |
|
812 |
display_message.to = [role.id] |
|
813 |
assert display_message.get_message(formdata) == '' |
|
814 |
assert formdata.workflow_messages() == [] |
|
815 | ||
816 |
pub._request.user = user |
|
817 |
display_message.message = 'to-role' |
|
818 |
display_message.to = [role.id] |
|
819 |
assert display_message.get_message(formdata) == '' |
|
820 |
assert formdata.workflow_messages() == [] |
|
821 |
user.roles = [role.id] |
|
822 |
assert display_message.get_message(formdata) == 'to-role' |
|
823 |
assert formdata.workflow_messages() == ['to-role'] |
|
824 | ||
825 |
user.roles = [] |
|
826 |
display_message.message = 'to-submitter' |
|
827 |
display_message.to = ['_submitter'] |
|
828 |
assert display_message.get_message(formdata) == '' |
|
829 |
assert formdata.workflow_messages() == [] |
|
830 |
formdata.user_id = user.id |
|
831 |
assert display_message.get_message(formdata) == 'to-submitter' |
|
832 |
assert formdata.workflow_messages() == ['to-submitter'] |
|
833 | ||
834 |
display_message.message = 'to-role-or-submitter' |
|
835 |
display_message.to = [role.id, '_submitter'] |
|
836 |
assert display_message.get_message(formdata) == 'to-role-or-submitter' |
|
837 |
assert formdata.workflow_messages() == ['to-role-or-submitter'] |
|
838 |
formdata.user_id = None |
|
839 |
assert display_message.get_message(formdata) == '' |
|
840 |
assert formdata.workflow_messages() == [] |
|
841 |
user.roles = [role.id] |
|
842 |
assert display_message.get_message(formdata) == 'to-role-or-submitter' |
|
843 |
assert formdata.workflow_messages() == ['to-role-or-submitter'] |
|
844 |
formdata.user_id = user.id |
|
845 |
assert display_message.get_message(formdata) == 'to-role-or-submitter' |
|
846 |
assert formdata.workflow_messages() == ['to-role-or-submitter'] |
|
847 | ||
848 |
display_message.to = [role2.id] |
|
849 |
assert display_message.get_message(formdata) == '' |
|
850 |
assert formdata.workflow_messages() == [] |
|
851 | ||
852 |
display_message.message = 'd1' |
|
853 |
display_message2 = DisplayMessageWorkflowStatusItem() |
|
854 |
display_message2.parent = st1 |
|
855 |
st1.items.append(display_message2) |
|
856 |
display_message2.message = 'd2' |
|
857 |
display_message2.to = [role.id, '_submitter'] |
|
858 |
assert formdata.workflow_messages() == ['d2'] |
|
859 |
user.roles = [role.id, role2.id] |
|
860 |
assert 'd1' in formdata.workflow_messages() |
|
861 |
assert 'd2' in formdata.workflow_messages() |
|
862 | ||
782 | 863 |
def test_workflow_roles(pub): |
783 | 864 |
pub.substitutions.feed(MockSubstitutionVariables()) |
784 | 865 |
wcs/formdata.py | ||
---|---|---|
279 | 279 |
url = perform_items(wf_status.items, self) |
280 | 280 |
return url |
281 | 281 | |
282 |
def display_workflow_message(self):
|
|
282 |
def workflow_messages(self):
|
|
283 | 283 |
wf_status = self.get_status() |
284 | 284 |
if not wf_status: |
285 |
return '' |
|
286 |
for status in wf_status.items: |
|
287 |
if hasattr(status, 'get_message'): |
|
288 |
return status.get_message(self) |
|
289 |
return '' |
|
285 |
return [] |
|
286 |
messages = [] |
|
287 |
for item in wf_status.items: |
|
288 |
if hasattr(item, 'get_message'): |
|
289 |
message = item.get_message(self) |
|
290 |
if message: |
|
291 |
messages.append(message) |
|
292 |
return messages |
|
290 | 293 | |
291 | 294 |
def get_status(self, status = None): |
292 | 295 |
if not status: |
wcs/forms/common.py | ||
---|---|---|
132 | 132 |
self.check_auth(api_call=True) |
133 | 133 |
return self.export_to_json() |
134 | 134 | |
135 |
def receipt_message(self, mine=False):
|
|
135 |
def workflow_messages(self):
|
|
136 | 136 |
if self.formdef.workflow: |
137 |
workflow_message = self.filled.display_workflow_message()
|
|
138 |
if workflow_message: |
|
137 |
workflow_messages = self.filled.workflow_messages()
|
|
138 |
if workflow_messages:
|
|
139 | 139 |
r = TemplateIO(html=True) |
140 |
if workflow_message.startswith('<'): |
|
141 |
r += htmltext(workflow_message) |
|
142 |
else: |
|
143 |
r += htmltext('<p>%s</p>' % workflow_message) |
|
140 |
for workflow_message in workflow_messages: |
|
141 |
if workflow_message.startswith('<'): |
|
142 |
r += htmltext(workflow_message) |
|
143 |
else: |
|
144 |
r += htmltext('<p>%s</p>' % workflow_message) |
|
144 | 145 |
return r.getvalue() |
146 |
return '' |
|
147 | ||
148 |
def receipt_message(self, mine=False): |
|
149 |
workflow_messages = self.workflow_messages() |
|
150 |
if workflow_messages: |
|
151 |
return workflow_messages |
|
145 | 152 | |
146 | 153 |
r = TemplateIO(html=True) |
147 | 154 |
# behaviour if workflow doesn't display any message |
... | ... | |
485 | 492 | |
486 | 493 |
r += self.receipt(always_include_user = True) |
487 | 494 | |
488 |
if self.formdef.workflow: |
|
489 |
r += htmltext(self.filled.display_workflow_message()) |
|
495 |
r += htmltext(self.workflow_messages()) |
|
490 | 496 | |
491 | 497 |
r += self.history() |
492 | 498 |
wcs/workflows.py | ||
---|---|---|
1804 | 1804 |
support_substitution_variables = True |
1805 | 1805 |
ok_in_global_action = False |
1806 | 1806 | |
1807 |
to = None |
|
1808 | ||
1807 | 1809 |
message = None |
1808 | 1810 | |
1811 |
def render_as_line(self): |
|
1812 |
if self.to: |
|
1813 |
return _('Display message to %s') % self.render_list_of_roles(self.to) |
|
1814 |
else: |
|
1815 |
return _('Display message') |
|
1816 | ||
1809 | 1817 |
def get_message(self, filled): |
1810 | 1818 |
if not self.message: |
1811 | 1819 |
return '' |
1820 | ||
1821 |
if self.to: |
|
1822 |
if not get_request(): |
|
1823 |
return '' |
|
1824 |
user = get_request().user |
|
1825 |
for role in self.to or []: |
|
1826 |
if role == '_submitter': |
|
1827 |
if filled.is_submitter(user): |
|
1828 |
break |
|
1829 |
elif user: |
|
1830 |
role = get_role_translation(filled, role) |
|
1831 |
if role in (user.roles or []): |
|
1832 |
break |
|
1833 |
else: |
|
1834 |
return '' |
|
1835 | ||
1812 | 1836 |
tmpl = ezt.Template() |
1813 | 1837 |
tmpl.parse(self.message, base_format=ezt.FORMAT_HTML) |
1814 | 1838 | |
... | ... | |
1830 | 1854 |
if 'message' in parameters: |
1831 | 1855 |
form.add(TextWidget, '%smessage' % prefix, title = _('Message'), |
1832 | 1856 |
value = self.message, cols = 80, rows = 10) |
1857 |
if 'to' in parameters: |
|
1858 |
form.add(WidgetList, '%sto' % prefix, title=_('To'), |
|
1859 |
element_type=SingleSelectWidget, |
|
1860 |
value=self.to or [], |
|
1861 |
add_element_label=_('Add Role'), |
|
1862 |
element_kwargs={'render_br': False, |
|
1863 |
'options': [(None, '---', None)] + |
|
1864 |
self.get_list_of_roles(include_logged_in_users=False)}) |
|
1833 | 1865 | |
1834 | 1866 |
def get_parameters(self): |
1835 |
return ('message',) |
|
1867 |
return ('message', 'to')
|
|
1836 | 1868 | |
1837 | 1869 |
register_item_class(DisplayMessageWorkflowStatusItem) |
1838 | 1870 | |
1839 |
- |