Projet

Général

Profil

0001-misc-move-method-to-get-summary-fields-to-formdata-3.patch

Frédéric Péters, 11 février 2020 09:37

Télécharger (7,05 ko)

Voir les différences:

Subject: [PATCH] misc: move method to get summary fields to formdata (#39739)

 wcs/formdata.py     | 65 +++++++++++++++++++++++++++++++++++++++++
 wcs/forms/common.py | 70 ++++-----------------------------------------
 2 files changed, 71 insertions(+), 64 deletions(-)
wcs/formdata.py
1103 1103
            field.feed_session(self.data.get(field.id),
1104 1104
                    self.data.get('%s_display' % field.id))
1105 1105

  
1106
    def get_summary_field_details(self, fields=None, include_unset_required_fields=False):
1107
        if fields is None:
1108
            fields = self.formdef.fields
1109

  
1110
        def get_value_info(f):
1111
            # return the selected value and an optional dictionary that will be
1112
            # passed to get_view_value() to provide additional details.
1113
            value_details = {}
1114
            if f.id not in self.data:
1115
                value = None
1116
            else:
1117
                if f.store_display_value and ('%s_display' % f.id) in self.data:
1118
                    value = self.data['%s_display' % f.id]
1119
                    value_details['value_id'] = self.data[f.id]
1120
                else:
1121
                    value = self.data[f.id]
1122

  
1123
                if value is None or value == '':
1124
                    value = None
1125
            return (value, value_details)
1126

  
1127
        on_page = False
1128
        current_page_fields = []
1129
        pages = []
1130
        for i, f in enumerate(fields):
1131
            if f.type == 'page':
1132
                on_page = f
1133
                current_page_fields = []
1134
                pages.append({'field': f, 'fields': current_page_fields})
1135
                continue
1136

  
1137
            if f.type == 'title' and on_page and not current_page_fields and on_page.label == f.label:
1138
                # don't include first title of a page if that title has the
1139
                # same text as the page.
1140
                continue
1141

  
1142
            if f.type in ('title', 'subtitle', 'comment') and f.include_in_summary_page:
1143
                current_page_fields.append({'field': f})
1144
                continue
1145

  
1146
            if not hasattr(f, 'get_view_value'):
1147
                continue
1148

  
1149
            if not f.include_in_summary_page:
1150
                continue
1151

  
1152
            value, value_details = get_value_info(f)
1153
            if value is None and not (f.required and include_unset_required_fields):
1154
                continue
1155

  
1156
            current_page_fields.append({'field': f, 'value': value, 'value_details': value_details})
1157

  
1158
        if not pages:
1159
            fields_and_details = current_page_fields
1160
        else:
1161
            # ignore empty pages
1162
            fields_and_details = []
1163
            for page in pages:
1164
                if not any([bool('value' in x) for x in page['fields']]):
1165
                    continue
1166
                fields_and_details.append(page)
1167
                fields_and_details.extend([x for x in page['fields']])
1168

  
1169
        return fields_and_details
1170

  
1106 1171
    def iter_evolution_parts(self):
1107 1172
        for evo in self.evolution or []:
1108 1173
            for part in evo.parts or []:
wcs/forms/common.py
423 423

  
424 424
    def display_fields(self, fields=None, form_url='', include_unset_required_fields=False):
425 425
        import wcs.workflows
426
        if fields is None:
427
            fields = self.formdef.fields
428
        r = TemplateIO(html=True)
429
        on_page = False
430
        on_disabled_page = False
431
        pages = []
432
        current_page_fields = []
433

  
434
        def get_value_info(f):
435
            # return the selected value and an optional dictionary that will be
436
            # passed to get_view_value() to provide additional details.
437
            value_details = {}
438
            if f.id not in self.filled.data:
439
                value = None
440
            else:
441
                if f.store_display_value and ('%s_display' % f.id) in self.filled.data:
442
                    value = self.filled.data['%s_display' % f.id]
443
                    value_details['value_id'] = self.filled.data[f.id]
444
                else:
445
                    value = self.filled.data[f.id]
446

  
447
                if value is None or value == '':
448
                    value = None
449
            return (value, value_details)
450

  
451
        for i, f in enumerate(fields):
452
            if f.type == 'page':
453
                on_page = f
454
                current_page_fields = []
455
                pages.append({'page': f, 'fields': current_page_fields})
456
                continue
457

  
458
            if f.type == 'title' and on_page and not current_page_fields and on_page.label == f.label:
459
                # don't include first title of a page if that title has the
460
                # same text as the page.
461
                continue
462

  
463
            if f.type in ('title', 'subtitle', 'comment') and f.include_in_summary_page:
464
                current_page_fields.append({'field': f})
465
                continue
466

  
467
            if not hasattr(f, 'get_view_value'):
468
                continue
469 426

  
470
            if not f.include_in_summary_page:
471
                continue
472

  
473
            value, value_details = get_value_info(f)
474
            if value is None and not (f.required and include_unset_required_fields):
475
                continue
476

  
477
            current_page_fields.append({'field': f, 'value': value, 'value_details': value_details})
478

  
479
        if not pages:
480
            fields = [x['field'] for x in current_page_fields]
481
        else:
482
            # ignore empty pages
483
            fields = []
484
            for page in pages:
485
                if not any([bool('value' in x) for x in page['fields']]):
486
                    continue
487
                fields.append(page['page'])
488
                fields.extend([x['field'] for x in page['fields']])
427
        field_details = self.filled.get_summary_field_details(fields,
428
                include_unset_required_fields=include_unset_required_fields)
489 429

  
430
        r = TemplateIO(html=True)
490 431
        on_page = None
491
        for f in fields:
432
        for field_value_info in field_details:
433
            f = field_value_info['field']
492 434
            if f.type == 'page':
493 435
                if on_page:
494 436
                    r += htmltext('</div>')
......
518 460
                css_classes.append(f.extra_css_class)
519 461
            r += htmltext('<div class="%s">' % ' '.join(css_classes))
520 462
            r += htmltext('<span class="label">%s</span> ') % f.label
521
            value, value_details = get_value_info(f)
463
            value, value_details = field_value_info['value'], field_value_info['value_details']
522 464
            if value is None:
523 465
                r += htmltext('<div class="value"><i>%s</i></div>') % _('Not set')
524 466
            else:
525
-