Projet

Général

Profil

0001-fields-add-detailed-field-value-support-to-block-fie.patch

Frédéric Péters, 12 juillet 2020 16:06

Télécharger (4,12 ko)

Voir les différences:

Subject: [PATCH 1/3] fields: add detailed field value support to block fields
 (#44816)

 wcs/fields.py   | 26 ++++++++++++++++++++++++--
 wcs/formdata.py | 19 +------------------
 2 files changed, 25 insertions(+), 20 deletions(-)
wcs/fields.py
603 603
    def get_csv_heading(self):
604 604
        return [self.label]
605 605

  
606
    def get_value_info(self, data):
607
        # return the selected value and an optional dictionary that will be
608
        # passed to get_view_value() to provide additional details.
609
        value_details = {}
610
        if self.id not in data:
611
            value = None
612
        else:
613
            if self.store_display_value and ('%s_display' % self.id) in data:
614
                value = data['%s_display' % self.id]
615
                value_details['value_id'] = data[self.id]
616
            else:
617
                value = data[self.id]
618

  
619
            if value is None or value == '':
620
                value = None
621
        return (value, value_details)
622

  
606 623
    def get_view_value(self, value, **kwargs):
607 624
        return str(value) if value else ''
608 625

  
......
2653 2670
        r = TemplateIO(html=True)
2654 2671
        for i, row_value in enumerate(value['data']):
2655 2672
            for field in self.block.fields:
2673
                if not hasattr(field, 'get_value_info'):
2674
                    # inert field
2675
                    continue
2656 2676
                css_classes = ['field', 'field-type-%s' % field.key]
2657 2677
                if field.extra_css_class:
2658 2678
                    css_classes.append(field.extra_css_class)
2659 2679
                r += htmltext('<div class="%s">' % ' '.join(css_classes))
2660 2680
                r += htmltext('<span class="label">%s</span> ') % field.label
2661
                sub_value = row_value.get(field.id)
2681
                sub_value, sub_value_details = field.get_value_info(row_value)
2662 2682
                if sub_value is None:
2663 2683
                    r += htmltext('<div class="value"><i>%s</i></div>') % _('Not set')
2664 2684
                else:
2665 2685
                    r += htmltext('<div class="value">')
2666
                    r += field.get_view_value(sub_value, parent_field=self, parent_field_index=i)
2686
                    kwargs = {'parent_field': self, 'parent_field_index': i}
2687
                    kwargs.update(**sub_value_details)
2688
                    r += field.get_view_value(sub_value, **kwargs)
2667 2689
                    r += htmltext('</div>')
2668 2690
                r += htmltext('</div>\n')
2669 2691
        return r.getvalue()
wcs/formdata.py
1134 1134
        if fields is None:
1135 1135
            fields = self.formdef.fields
1136 1136

  
1137
        def get_value_info(f):
1138
            # return the selected value and an optional dictionary that will be
1139
            # passed to get_view_value() to provide additional details.
1140
            value_details = {}
1141
            if f.id not in self.data:
1142
                value = None
1143
            else:
1144
                if f.store_display_value and ('%s_display' % f.id) in self.data:
1145
                    value = self.data['%s_display' % f.id]
1146
                    value_details['value_id'] = self.data[f.id]
1147
                else:
1148
                    value = self.data[f.id]
1149

  
1150
                if value is None or value == '':
1151
                    value = None
1152
            return (value, value_details)
1153

  
1154 1137
        on_page = False
1155 1138
        current_page_fields = []
1156 1139
        pages = []
......
1176 1159
            if not f.include_in_summary_page:
1177 1160
                continue
1178 1161

  
1179
            value, value_details = get_value_info(f)
1162
            value, value_details = f.get_value_info(self.data)
1180 1163
            if value is None and not (f.required and include_unset_required_fields):
1181 1164
                continue
1182 1165

  
1183
-