Projet

Général

Profil

0001-create_formdata-add-attach_to_history-option-39639.patch

Benjamin Dauvergne, 07 février 2020 19:53

Télécharger (5,99 ko)

Voir les différences:

Subject: [PATCH] create_formdata: add attach_to_history option (#39639)

 tests/test_backoffice_pages.py | 14 ++++++++++++--
 wcs/wf/create_formdata.py      | 29 +++++++++++++++++++++++++----
 2 files changed, 37 insertions(+), 6 deletions(-)
tests/test_backoffice_pages.py
5672 5672
    assert context['form_var_foo_bar'] == 'go'
5673 5673

  
5674 5674

  
5675
@pytest.fixture
5676
def create_formdata(pub):
5675
@pytest.fixture(params=[{'attach_to_history': True}, {}])
5676
def create_formdata(request, pub):
5677 5677
    admin = create_user(pub, is_admin=True)
5678 5678

  
5679 5679
    FormDef.wipe()
......
5715 5715
    create_formdata.formdef_slug = target_formdef.url_name
5716 5716
    create_formdata.keep_user = True
5717 5717
    create_formdata.backoffice_submission = True
5718
    create_formdata.attach_to_history = request.param.get('attach_to_history', False)
5718 5719
    create_formdata.mappings = [
5719 5720
        Mapping(field_id='0', expression='=form_var_toto_string'),
5720 5721
        Mapping(field_id='1', expression='=form_var_toto_file_raw'),
......
5752 5753

  
5753 5754
    # create source formdata
5754 5755
    formdata = create_formdata['source_formdef'].data_class()()
5756
    create_formdata['formdata'] = formdata
5755 5757
    upload = PicklableUpload('/foo/bar', content_type='text/plain')
5756 5758
    upload.receive([b'hello world'])
5757 5759
    formdata.data = {
......
5799 5801
    pq = resp.pyquery.remove_namespaces()
5800 5802
    assert pq('.field-type-string .value').text() == 'coucou'
5801 5803
    assert pq('.field-type-file .value').text() == 'bar'
5804

  
5805
    resp = app.get(create_formdata['formdata'].get_url(backoffice=True))
5806
    pq = resp.pyquery.remove_namespaces()
5807
    assert pq('.field-type-string .value').text() == 'coucou'
5808
    if create_formdata['create_formdata'].attach_to_history:
5809
        assert pq('.wf-links')
5810
    else:
5811
        assert not pq('.wf-links')
wcs/wf/create_formdata.py
18 18
import xml.etree.ElementTree as ET
19 19

  
20 20
from quixote import get_request, get_session, get_publisher
21
from quixote.html import htmltext
21 22

  
22 23
from django.utils.functional import cached_property
23 24

  
24 25
from wcs.qommon import _
25 26
from wcs.qommon.form import (WidgetListAsTable, CompositeWidget,
26 27
                             SingleSelectWidget, ComputedExpressionWidget,
27
                             CheckboxWidget, StringWidget, VarnameWidget)
28
                             CheckboxWidget, VarnameWidget)
28 29

  
29 30
from wcs.logged_errors import LoggedError
30 31
from wcs.workflows import WorkflowStatusItem, register_item_class
......
112 113
class LinkedFormdataEvolutionPart(object):
113 114
    formdef_class = FormDef
114 115

  
115
    def __init__(self, formdata, varname=None):
116
    def __init__(self, formdata, varname, attach_to_history):
116 117
        self._formdef = formdata.formdef
117 118
        self._formdata = formdata
118 119
        self.formdef_id = formdata.formdef.id
119 120
        self.formdata_id = formdata.id
120 121
        self.varname = varname
122
        self.attach_to_history = attach_to_history
121 123

  
122 124
    @property
123 125
    def formdef(self):
......
148 150
                d['form_links_%s' % (part.varname or '*')] = part
149 151
        return d
150 152

  
153
    def view(self):
154
        if self.attach_to_history:
155
            return htmltext('<p class="wf-links">%s <a href="%s">%s %s</a>') % (
156
                _('Created new form'),
157
                self.formdata and self.formdata.get_url(backoffice=get_request().is_in_backoffice()),
158
                self.formdef.name if self.formdef else _('Deleted'),
159
                self.formdata_id)
160
        else:
161
            return ''
162

  
151 163

  
152 164
class LazyFormDataLinks(object):
153 165
    def __init__(self, formdata):
......
178 190
    keep_submission_context = False
179 191
    mappings = None
180 192
    varname = None
193
    attach_to_history = False
181 194

  
182 195
    @classmethod
183 196
    def is_available(cls, workflow=None):
......
237 250
                     title=_('Identifier'), value=self.varname,
238 251
                     hint=_('This is used to get linked forms in expressions.'),
239 252
                     advanced=not(bool(self.varname)))
253
        if 'attach_to_history' in parameters:
254
            form.add(CheckboxWidget, '%sattach_to_history' % prefix,
255
                     title=_('Include new form in the form history'),
256
                     value=self.attach_to_history)
240 257

  
241 258
    def submit_admin_form(self, form):
242 259
        self.mappings = []
......
244 261

  
245 262
    def get_parameters(self):
246 263
        return ('formdef_slug', 'mappings', 'draft', 'backoffice_submission',
247
                'keep_user', 'keep_submission_context', 'varname')
264
                'keep_user', 'keep_submission_context', 'varname', 'attach_to_history')
248 265

  
249 266
    def perform(self, formdata):
250 267
        formdef = self.formdef
......
288 305
            get_session().mark_anonymous_formdata(new_formdata)
289 306

  
290 307
        evo = formdata.evolution[-1]
291
        evo.add_part(self.evolution_part_class(new_formdata, varname=self.varname))
308
        evo.add_part(
309
            self.evolution_part_class(
310
                new_formdata,
311
                varname=self.varname,
312
                attach_to_history=self.attach_to_history))
292 313
        formdata.store()
293 314

  
294 315
    def apply_mappings(self, dest, src):
295
-