Projet

Général

Profil

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

Frédéric Péters, 20 juin 2016 20:25

Télécharger (5,53 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/forms/common.py            | 41 ++++++++++++++++++++++++-----------------
 3 files changed, 42 insertions(+), 18 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 True
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/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
-