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 |
|
-
|