0001-misc-move-method-to-get-summary-fields-to-formdata-3.patch
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 |
- |