Projet

Général

Profil

0001-workflows-add-target-roles-in-display-message-workfl.patch

Thomas Noël, 22 janvier 2016 19:16

Télécharger (6,6 ko)

Voir les différences:

Subject: [PATCH] workflows: add target roles in display message workflow item
 (#9705)

 tests/test_workflows.py | 35 +++++++++++++++++++++++++++++++++++
 wcs/formdata.py         | 15 +++++++++------
 wcs/forms/common.py     | 24 +++++++++++++++---------
 wcs/workflows.py        | 34 +++++++++++++++++++++++++++++++++-
 4 files changed, 92 insertions(+), 16 deletions(-)
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')
784
    st1 = workflow.add_status('Status1', 'st1')
785

  
786
    FormDef.wipe()
787
    formdef = FormDef()
788
    formdef.name = 'foobar'
789
    formdef.fields = []
790
    formdef.store()
791
    formdata = formdef.data_class()()
792
    formdata.id = '1'
793
    formdata.status = 'wf-st1'
794
    formdata.store()
795

  
796
    display_message = DisplayMessageWorkflowStatusItem()
797
    display_message.parent = st1
798
    st1.items.append(display_message)
799
    workflow.store()
800
    formdef.workflow = workflow
801
    formdef.store()
802

  
803
    display_message.message = 'all'
804
    display_message.to = None
805
    workflow.store()
806
    assert display_message.get_message(formdata) == 'all'
807
    assert formdata.workflow_messages() == ['all']
808

  
809
    display_message.message = 'only-submitter'
810
    display_message.to = ['_submitter']
811
    workflow.store()
812
    formdef.workflow = workflow
813
    formdef.store()
814
    assert display_message.get_message(formdata) == ''
815
    assert formdata.workflow_messages() == []
816

  
782 817
def test_workflow_roles(pub):
783 818
    pub.substitutions.feed(MockSubstitutionVariables())
784 819

  
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
-