[Erp5-report] r19067 - /erp5/trunk/products/ERP5Form/Form.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Feb 5 17:06:07 CET 2008
Author: nicolas
Date: Tue Feb 5 17:06:07 2008
New Revision: 19067
URL: http://svn.erp5.org?rev=19067&view=rev
Log:
Manage UnProxification fields
Modified:
erp5/trunk/products/ERP5Form/Form.py
Modified: erp5/trunk/products/ERP5Form/Form.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/Form.py?rev=19067&r1=19066&r2=19067&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/Form.py (original)
+++ erp5/trunk/products/ERP5Form/Form.py Tue Feb 5 17:06:07 2008
@@ -469,7 +469,9 @@
# Tabs in ZMI
manage_options = (ZMIForm.manage_options[:5] +
- ({'label':'Proxify', 'action':'formProxify'},)+
+ ({'label':'Proxify', 'action':'formProxify'},
+ {'label':'UnProxify', 'action':'formUnProxify'}
+ )+
ZMIForm.manage_options[5:])
# Declarative properties
@@ -486,6 +488,10 @@
# Proxify form
security.declareProtected('View management screens', 'formProxify')
formProxify = DTMLFile('dtml/formProxify', globals())
+
+ # Proxify form
+ security.declareProtected('View management screens', 'formUnProxify')
+ formUnProxify = DTMLFile('dtml/formUnProxify', globals())
# Default Attributes
pt = 'form_view'
@@ -783,6 +789,13 @@
add_default_field_library()
return form_order, matched
+ security.declareProtected('View management screens', 'getUnProxyableFieldList')
+ def getUnProxyableFieldList(self):
+ """
+ Return ProxyFields
+ """
+ return [f for f in self.objectValues() if f.meta_type == 'ProxyField']
+
security.declareProtected('Change Formulator Forms', 'proxifyField')
def proxifyField(self, field_dict=None, REQUEST=None):
"""Convert fields to proxy fields"""
@@ -900,6 +913,84 @@
psyco.bind(__call__)
psyco.bind(_exec)
+ security.declareProtected('Change Formulator Forms', 'unProxifyField')
+ def unProxifyField(self, field_dict=None, REQUEST=None):
+ """Convert proxy fields to fields"""
+ def copy(_dict):
+ new_dict = {}
+ for key, value in _dict.items():
+ if value=='':
+ continue
+ if isinstance(aq_base(value), (Method, TALESMethod)):
+ value = copyMethod(value)
+ elif value is not None and not isinstance(value,
+ (str, unicode, int, long, bool, list, tuple, dict)):
+ raise ValueError, repr(value)
+ new_dict[key] = value
+ return new_dict
+
+ def is_equal(a, b):
+ type_a = type(a)
+ type_b = type(b)
+ if type_a is not type_b:
+ return False
+ elif type_a is Method:
+ return a.method_name==b.method_name
+ elif type_a is TALESMethod:
+ return a._text==b._text
+ else:
+ return a==b
+
+ def remove_same_value(new_dict, target_dict):
+ for key, value in new_dict.items():
+ target_value = target_dict.get(key)
+ if is_equal(value, target_value):
+ del new_dict[key]
+ return new_dict
+
+ def get_group_and_position(field_id):
+ for i in self.groups.keys():
+ if field_id in self.groups[i]:
+ return i, self.groups[i].index(field_id)
+
+ def set_group_and_position(group, position, field_id):
+ self.field_removed(field_id)
+ self.groups[group].insert(position, field_id)
+ # Notify changes explicitly.
+ self.groups = self.groups
+
+ if field_dict is None:
+ return
+
+ for field_id in field_dict.keys():
+ # keep current group and position.
+ group, position = get_group_and_position(field_id)
+
+ # create field
+ old_proxy_field = getattr(self, field_id)
+ delegated_field = old_proxy_field.getRecursiveTemplateField()
+ if delegated_field is None:
+ break
+ self.manage_delObjects(field_id)
+ self.manage_addField(id=field_id,
+ title='',
+ fieldname=delegated_field.meta_type)
+ field = getattr(self, field_id)
+ # copy data
+ new_values = remove_same_value(copy(delegated_field.values),
+ field.values)
+ new_tales = remove_same_value(copy(delegated_field.tales),
+ field.tales)
+
+ field.values.update(new_values)
+ field.tales.update(new_tales)
+
+ # move back to the original group and position.
+ set_group_and_position(group, position, field_id)
+
+ if REQUEST is not None:
+ return self.formUnProxify(manage_tabs_message='Changed')
+
# Overload of the Form method
# Use the include_disabled parameter since
# we should consider all fields to render the group tab
More information about the Erp5-report
mailing list