0001-workflows-add-option-to-hide-submit-button-of-form-a.patch
tests/workflow/test_all.py | ||
---|---|---|
2912 | 2912 |
assert wf.possible_status[0].items[0].formdef.fields[0].display_mode == 'radio' |
2913 | 2913 | |
2914 | 2914 | |
2915 |
def test_display_form_hide_submit_button(pub): |
|
2916 |
wf = Workflow(name='test') |
|
2917 |
st1 = wf.add_status('Status1', 'st1') |
|
2918 |
st2 = wf.add_status('Status2', 'st2') |
|
2919 | ||
2920 |
display_form = st1.add_action('form', id='_x') |
|
2921 |
display_form.varname = 'xxx' |
|
2922 |
display_form.by = ['_submitter'] |
|
2923 |
display_form.formdef = WorkflowFormFieldsFormDef(item=display_form) |
|
2924 |
display_form.formdef.fields.append(StringField(id='1', label='Test', varname='test', type='string')) |
|
2925 | ||
2926 |
wf.store() |
|
2927 | ||
2928 |
formdef = FormDef() |
|
2929 |
formdef.name = 'baz' |
|
2930 |
formdef.fields = [] |
|
2931 |
formdef.workflow = wf |
|
2932 |
formdef.store() |
|
2933 | ||
2934 |
formdef.data_class().wipe() |
|
2935 | ||
2936 |
app = get_app(pub) |
|
2937 |
resp = app.get(formdef.get_url()) |
|
2938 |
resp = resp.form.submit(name='submit') # -> validation |
|
2939 |
resp = resp.form.submit(name='submit') # -> submission |
|
2940 |
resp = resp.follow() |
|
2941 |
assert resp.pyquery('#wf-actions button') |
|
2942 |
formdata = formdef.data_class().select()[0] |
|
2943 | ||
2944 |
display_form.hide_submit_button = True |
|
2945 |
wf.store() |
|
2946 |
resp = app.get(resp.request.path) |
|
2947 |
assert not resp.pyquery('#wf-actions button') |
|
2948 | ||
2949 |
button = st1.add_action('choice') |
|
2950 |
button.label = 'button' |
|
2951 |
button.by = ['_submitter'] |
|
2952 |
button.status = st2.id |
|
2953 |
wf.store() |
|
2954 | ||
2955 |
resp = app.get(resp.request.path) |
|
2956 |
assert resp.pyquery('#wf-actions button') |
|
2957 |
resp.form['fxxx_1'] = 'plop' |
|
2958 |
resp = resp.form.submit(resp.pyquery('#wf-actions button').attr.name) |
|
2959 | ||
2960 |
formdata.refresh_from_storage() |
|
2961 |
assert formdata.get_status().id == st2.id |
|
2962 | ||
2963 |
pub.substitutions.feed(formdata) |
|
2964 |
context = pub.substitutions.get_context_variables(mode='lazy') |
|
2965 |
assert context['form_workflow_form_xxx_var_test'] == 'plop' |
|
2966 | ||
2967 |
# try with button that do not record form |
|
2968 |
formdef.data_class().wipe() |
|
2969 |
button.ignore_form_errors = True |
|
2970 |
wf.store() |
|
2971 | ||
2972 |
resp = app.get(formdef.get_url()) |
|
2973 |
resp = resp.form.submit(name='submit') # -> validation |
|
2974 |
resp = resp.form.submit(name='submit') # -> submission |
|
2975 |
resp = resp.follow() |
|
2976 |
resp.form['fxxx_1'] = 'plop' |
|
2977 |
resp = resp.form.submit(resp.pyquery('#wf-actions button').attr.name) |
|
2978 |
formdata = formdef.data_class().select()[0] |
|
2979 |
assert formdata.get_status().id == st2.id |
|
2980 | ||
2981 |
pub.substitutions.reset() |
|
2982 |
pub.substitutions.feed(formdata) |
|
2983 |
context = pub.substitutions.get_context_variables(mode='lazy') |
|
2984 |
with pytest.raises(KeyError): |
|
2985 |
# check workflow form was not recorded |
|
2986 |
assert context['form_workflow_form_xxx_var_test'] |
|
2987 | ||
2988 | ||
2915 | 2989 |
def test_choice_button_no_label(pub): |
2916 | 2990 |
role = pub.role_class(name='bar1') |
2917 | 2991 |
role.store() |
wcs/wf/form.py | ||
---|---|---|
29 | 29 |
from wcs.workflows import EvolutionPart, RedisplayFormException, WorkflowStatusItem, register_item_class |
30 | 30 | |
31 | 31 |
from ..qommon import _ |
32 |
from ..qommon.form import HtmlWidget, SingleSelectWidget, VarnameWidget, WidgetList |
|
32 |
from ..qommon.form import CheckboxWidget, HtmlWidget, SingleSelectWidget, VarnameWidget, WidgetList
|
|
33 | 33 | |
34 | 34 | |
35 | 35 |
class WorkflowFormEvolutionPart(EvolutionPart): |
... | ... | |
119 | 119 |
by = [] |
120 | 120 |
formdef = None |
121 | 121 |
varname = None |
122 |
hide_submit_button = False |
|
122 | 123 | |
123 | 124 |
@property |
124 | 125 |
def submit_button_label(self): |
... | ... | |
154 | 155 |
'options': [(None, '---', None)] + self.get_list_of_roles(include_logged_in_users=False), |
155 | 156 |
}, |
156 | 157 |
) |
158 |
if 'hide_submit_button' in parameters: |
|
159 |
form.add( |
|
160 |
CheckboxWidget, |
|
161 |
'%shide_submit_button' % prefix, |
|
162 |
title=_('Hide Submit Button'), |
|
163 |
value=self.hide_submit_button, |
|
164 |
hint=_( |
|
165 |
'If the default submit button is hidden the form will only be submitted through manual jump buttons.' |
|
166 |
), |
|
167 |
advanced=True, |
|
168 |
) |
|
157 | 169 |
if 'varname' in parameters: |
158 | 170 |
form.add( |
159 | 171 |
VarnameWidget, |
... | ... | |
173 | 185 |
form.widgets.append(widget) |
174 | 186 | |
175 | 187 |
def get_parameters(self): |
176 |
return ('by', 'varname', 'condition') |
|
188 |
return ('by', 'varname', 'hide_submit_button', 'condition')
|
|
177 | 189 | |
178 | 190 |
def clean_varname(self, form): |
179 | 191 |
widget = form.get_widget('varname') |
... | ... | |
264 | 276 |
] |
265 | 277 | |
266 | 278 |
self.formdef.add_fields_to_form(form, displayed_fields=displayed_fields) |
267 |
if 'submit' not in form._names: |
|
279 |
if 'submit' not in form._names and not self.hide_submit_button:
|
|
268 | 280 |
form.add_submit('submit', _('Submit')) |
269 | 281 | |
270 | 282 |
# put varname in a form attribute so it can be used in templates to |
271 |
- |