Projet

Général

Profil

0003-misc-add-open-document-representation-of-fields-3662.patch

Frédéric Péters, 03 mars 2020 14:23

Télécharger (7,38 ko)

Voir les différences:

Subject: [PATCH 3/4] misc: add open document representation of fields (#36627)

 wcs/fields.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 95 insertions(+), 1 deletion(-)
wcs/fields.py
38 38
from .qommon import _, N_, force_str
39 39
from .qommon import evalutils
40 40
from .qommon.form import *
41
from .qommon.misc import localstrftime, strftime, date_format, ellipsize, xml_node_text
41
from .qommon.misc import localstrftime, strftime, date_format, ellipsize, can_thumbnail, xml_node_text
42
from .qommon.ods import NS as OD_NS, clean_text as od_clean_text
42 43
from .qommon.template import Template, TemplateError
43 44
from .qommon import get_cfg, get_logger
44 45

  
......
177 178
    prefill = None
178 179
    store_display_value = None
179 180
    store_structured_value = None
181
    get_opendocument_node_value = None
180 182
    condition = None
181 183

  
182 184
    # flag a field for removal by AnonymiseWorkflowStatusItem
......
792 794
            return htmltext(force_str(urlize(value, nofollow=True, autoescape=True)))
793 795
        return str(value)
794 796

  
797
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
798
        if value.startswith('http://') or value.startswith('https://'):
799
            node = ET.Element('{%s}a' % OD_NS['text'])
800
            node.attrib['{%s}href' % OD_NS['xlink']] = value
801
        else:
802
            node = ET.Element('{%s}span' % OD_NS['text'])
803
        node.text = od_clean_text(force_text(value))
804
        return node
805

  
795 806
    def get_rst_view_value(self, value, indent=''):
796 807
        return indent + str(value or '')
797 808

  
......
863 874
            except:
864 875
                return ''
865 876

  
877
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
878
        if self.pre:
879
            p = ET.Element('{%s}p' % OD_NS['text'])
880
            line_break = '<nsa:line-break xmlns:nsa="%(ns)s"/>' % {'ns': OD_NS['text']}
881
            as_node = ET.fromstring(str(htmlescape(value)).replace('\n', line_break))
882
            p.text = as_node.text
883
            p.tail = as_node.tail
884
            for child in as_node.getchildren():
885
                p.append(child)
886
            return p
887
        else:
888
            paragraphs = []
889
            for paragraph in value.splitlines():
890
                if paragraph.strip():
891
                    p = ET.Element('{%s}p' % OD_NS['text'])
892
                    p.text = paragraph
893
                    paragraphs.append(p)
894
            return paragraphs
895

  
866 896
    def get_view_short_value(self, value, max_len = 30):
867 897
        return ellipsize(str(value), max_len)
868 898

  
......
884 914
    def get_rst_view_value(self, value, indent=''):
885 915
        return indent + value
886 916

  
917
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
918
        a = ET.Element('{%s}a' % OD_NS['text'])
919
        a.text = od_clean_text(value)
920
        a.attrib['{%s}href' % OD_NS['xlink']] = 'mailto:' + a.text
921
        return a
922

  
887 923
register_field_class(EmailField)
888 924

  
889 925

  
......
913 949
        else:
914 950
            return ''
915 951

  
952
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
953
        span = ET.Element('{%s}span' % OD_NS['text'])
954
        span.text = od_clean_text(self.get_view_value(value))
955
        return span
956

  
916 957
    def convert_value_from_str(self, value):
917 958
        if value is None:
918 959
            return None
......
1087 1128
        t += htmltext('</div>')
1088 1129
        return t.getvalue()
1089 1130

  
1131
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
1132
        show_link = True
1133
        if value.has_redirect_url():
1134
            is_in_backoffice = bool(get_request() and get_request().is_in_backoffice())
1135
            show_link = bool(value.get_redirect_url(backoffice=is_in_backoffice))
1136
        if show_link and formdata:
1137
            node = ET.Element('{%s}a' % OD_NS['text'])
1138
            node.attrib['{%s}href' % OD_NS['xlink']] = '%sdownload?f=%s' % (formdata.get_url(), self.id)
1139
        else:
1140
            node = ET.Element('{%s}span' % OD_NS['text'])
1141
        node.text = od_clean_text(force_text(value))
1142
        return node
1143

  
1090 1144
    def get_csv_value(self, value, **kwargs):
1091 1145
        return [str(value) if value else '']
1092 1146

  
......
1262 1316
        except TypeError:
1263 1317
            return value
1264 1318

  
1319
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
1320
        span = ET.Element('{%s}span' % OD_NS['text'])
1321
        span.text = od_clean_text(self.get_view_value(value))
1322
        return span
1323

  
1265 1324
    def get_json_value(self, value):
1266 1325
        try:
1267 1326
            return strftime('%Y-%m-%d', value)
......
1441 1500
            return value
1442 1501
        return htmltext('<a href="%s">' % carddata.get_url(backoffice=True)) + htmltext('%s</a>') % value
1443 1502

  
1503
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
1504
        span = ET.Element('{%s}span' % OD_NS['text'])
1505
        span.text = od_clean_text(force_text(value))
1506
        return span
1507

  
1444 1508
    def add_to_view_form(self, form, value = None):
1445 1509
        real_value = value
1446 1510
        label_value = ''
......
1667 1731
                pass
1668 1732
        return ''
1669 1733

  
1734
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
1735
        span = ET.Element('{%s}span' % OD_NS['text'])
1736
        span.text = od_clean_text(self.get_view_value(value))
1737
        return span
1738

  
1670 1739
    def stats(self, values):
1671 1740
        return item_items_stats(self, values)
1672 1741

  
......
2039 2108
                    values.append('')
2040 2109
        return values
2041 2110

  
2111
    def get_opendocument_node_value(self, value, formdata=None, **kwargs):
2112
        table = ET.Element('{%s}table' % OD_NS['table'])
2113
        ET.SubElement(table, '{%s}table-column' % OD_NS['table'])
2114
        for col in self.columns:
2115
            ET.SubElement(table, '{%s}table-column' % OD_NS['table'])
2116
        row = ET.SubElement(table, '{%s}table-row' % OD_NS['table'])
2117
        ET.SubElement(row, '{%s}table-cell' % OD_NS['table'])
2118
        for col in self.columns:
2119
            table_cell = ET.SubElement(row, '{%s}table-cell' % OD_NS['table'])
2120
            cell_value = ET.SubElement(table_cell, '{%s}p' % OD_NS['text'])
2121
            cell_value.text = col
2122
        for i, row_label in enumerate(self.rows):
2123
            row = ET.SubElement(table, '{%s}table-row' % OD_NS['table'])
2124
            table_cell = ET.SubElement(row, '{%s}table-cell' % OD_NS['table'])
2125
            cell_value = ET.SubElement(table_cell, '{%s}p' % OD_NS['text'])
2126
            cell_value.text = row_label
2127
            for j, col in enumerate(self.columns):
2128
                table_cell = ET.SubElement(row, '{%s}table-cell' % OD_NS['table'])
2129
                cell_value = ET.SubElement(table_cell, '{%s}p' % OD_NS['text'])
2130
                try:
2131
                    cell_value.text = value[i][j]
2132
                except IndexError:
2133
                    pass
2134
        return table
2135

  
2042 2136
register_field_class(TableField)
2043 2137

  
2044 2138

  
2045
-