From 4d77df80ff3bd097a1894e8b0d3168a8be6cace5 Mon Sep 17 00:00:00 2001
From: Nicolas Delaby <nicolas@nexedi.com>
Date: Thu, 11 Mar 2010 14:55:19 +0000
Subject: [PATCH] * Support XML un/serialisation of forms which are contain
 ProxyFields, by exporting delegated_list property. * fix indentation issue
 which duplicates 'tales' node in formToXML brought by r27696

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@33654 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/Formulator/FormToXML.py | 29 ++++++++++++++++++-----------
 product/Formulator/XMLToForm.py | 12 +++++++++++-
 2 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/product/Formulator/FormToXML.py b/product/Formulator/FormToXML.py
index 33996ba686..c94d49222d 100644
--- a/product/Formulator/FormToXML.py
+++ b/product/Formulator/FormToXML.py
@@ -58,17 +58,24 @@ def formToXML(form, prologue=1):
             value_element = SubElement(values_element, key)
           value_element.text = escape(str(value)).decode(encoding)
 
-          tales_element = SubElement(field_element, 'tales')
-          items = field.tales.items()
-          items.sort()
-          for key, value in items:
-            if value:
-              tale_element = SubElement(tales_element, key)
-              tale_element.text = escape(str(value._text)).decode(encoding)
-          messages = SubElement(field_element, 'messages')
-          for message_key in field.get_error_names():
-            message_element = SubElement(messages, 'message', name=message_key)
-            message_element.text = escape(field.get_error_message(message_key)).decode(encoding)
+        tales_element = SubElement(field_element, 'tales')
+        items = field.tales.items()
+        items.sort()
+        for key, value in items:
+          if value:
+            tale_element = SubElement(tales_element, key)
+            tale_element.text = escape(str(value._text)).decode(encoding)
+        messages = SubElement(field_element, 'messages')
+        for message_key in field.get_error_names():
+          message_element = SubElement(messages, 'message', name=message_key)
+          message_element.text = escape(field.get_error_message(message_key)).decode(encoding)
+        # Special attribute for ProxyFields *delegated_list*
+        delegated_list = getattr(field, 'delegated_list', [])
+        if delegated_list:
+          delegated_list_element = SubElement(field_element, 'delegated_list')
+          delegated_list.sort()
+          [SubElement(delegated_list_element, delegated) for delegated in delegated_list]
+
     form_as_string = etree.tostring(form_as_xml, encoding='utf-8',
                                     xml_declaration=True, pretty_print=True)
     if form.unicode_mode:
diff --git a/product/Formulator/XMLToForm.py b/product/Formulator/XMLToForm.py
index c2539e5559..9dd6064840 100644
--- a/product/Formulator/XMLToForm.py
+++ b/product/Formulator/XMLToForm.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 import XMLObjects
 from Products.Formulator.TALESField import TALESMethod
 from Products.Formulator.MethodField import Method
@@ -110,11 +111,20 @@ def XMLToForm(s, form, override_encoding=None):
                     text = encode(entry.text, encoding)
                     field.message_values[name] = text
 
+            # set delegated_list, mean ProxyField
+            is_proxy_field = False
+            if hasattr(entry.first, 'delegated_list'):
+                delegated_list_element = entry.first.delegated_list
+                delegated_list = delegated_list_element.getElementNames()
+                field.delegated_list = delegated_list
+                is_proxy_field = True
             # for persistence machinery
             field.values = field.values
             field.tales = field.tales
             field.message_values = field.message_values
-        
+            if is_proxy_field:
+              field.delegated_list = field.delegated_list
+
     # delete default group
     if not has_default:
         form.move_group_down('Default')
-- 
2.30.9