strasbourg: create multi-pages formdefs

This commit is contained in:
Frédéric Péters 2017-07-10 09:33:46 +02:00
parent 007c22888d
commit 0169f3127c
1 changed files with 28 additions and 8 deletions

View File

@ -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='<p>Origine: <a href="%s">%s</a></p>' % (line[7], line[7])))
formdef.workflow_options = {'email': line[8]}