Projet

Général

Profil

0001-backoffice-allow-form_user-usage-in-live-prefills-du.patch

Frédéric Péters, 27 août 2022 18:08

Télécharger (4,15 ko)

Voir les différences:

Subject: [PATCH] backoffice: allow {{form_user}} usage in live prefills during
 edition (#68379)

 tests/backoffice_pages/test_all.py | 46 ++++++++++++++++++++++++++++++
 wcs/backoffice/management.py       |  4 +++
 wcs/forms/root.py                  |  6 ++++
 3 files changed, 56 insertions(+)
tests/backoffice_pages/test_all.py
1999 1999
    assert live_resp.json['result']['2']['visible']
2000 2000

  
2001 2001

  
2002
def test_backoffice_wfedit_and_prefill_with_user_variable(pub):
2003
    user = create_user(pub)
2004
    create_environment(pub)
2005
    formdef = FormDef.get_by_urlname('form-title')
2006
    formdef.fields[0].varname = 'foo'
2007
    formdef.fields[1].condition = {'type': 'django', 'value': 'form_var_foo == "test"'}
2008
    formdef.fields.append(
2009
        fields.StringField(
2010
            id='100',
2011
            label='user name',
2012
            type='string',
2013
            prefill={'type': 'string', 'value': 'a{{form_user_name}}b'},
2014
        )
2015
    )
2016
    formdef.store()
2017

  
2018
    form_class = formdef.data_class()
2019

  
2020
    second_user = pub.user_class(name='foobar')
2021
    second_user.store()
2022
    number31 = [x for x in form_class.select() if x.data['1'] == 'FOO BAR 30'][0]
2023
    number31.user_id = second_user.id
2024
    number31.store()
2025

  
2026
    # attach a custom workflow
2027
    workflow = Workflow(name='wfedit')
2028
    st1 = workflow.add_status('Status1', number31.status.split('-')[1])
2029

  
2030
    wfedit = st1.add_action('editable', id='_wfedit')
2031
    wfedit.by = [user.roles[0]]
2032
    workflow.store()
2033

  
2034
    formdef.workflow_id = workflow.id
2035
    formdef.store()
2036

  
2037
    app = login(get_app(pub))
2038

  
2039
    resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
2040
    resp = resp.form.submit('button_wfedit').follow()
2041
    assert resp.form['f100'].value == 'afoobarb'
2042

  
2043
    live_url = resp.html.find('form').attrs['data-live-url']
2044
    live_resp = app.post(live_url + '?prefilled_100=on', params=resp.form.submit_fields())
2045
    assert live_resp.json['result']['100']['content'] == 'afoobarb'
2046

  
2047

  
2002 2048
def test_global_listing(pub):
2003 2049
    create_user(pub)
2004 2050
    create_environment(pub)
wcs/backoffice/management.py
2907 2907

  
2908 2908

  
2909 2909
class FormBackofficeEditPage(FormFillPage):
2910
    def __init__(self, *args, **kwargs):
2911
        super().__init__(*args, **kwargs)
2912
        self.edit_mode = True
2913

  
2910 2914
    def create_form(self, *args, **kwargs):
2911 2915
        form = super().create_form(*args, **kwargs)
2912 2916
        form.attrs['data-live-url'] = self.formdef.get_url(backoffice=True) + 'live'
wcs/forms/root.py
834 834
        computed_values = get_session().get_by_magictoken('%s-computed' % magictoken) or {}
835 835
        formdata.data.update(computed_values)
836 836

  
837
        if formdata.data.get('edited_formdata_id'):
838
            # during editing (edited_formdata_id is set when starting edition,
839
            # when there's no magictoken yet)
840
            self.edited_data = self.formdef.data_class().get(formdata.data.get('edited_formdata_id'))
841

  
837 842
        if self.edit_mode:
838 843
            if magictoken is None:
839 844
                # restore edited data early on as it may be required to
......
1002 1007
                self.edited_data.feed_session()
1003 1008
                token = randbytes(8)
1004 1009
                get_request().form['magictoken'] = token
1010
                self.edited_data.data['edited_formdata_id'] = self.edited_data.id
1005 1011
                session.add_magictoken(token, self.edited_data.data)
1006 1012

  
1007 1013
                # and restore computed data
1008
-