Projet

Général

Profil

0001-backoffice-always-display-backoffice-fields-marked-a.patch

la version "optionnel par défaut" - Frédéric Péters, 20 juin 2016 20:16

Télécharger (7,61 ko)

Voir les différences:

Subject: [PATCH] backoffice: always display backoffice fields marked as
 required (#11441)

 tests/test_admin_pages.py      |  1 +
 tests/test_backoffice_pages.py | 18 +++++++++++++++++-
 wcs/admin/fields.py            | 13 ++++++++-----
 wcs/admin/workflows.py         |  5 +++++
 wcs/forms/common.py            | 41 ++++++++++++++++++++++++-----------------
 5 files changed, 55 insertions(+), 23 deletions(-)
tests/test_admin_pages.py
1649 1649
    resp = resp.forms[0].submit()
1650 1650
    assert resp.location == 'http://example.net/backoffice/workflows/1/backoffice-fields/fields/'
1651 1651
    resp = resp.follow()
1652
    assert Workflow.get(workflow.id).get_backoffice_fields()[0].required is False
1652 1653

  
1653 1654
    # check it's been saved correctly
1654 1655
    assert 'foobar' in resp.body
tests/test_backoffice_pages.py
2496 2496
    wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
2497 2497
    wf.backoffice_fields_formdef.fields = [
2498 2498
        fields.StringField(id='bo1', label='1st backoffice field',
2499
            type='string', varname='backoffice_blah'),
2499
            type='string', varname='backoffice_blah', required=False),
2500 2500
    ]
2501 2501
    st1 = wf.add_status('Status1')
2502 2502
    wf.store()
......
2521 2521
    assert 'Backoffice Data' in resp.body
2522 2522
    assert '1st backoffice field' in resp.body
2523 2523
    assert 'HELLO WORLD' in resp.body
2524

  
2525
    wf.backoffice_fields_formdef.fields = [
2526
        fields.StringField(id='bo1', label='1st backoffice field',
2527
            type='string', varname='backoffice_blah', required=True),
2528
    ]
2529
    wf.store()
2530

  
2531
    formdata = formdef.data_class()()
2532
    formdata.data = {}
2533
    formdata.just_created()
2534
    formdata.store()
2535

  
2536
    app = login(get_app(pub))
2537
    resp = app.get(formdata.get_url(backoffice=True))
2538
    assert 'Backoffice Data' in resp.body
2539
    assert 'Not set' in resp.body
wcs/admin/fields.py
325 325
        self.objectdef.store()
326 326
        return 'ok'
327 327

  
328
    def get_new_field(self, form):
329
        return fields.get_field_class_by_type(form.get_widget('type').parse())(
330
                label=form.get_widget('label').parse(),
331
                type=form.get_widget('type').parse(),
332
                id=self.objectdef.get_new_field_id())
333

  
328 334
    def new(self):
329 335
        form = Form(enctype='multipart/form-data', action = 'new')
330 336
        form.add(StringWidget, 'page_no')
......
361 367
            insertion_point = len(self.objectdef.fields)
362 368

  
363 369
        if form.get_widget('label').parse() and form.get_widget('type').parse():
364
            self.objectdef.fields.insert(insertion_point,
365
                fields.get_field_class_by_type(form.get_widget('type').parse())(
366
                    label = form.get_widget('label').parse(),
367
                    type = form.get_widget('type').parse(),
368
                    id =self.objectdef.get_new_field_id()))
370
            new_field = self.get_new_field(form)
371
            self.objectdef.fields.insert(insertion_point, new_field)
369 372
        elif form.get_widget('form') and form.get_widget('form').parse():
370 373
            formdef = FormDef.get(form.get_widget('form').parse())
371 374
            for j, field in enumerate(formdef.fields):
wcs/admin/workflows.py
877 877
    def index_bottom(self):
878 878
        pass
879 879

  
880
    def get_new_field(self, form):
881
        new_field = super(WorkflowBackofficeFieldsDirectory, self).get_new_field(form)
882
        new_field.required = False
883
        return new_field
884

  
880 885

  
881 886
class VariablesDirectory(Directory):
882 887
    _q_exports = ['', 'fields']
wcs/forms/common.py
434 434

  
435 435
        return r.getvalue()
436 436

  
437
    def display_fields(self, fields, form_url=''):
437
    def display_fields(self, fields, form_url='', include_unset_required_fields=False):
438 438
        r = TemplateIO(html=True)
439 439
        on_page = False
440 440
        on_disabled_page = False
......
468 468
                on_page = True
469 469
                continue
470 470

  
471
            if not self.filled.data.has_key(f.id):
471
            if not hasattr(f, str('get_view_value')):
472 472
                continue
473 473

  
474
            if f.store_display_value and ('%s_display' % f.id) in self.filled.data:
475
                value = self.filled.data['%s_display' % f.id]
474
            if not self.filled.data.has_key(f.id):
475
                value = None
476 476
            else:
477
                value = self.filled.data[f.id]
477
                if f.store_display_value and ('%s_display' % f.id) in self.filled.data:
478
                    value = self.filled.data['%s_display' % f.id]
479
                else:
480
                    value = self.filled.data[f.id]
478 481

  
479
            if value is None or value == '':
480
                continue
482
                if value is None or value == '':
483
                    value = None
481 484

  
482
            if not hasattr(f, str('get_view_value')):
485
            if value is None and not (f.required and include_unset_required_fields):
483 486
                continue
484 487

  
485 488
            css_classes = ['field']
......
487 490
                css_classes.append(f.extra_css_class)
488 491
            r += htmltext('<div class="%s">' % ' '.join(css_classes))
489 492
            r += htmltext('<span class="label">%s</span> ') % f.label
490
            if isinstance(f, FileField):
491
                r += htmltext(self.display_file_field(form_url, f, value))
492
            else: # normal display
493
                r += htmltext('<div class="value">')
494
                s = f.get_view_value(value)
495
                s = s.replace(str('[download]'), str('%sdownload' % form_url))
496
                r += s
497
                r += htmltext('</div>')
493
            if value is None:
494
                r += htmltext('<div class="value"><i>%s</i></div>') % _('Not set')
495
            else:
496
                if isinstance(f, FileField):
497
                    r += htmltext(self.display_file_field(form_url, f, value))
498
                else: # normal display
499
                    r += htmltext('<div class="value">')
500
                    s = f.get_view_value(value)
501
                    s = s.replace(str('[download]'), str('%sdownload' % form_url))
502
                    r += s
503
                    r += htmltext('</div>')
498 504
            r += htmltext('</div>')
499 505

  
500 506
        if on_page:
......
506 512
        backoffice_fields = self.formdef.workflow.get_backoffice_fields()
507 513
        if not backoffice_fields:
508 514
            return
509
        content = self.display_fields(backoffice_fields)
515
        content = self.display_fields(backoffice_fields,
516
                include_unset_required_fields=True)
510 517
        if not len(content):
511 518
            return
512 519
        r = TemplateIO(html=True)
513
-