From 0169f3127c5bab32a653b27b5779fcd4132d9c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 10 Jul 2017 09:33:46 +0200 Subject: [PATCH] strasbourg: create multi-pages formdefs --- strasbourg/reprise.py | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/strasbourg/reprise.py b/strasbourg/reprise.py index d9afe7d..2b92cd2 100644 --- a/strasbourg/reprise.py +++ b/strasbourg/reprise.py @@ -44,13 +44,20 @@ try: except IndexError: pass print formdef.name -formdef.fields = [] -field_id = 0 +formdef.fields = [ + fields.PageField(id='1', type='page') +] + +field_id = 1 + +first_fieldset = True def process_children(node): - global field_id - for field_node in node.getchildren(): + global field_id, first_fieldset + + children_nodes = node.getchildren() + for field_node in children_nodes: field_id += 1 if field_node.tag in ('action', 'label'): continue @@ -64,12 +71,25 @@ def process_children(node): if 'repeat' in field_node.attrib: print '!!! fieldset repeat' try: - formdef.fields.append(fields.TitleField(id=str(field_id), - type='title', - label=fix_encoding(field_node.find('label').attrib['plain']))) + if first_fieldset: + first_fieldset = False + formdef.fields.append(fields.TitleField(id=str(field_id), + type='title', + label=fix_encoding(field_node.find('label').attrib['plain']))) + formdef.fields[0].label = fix_encoding(field_node.find('label').attrib['plain']) + else: + formdef.fields.append(fields.PageField(id=str(field_id), + type='page', + label=fix_encoding(field_node.find('label').attrib['plain']))) except AttributeError: pass process_children(field_node) + if node is root and len([x for x in children_nodes[children_nodes.index(field_node)+1:] if x.tag == 'fieldset']) == 0: + # no more fieldsets, create a new page to end the form + field_id += 1 + formdef.fields.append(fields.PageField(id=str(field_id), + type='page', + label='Informations sur vos données personnelles')) continue if field_node.tag != 'field': @@ -127,7 +147,7 @@ process_children(root) for line in csv.reader(file(os.path.join(os.path.dirname(sys.argv[1]), 'formulaires_prod_reprise_données.csv')), delimiter=','): if line[0] + '.xml' == os.path.basename(sys.argv[1]): - formdef.fields.insert(0, + formdef.fields.insert(1, fields.CommentField(id=str(field_id+2), type='comment', label='

Origine: %s

' % (line[7], line[7]))) formdef.workflow_options = {'email': line[8]}