Commit 58cc2610 authored by Julien Muchembled's avatar Julien Muchembled

Sync with trunk@29550

Conflicts:
	products/ERP5/Document/RoleDefinition.py
	products/ERP5Type/Tool/MemcachedTool.py
	products/ERP5Type/__init__.py

git-svn-id: https://svn.erp5.org/repos/public/erp5/sandbox/portal_types@29552 20353a03-c40f-0410-a6d1-a30d3c3de9de
parents 021ee41d d8ddd367
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ListBox" module="Products.ERP5Form.ListBox"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>getResourceTitle</string>
<string>Resource</string>
</tuple>
<tuple>
<string>description</string>
<string>Description</string>
</tuple>
<tuple>
<string>translated_validation_state_title</string>
<string>State</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>anchor</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>getResourceTitle</string>
<string>Resource</string>
</tuple>
<tuple>
<string>description</string>
<string>Description</string>
</tuple>
<tuple>
<string>translated_validation_state_title</string>
<string>State</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>count_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hide_rows_on_no_search_criterion</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <int>30</int> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string>list</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>page_template</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value>
<list>
<tuple>
<string>Apparel Transformation</string>
<string>Apparel Transformation</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>row_css_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>getResourceTitle</string>
<string>Resource</string>
</tuple>
<tuple>
<string>description</string>
<string>Description</string>
</tuple>
<tuple>
<string>translated_validation_state_title</string>
<string>State</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>select</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>apparel_transformation_module_selection</string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>title</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value>
<list>
<tuple>
<string>Title</string>
<string>Title</string>
</tuple>
<tuple>
<string>getResourceTitle</string>
<string>Resource</string>
</tuple>
<tuple>
<string>description</string>
<string>Description</string>
</tuple>
<tuple>
<string>translated_validation_state_title</string>
<string>State</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Apparel Transformations</string> </value>
</item>
<item>
<key> <string>untranslatable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="Method" module="Products.Formulator.MethodField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>method_name</string> </key>
<value> <string>searchFolder</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ListBox" module="Products.ERP5Form.ListBox"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>anchor</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>count_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value>
<list>
<tuple>
<string>industrial_phase</string>
<string>Industrial phase</string>
</tuple>
<tuple>
<string>quantity_unit</string>
<string>Quantity unit</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hide_rows_on_no_search_criterion</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <int>30</int> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string>Folder_viewContentList</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>page_template</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value>
<list>
<tuple>
<string>Apparel Transformation Assorted Resource</string>
<string>Apparel Transformation Assorted Resource</string>
</tuple>
<tuple>
<string>Apparel Transformation Operation</string>
<string>Apparel Transformation Operation</string>
</tuple>
<tuple>
<string>Apparel Transformation Transformed Resource</string>
<string>Apparel Transformation Transformed Resource</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value>
<list>
<tuple>
<string>industrial_phase</string>
<string>Industrial phase</string>
</tuple>
<tuple>
<string>quantity_unit</string>
<string>Quantity unit</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>row_css_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>select</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>transformed_resource_selection</string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>title</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>List</string> </value>
</item>
<item>
<key> <string>untranslatable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Method" module="Products.Formulator.MethodField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>method_name</string> </key>
<value> <string>searchFolder</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="TextAreaField" module="Products.Formulator.StandardFields"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_description</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Description</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>80</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="RelationStringField" module="Products.ERP5Form.RelationField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_resource_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_creation</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>allow_jump</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string>resource</string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string>title</string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string>apparel_shape_module</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>40</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string>Base_jumpToRelatedDocument</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>parameter_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value>
<list>
<tuple>
<string>Apparel Shape</string>
<string>Apparel Shape</string>
</tuple>
<tuple>
<string>Apparel Model</string>
<string>Apparel Model</string>
</tuple>
<tuple>
<string>Apparel Assortment</string>
<string>Apparel Assortment</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Main Resource</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string>Base_validateRelation</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>REQUEST/relation_item_list</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="MultiRelationStringField" module="Products.ERP5Form.MultiRelationField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_template_transformation_title_list</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>line_too_long</string> </key>
<value> <string>A line was too long.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>You entered too many characters.</string> </value>
</item>
<item>
<key> <string>too_many_lines</string> </key>
<value> <string>You entered too many lines.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string>specialise</string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string>title</string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string>apparel_transformation</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string>Base_jumpToRelatedDocument</string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value>
<list>
<tuple>
<string>Apparel Transformation</string>
<string>Apparel Transformation</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Apparel Transformation Template</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string>Base_validateRelation</string> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string encoding="cdata"><![CDATA[
<br />
]]></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>40</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="StringField" module="Products.Formulator.StandardFields"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Title</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="StringField" module="Products.Formulator.StandardFields"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_translated_validation_state_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>State</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="MultiListField" module="Products.Formulator.StandardFields"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_variation_base_category_list</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>unknown_selection</string> </key>
<value> <string>You selected an item that was not in the list.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Variation Axes</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>view_separator</string> </key>
<value> <string encoding="cdata"><![CDATA[
<br />
]]></string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>here/getVariationRangeBaseCategoryItemList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ListBox" module="Products.ERP5Form.ListBox"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Operation</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Operation</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>count_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value>
<list>
<tuple>
<string>industrial_phase</string>
<string>Industrial phase</string>
</tuple>
<tuple>
<string>quantity_unit</string>
<string>Quantity unit</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <int>30</int> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string>Folder_viewContentList</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value>
<list>
<tuple>
<string>Apparel Transformation Operation</string>
<string>Apparel Transformation Operation</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value>
<list>
<tuple>
<string>industrial_phase</string>
<string>Industrial phase</string>
</tuple>
<tuple>
<string>quantity_unit</string>
<string>Quantity unit</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Operation</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>select</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>apparel_transformation_operation_selection</string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>title</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Operation</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Operations</string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.MethodField</string>
<string>Method</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>method_name</string> </key>
<value> <string>searchFolder</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="RelationStringField" module="Products.ERP5Form.RelationField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_resource_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_creation</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>allow_jump</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string>resource</string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string>title</string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>container_getter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string>apparel_shape_module</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>40</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string>Base_jumpToRelatedDocument</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>parameter_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value>
<list>
<tuple>
<string>Apparel Shape</string>
<string>Apparel Shape</string>
</tuple>
<tuple>
<string>Apparel Model</string>
<string>Apparel Model</string>
</tuple>
<tuple>
<string>Apparel Assortment</string>
<string>Apparel Assortment</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>proxy_listbox_ids</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>relation_form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Main Resource</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string>Base_validateRelation</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>REQUEST/relation_item_list</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="StringField" module="Products.Formulator.StandardFields"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Title</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="ListBox" module="Products.ERP5Form.ListBox"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>listbox</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>select</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Transformed Resource</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>all_editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Transformed Resource</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>count_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_params</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>domain_root_list</string> </key>
<value>
<list>
<tuple>
<string>industrial_phase</string>
<string>Industrial phase</string>
</tuple>
<tuple>
<string>quantity_unit</string>
<string>Quantity unit</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>domain_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>global_attributes</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>lines</string> </key>
<value> <int>30</int> </value>
</item>
<item>
<key> <string>list_action</string> </key>
<value> <string>Folder_viewContentList</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>meta_types</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>portal_types</string> </key>
<value>
<list>
<tuple>
<string>Apparel Transformation Transformed Resource</string>
<string>Apparel Transformation Transformed Resource</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>report_root_list</string> </key>
<value>
<list>
<tuple>
<string>industrial_phase</string>
<string>Industrial phase</string>
</tuple>
<tuple>
<string>quantity_unit</string>
<string>Quantity unit</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>report_tree</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>search</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>search_columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Transformed Resource</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>select</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>apparel_transformed_resource_selection</string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>title</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>sort_columns</string> </key>
<value>
<list>
<tuple>
<string>id</string>
<string>ID</string>
</tuple>
<tuple>
<string>title</string>
<string>Transformed Resource</string>
</tuple>
<tuple>
<string>Description</string>
<string>Description</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>stat_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>stat_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Transformed Resources</string> </value>
</item>
<item>
<key> <string>url_columns</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.MethodField</string>
<string>Method</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>method_name</string> </key>
<value> <string>searchFolder</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="RelationStringField" module="Products.ERP5Form.RelationField"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_resource_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>allow_creation</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>allow_jump</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>base_category</string> </key>
<value> <string>resource</string> </value>
</item>
<item>
<key> <string>catalog_index</string> </key>
<value> <string>title</string> </value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>container_getter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default_module</string> </key>
<value> <string>apparel_shape_module</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>40</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>jump_method</string> </key>
<value> <string>Base_jumpToRelatedDocument</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_linelength</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_lines</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>parameter_list</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value>
<list>
<tuple>
<string>Apparel Shape</string>
<string>Apparel Shape</string>
</tuple>
<tuple>
<string>Apparel Model</string>
<string>Apparel Model</string>
</tuple>
<tuple>
<string>Apparel Assortment</string>
<string>Apparel Assortment</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>proxy_listbox_ids</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>relation_form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>relation_setter_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Main Resource</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_method</string> </key>
<value> <string>Base_validateRelation</string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<tuple>
<string>Products.Formulator.TALESField</string>
<string>TALESMethod</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>REQUEST/relation_item_list</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="StringField" module="Products.Formulator.StandardFields"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_title</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Title</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
98 100
\ No newline at end of file
...@@ -7,7 +7,6 @@ ApparelComponent ...@@ -7,7 +7,6 @@ ApparelComponent
ApparelModel ApparelModel
ApparelLabel ApparelLabel
ApparelModelMorphologyVariation ApparelModelMorphologyVariation
ApparelTransformation
ApparelColourRangeVariation ApparelColourRangeVariation
ApparelAssortment ApparelAssortment
ApparelFabricColourVariation ApparelFabricColourVariation
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
</chain> </chain>
<chain> <chain>
<type>Person</type> <type>Person</type>
<workflow>edit_workflow, user_account_workflow, validation_workflow</workflow> <workflow>edit_workflow, person_interaction_workflow, user_account_workflow, validation_workflow</workflow>
</chain> </chain>
<chain> <chain>
<type>Property Divergence Tester</type> <type>Property Divergence Tester</type>
......
...@@ -54,13 +54,10 @@ ...@@ -54,13 +54,10 @@
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>from Products.ERP5Type.Message import translateString\n <value> <string>from Products.ERP5Type.Message import translateString\n
item_list = [(\'\', \'\')]\n
\n \n
for role in context.valid_roles():\n return [(translateString(role), role)\n
if role not in (\'Owner\', \'Manager\', \'Assignor\',):\n for role in context.valid_roles()\n
item_list.append((translateString(role), role))\n if role not in (\'Owner\', \'Manager\')]\n
\n
return item_list\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
...@@ -99,7 +96,8 @@ return item_list\n ...@@ -99,7 +96,8 @@ return item_list\n
<tuple> <tuple>
<string>Products.ERP5Type.Message</string> <string>Products.ERP5Type.Message</string>
<string>translateString</string> <string>translateString</string>
<string>item_list</string> <string>append</string>
<string>$append0</string>
<string>_getiter_</string> <string>_getiter_</string>
<string>_getattr_</string> <string>_getattr_</string>
<string>context</string> <string>context</string>
......
...@@ -13,9 +13,9 @@ ...@@ -13,9 +13,9 @@
<key> <string>delegated_list</string> </key> <key> <string>delegated_list</string> </key>
<value> <value>
<list> <list>
<string>title</string>
<string>description</string> <string>description</string>
<string>items</string> <string>items</string>
<string>title</string>
</list> </list>
</value> </value>
</item> </item>
...@@ -133,7 +133,7 @@ ...@@ -133,7 +133,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string>here/RoleDefinition_getRoleNameItemList</string> </value> <value> <string>python: [(\'\',\'\')] + here.RoleDefinition_getRoleNameItemList()</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -15,6 +15,16 @@ ...@@ -15,6 +15,16 @@
<tuple/> <tuple/>
</value> </value>
</item> </item>
<item>
<key> <string>creation_guard</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>groups</string> </key> <key> <string>groups</string> </key>
<value> <value>
...@@ -25,6 +35,14 @@ ...@@ -25,6 +35,14 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>currency_exchange_line_interaction_workflow</string> </value> <value> <string>currency_exchange_line_interaction_workflow</string> </value>
</item> </item>
<item>
<key> <string>manager_bypass</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Currency Exchange Line Interaction Workflow</string> </value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="InteractionWorkflowDefinition" module="Products.ERP5.InteractionWorkflow"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>creation_guard</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Interaction workflow to mostly manage assignments for Persons.</string> </value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>person_interaction_workflow</string> </value>
</item>
<item>
<key> <string>manager_bypass</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Interaction workflow for Person portal type</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="Interaction" module="Products.ERP5.Interaction"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_mapping</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>interactions</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="InteractionDefinition" module="Products.ERP5.Interaction"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_url</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>activate_script_name</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>after_script_name</string> </key>
<value>
<list>
<string>closeOpenAssignments</string>
</list>
</value>
</item>
<item>
<key> <string>before_commit_script_name</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>guard</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>onDeleteCloseOpenAssignments</string> </value>
</item>
<item>
<key> <string>method_id</string> </key>
<value>
<list>
<string>delete</string>
<string>delete_action</string>
</list>
</value>
</item>
<item>
<key> <string>once_per_transaction</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>portal_type_filter</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>script_name</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Close started assignments in case of deletion</string> </value>
</item>
<item>
<key> <string>trigger_type</string> </key>
<value> <int>2</int> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="Scripts" module="Products.DCWorkflow.Scripts"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_mapping</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>scripts</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>person = state_change[\'object\']\n
for assignment in person.contentValues(portal_type=\'Assignment\'):\n
if assignment.getValidationState() == \'open\':\n
assignment.close()\n
</string> </value>
</item>
<item>
<key> <string>_code</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>state_change</string> </value>
</item>
<item>
<key> <string>errors</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>func_code</string> </key>
<value>
<object>
<klass>
<global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>co_argcount</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>co_varnames</string> </key>
<value>
<tuple>
<string>state_change</string>
<string>_getitem_</string>
<string>person</string>
<string>_getiter_</string>
<string>_getattr_</string>
<string>assignment</string>
</tuple>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>func_defaults</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>closeOpenAssignments</string> </value>
</item>
<item>
<key> <string>warnings</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="Variables" module="Products.DCWorkflow.Variables"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_mapping</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>variables</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="Worklists" module="Products.DCWorkflow.Worklists"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_mapping</string> </key>
<value>
<dictionary/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>worklists</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
635 638
\ No newline at end of file \ No newline at end of file
...@@ -24,6 +24,7 @@ Notification Message | notification_message_workflow ...@@ -24,6 +24,7 @@ Notification Message | notification_message_workflow
Organisation | edit_workflow Organisation | edit_workflow
Organisation | validation_workflow Organisation | validation_workflow
Person | edit_workflow Person | edit_workflow
Person | person_interaction_workflow
Person | user_account_workflow Person | user_account_workflow
Person | validation_workflow Person | validation_workflow
Property Divergence Tester | edit_workflow Property Divergence Tester | edit_workflow
......
...@@ -10,6 +10,7 @@ local_permission_interaction_workflow ...@@ -10,6 +10,7 @@ local_permission_interaction_workflow
notification_message_workflow notification_message_workflow
order_movement_simulation_interaction_workflow order_movement_simulation_interaction_workflow
order_simulation_interaction_workflow order_simulation_interaction_workflow
person_interaction_workflow
query_workflow query_workflow
simulation_movement_causality_interaction_workflow simulation_movement_causality_interaction_workflow
user_account_workflow user_account_workflow
\ No newline at end of file
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts45441285.08</string> </value> <value> <string>ts55095577.25</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -65,7 +65,7 @@ function dtmlXMLLoaderObject(funcObject,dhtmlObject,async){\n ...@@ -65,7 +65,7 @@ function dtmlXMLLoaderObject(funcObject,dhtmlObject,async){\n
return z;\n return z;\n
}\n }\n
//alert("Error: execute tree.xml to see debug !");\n //alert("Error: execute tree.xml to see debug !");\n
open(\'tree.xml\', \'_self\');\n //open(\'tree.xml\', \'_self\');\n
return document.createElement("DIV");\n return document.createElement("DIV");\n
}; \n }; \n
\n \n
...@@ -398,7 +398,7 @@ Node.prototype.removeNode = function(removeChildren)\n ...@@ -398,7 +398,7 @@ Node.prototype.removeNode = function(removeChildren)\n
</item> </item>
<item> <item>
<key> <string>size</string> </key> <key> <string>size</string> </key>
<value> <int>10010</int> </value> <value> <int>10012</int> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
498 514
\ No newline at end of file \ No newline at end of file
...@@ -128,14 +128,20 @@ another object of the same type. -->\n ...@@ -128,14 +128,20 @@ another object of the same type. -->\n
<td tal:content="string: ${here/portal_url}/foo_module/2/view">/erp5/foo_module/2/view</td>\n <td tal:content="string: ${here/portal_url}/foo_module/2/view">/erp5/foo_module/2/view</td>\n
<td></td>\n <td></td>\n
</tr>\n </tr>\n
<tr>\n
<td>clickAndWait</td>\n
<td>link=History</td>\n
<td></td>\n
</tr>\n
<tr>\n <tr>\n
<td>clickAndWait</td>\n <td>clickAndWait</td>\n
<td>//button[@title=\'Clone\']</td>\n <td>//button[@title=\'Clone\']</td>\n
<td></td>\n <td></td>\n
</tr>\n </tr>\n
<tr>\n <tr>\n
<!-- Check that clone action keep current form view on clone object -->\n
<td>assertAbsoluteLocation</td>\n <td>assertAbsoluteLocation</td>\n
<td tal:content="string:glob:${here/portal_url}/foo_module/3/Foo_view*" />\n <td tal:content="string:glob:${here/portal_url}/foo_module/3/Base_viewHistory*" />\n
<td></td>\n <td></td>\n
</tr>\n </tr>\n
<tr>\n <tr>\n
......
...@@ -52,8 +52,6 @@ ...@@ -52,8 +52,6 @@
</thead><tbody>\n </thead><tbody>\n
<tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" />\n <tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" />\n
\n \n
<!-- XXX TODO: selection foo_line_selection has to be deleted at the beginning of this test.\n
For now, selection too does not allow such deletion, so, this test is only valid once on a new site...-->\n
<tr>\n <tr>\n
<td>open</td>\n <td>open</td>\n
<td>${base_url}/foo_module/FooModule_createObjects?num:int=1</td>\n <td>${base_url}/foo_module/FooModule_createObjects?num:int=1</td>\n
...@@ -74,6 +72,16 @@ For now, selection too does not allow such deletion, so, this test is only valid ...@@ -74,6 +72,16 @@ For now, selection too does not allow such deletion, so, this test is only valid
<td>Done.</td>\n <td>Done.</td>\n
<td></td>\n <td></td>\n
</tr>\n </tr>\n
<tr>\n
<td>open</td>\n
<td>${base_url}/Base_checkSelectionExists?selection_name=foo_line_selection</td>\n
<td></td>\n
</tr>\n
<tr>\n
<td>assertTextPresent</td>\n
<td></td>\n
<td>False</td>\n
</tr>\n
<tr>\n <tr>\n
<td>open</td>\n <td>open</td>\n
<td>${base_url}/foo_module/0/view</td>\n <td>${base_url}/foo_module/0/view</td>\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>return str(context.getPortalObject().portal_selections.getSelectionFor(selection_name) is not None)\n
</string> </value>
</item>
<item>
<key> <string>_code</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>selection_name</string> </value>
</item>
<item>
<key> <string>errors</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>func_code</string> </key>
<value>
<object>
<klass>
<global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>co_argcount</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>co_varnames</string> </key>
<value>
<tuple>
<string>selection_name</string>
<string>str</string>
<string>_getattr_</string>
<string>context</string>
<string>None</string>
</tuple>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>func_defaults</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_checkSelectionExists</string> </value>
</item>
<item>
<key> <string>warnings</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
494 497
\ No newline at end of file \ No newline at end of file
...@@ -55,10 +55,16 @@ ...@@ -55,10 +55,16 @@
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>object = state_change[\'object\']\n <value> <string>object = state_change[\'object\']\n
\n \n
# Try all expire methods\n workflow_tool = object.getPortalObject().portal_workflow\n
object.expire()\n \n
object.expireProtected()\n if workflow_tool.isTransitionPossible(object, \'expire\'):\n
object.expirePublished()\n object.expire()\n
\n
if workflow_tool.isTransitionPossible(object, \'expire_protected\'):\n
object.expireProtected()\n
\n
if workflow_tool.isTransitionPossible(object, \'expire_published\'):\n
object.expirePublished()\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
...@@ -99,6 +105,7 @@ object.expirePublished()\n ...@@ -99,6 +105,7 @@ object.expirePublished()\n
<string>_getitem_</string> <string>_getitem_</string>
<string>object</string> <string>object</string>
<string>_getattr_</string> <string>_getattr_</string>
<string>workflow_tool</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
858 860
\ No newline at end of file \ No newline at end of file
...@@ -56,7 +56,18 @@ ...@@ -56,7 +56,18 @@
<value> <string>"""\n <value> <string>"""\n
Get TioLive Site root URL.\n Get TioLive Site root URL.\n
"""\n """\n
return context.REQUEST.get(\'BASE0\', \'https://www.tiolive.com\')\n root_url = context.REQUEST.get(\'BASE0\', \'https://www.tiolive.com\')\n
language = context.Localizer.get_selected_language()\n
\n
# This is far from perfect, to add language all the time\n
# in the url, because default languages of\n
# websites are usually not included in the url. But this\n
# script is also used in tiolive instances, and from them\n
# it is impossible to have the configuration of the web site\n
if language is not None:\n
root_url = "%s/%s" % (root_url, language)\n
\n
return root_url\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
...@@ -95,6 +106,9 @@ return context.REQUEST.get(\'BASE0\', \'https://www.tiolive.com\')\n ...@@ -95,6 +106,9 @@ return context.REQUEST.get(\'BASE0\', \'https://www.tiolive.com\')\n
<tuple> <tuple>
<string>_getattr_</string> <string>_getattr_</string>
<string>context</string> <string>context</string>
<string>root_url</string>
<string>language</string>
<string>None</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
45 46
\ No newline at end of file \ No newline at end of file
# -*- coding: utf-8 -*-
class Converter:
"""
Converter classes implement document conversion
from a given format to another format.
ARCHITECTURE: because most document processing
software, and potentially libraries, are unstable,
do not always support multithreading and may lead
to memory leaks, the recommend approach to create
a Converter is to simply execute a command with
popenX in a separate process and return the result.
"""
# Introspection API Implementation
def getSourceFormatItemList(self):
"""
Return the list of supported input format
(format, name)
"""
raise NotImplementedError
def getDestinationFormatItemList(self):
"""
Return the list of supported output format
(format, name)
"""
raise NotImplementedError
# Conversion API Implementation
def convertFile(self, file, source_format, destination_format):
"""
"""
raise NotImplementedError
def getFileMetadataItemList(self, file, source_format):
"""
"""
raise NotImplementedError
def updateFileMetadata(self, file, source_format, **kw):
"""
"""
raise NotImplementedError
# -*- coding: utf-8 -*-
MAX_LAUNCH = 100
class OpenOffice:
# Private methods
def _getAvailableOpenOfficeInstancePort(self):
"""
This method starts a collection of
headless OpenOffice in bacground and attaches
them to the server process. Each time
a headless Openoffice is returned, a counter
is incremented. After MAX_LAUNCH times,
the server is closed and recreated.
The method returns a port number
"""
def _getCommand(self, param):
"""
"""
return "/usr/bin/openoffice.convert %s"
# Introspection API Implementation
def getSourceFormatItemList(self):
"""
Return the list of supported input format
(format, name)
"""
port = self._getAvailableOpenOfficeInstancePort()
def getDestinationFormatItemList(self):
"""
Return the list of supported output format
(format, name)
"""
port = self._getAvailableOpenOfficeInstancePort()
# Conversion API Implementation
def convertFile(self, file, source_format, destination_format):
"""
"""
# XXX - just call a command line (python script)
# which does all the work
port = self._getAvailableOpenOfficeInstancePort()
input, output = popen(self._getCommand('--convert'), file)
def getFileMetadataItemList(self, file, source_format):
"""
"""
# XXX - just call a command line (python script)
# which does all the work
port = self._getAvailableOpenOfficeInstancePort()
input, output = popen(self._getCommand('--metadata'), file)
def updateFileMetadata(self, file, source_format, **kw):
"""
"""
# XXX - just call a command line (python script)
# which does all the work
port = self._getAvailableOpenOfficeInstancePort()
input, output = popen(self._getCommand('--update'), file)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pyuno
# Invoke OpenOffice with appropriate port number provided by OpenOffice converter
# Return result
...@@ -53,6 +53,7 @@ import cStringIO ...@@ -53,6 +53,7 @@ import cStringIO
import string import string
from OFS.Image import Pdata from OFS.Image import Pdata
import md5 import md5
from Products.PythonScripts.Utility import allow_class
_MARKER = [] _MARKER = []
VALID_ORDER_KEY_LIST = ('user_login', 'content', 'file_name', 'input') VALID_ORDER_KEY_LIST = ('user_login', 'content', 'file_name', 'input')
...@@ -110,6 +111,7 @@ class ConversionError(Exception):pass ...@@ -110,6 +111,7 @@ class ConversionError(Exception):pass
class DocumentProxyError(Exception):pass class DocumentProxyError(Exception):pass
class NotConvertedError(Exception):pass class NotConvertedError(Exception):pass
allow_class(NotConvertedError)
class ConversionCacheMixin: class ConversionCacheMixin:
""" """
......
...@@ -507,14 +507,14 @@ class Image(File, OFSImage): ...@@ -507,14 +507,14 @@ class Image(File, OFSImage):
def getSizeFromImageDisplay(self, image_display): def getSizeFromImageDisplay(self, image_display):
""" """
Return the size for this image display, or None if this image display name Return the size for this image display, or None if this image display name
is not known. If the preference is not set, (0, 0) is returned. is not known.
""" """
if image_display in default_displays_id_list: if image_display in default_displays_id_list:
preference_tool = self.getPortalObject().portal_preferences preference_tool = self.getPortalObject().portal_preferences
height_preference = 'preferred_%s_image_height' % (image_display,) height_preference = 'preferred_%s_image_height' % (image_display,)
width_preferece = 'preferred_%s_image_width' % (image_display,) width_preference = 'preferred_%s_image_width' % (image_display,)
height = preference_tool.getPreference(height_preference, 0) height = preference_tool.getPreference(height_preference)
width = preference_tool.getPreference(width_preferece, 0) width = preference_tool.getPreference(width_preference)
return (height, width) return (height, width)
return None return None
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
############################################################################## ##############################################################################
import zope.interface import zope.interface
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo, Unauthorized
from Products.CMFCore.utils import getToolByName from Products.CMFCore.utils import getToolByName
from Products.ERP5Type import Permissions, PropertySheet, interfaces from Products.ERP5Type import Permissions, PropertySheet, interfaces
from Products.ERP5Type.XMLObject import XMLObject from Products.ERP5Type.XMLObject import XMLObject
...@@ -55,6 +55,12 @@ class RoleDefinition(XMLObject): ...@@ -55,6 +55,12 @@ class RoleDefinition(XMLObject):
, PropertySheet.RoleDefinition , PropertySheet.RoleDefinition
) )
def _setRoleName(self, value):
if value and value not in \
zip(*self.RoleDefinition_getRoleNameItemList())[1]:
raise Unauthorized("You are not allowed to give %s role" % value)
self._baseSetRoleName(value)
security.declarePrivate("getLocalRolesFor") security.declarePrivate("getLocalRolesFor")
def getLocalRolesFor(self, ob, user_name=None): def getLocalRolesFor(self, ob, user_name=None):
group_id_generator = getattr(ob, group_id_generator = getattr(ob,
......
...@@ -33,6 +33,7 @@ from Products.ERP5Type.Base import Base ...@@ -33,6 +33,7 @@ from Products.ERP5Type.Base import Base
from Products.ERP5.Document.Coordinate import Coordinate from Products.ERP5.Document.Coordinate import Coordinate
from Products.ERP5.Tool.NotificationTool import buildEmailMessage from Products.ERP5.Tool.NotificationTool import buildEmailMessage
from zLOG import LOG from zLOG import LOG
import urllib
no_crawl_protocol_list = ['mailto', 'javascript', ] no_crawl_protocol_list = ['mailto', 'javascript', ]
no_host_protocol_list = ['mailto', 'news', 'javascript',] no_host_protocol_list = ['mailto', 'news', 'javascript',]
...@@ -52,6 +53,11 @@ class UrlMixIn: ...@@ -52,6 +53,11 @@ class UrlMixIn:
Returns a text representation of the Url if defined Returns a text representation of the Url if defined
or None else. or None else.
""" """
url_string = self.getUrlString()
if not url_string:
return None
if urllib.splittype(url_string)[0]:
return url_string
protocol = self.getUrlProtocol() protocol = self.getUrlProtocol()
if not protocol: if not protocol:
# A quick fix for all objects which did not # A quick fix for all objects which did not
...@@ -61,8 +67,6 @@ class UrlMixIn: ...@@ -61,8 +67,6 @@ class UrlMixIn:
protocol = default_protocol_dict[ptype] protocol = default_protocol_dict[ptype]
else: else:
protocol = 'http' protocol = 'http'
url_string = self.getUrlString()
if not url_string: return None
if protocol in no_host_protocol_list or url_string.startswith('//'): if protocol in no_host_protocol_list or url_string.startswith('//'):
return '%s:%s' % (protocol, url_string) return '%s:%s' % (protocol, url_string)
return '%s://%s' % (protocol, url_string) return '%s://%s' % (protocol, url_string)
......
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2007-2009 Nexedi SA and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from Products.ERP5Type.Interactor.Interactor import Interactor
from Products.ERP5Type.Base import _aq_reset
class AqDynamicInteractor(Interactor):
"""
This interactor handles all the calls to _aq_dynamic
which must be trigerred whenever some parts of ERP5
are modified and require to generate again accessors
and dynamic properties.
"""
def install(self):
from Products.CMFCore.WorkflowTool import WorkflowTool
self.on(WorkflowTool.manage_changeWorkflows).doAfter(self.resetAqDynamic)
from Products.DCWorkflow.Transitions import Transitions
self.on(Transitions.addTransition).doAfter(self.resetAqDynamic)
self.on(Transitions.deleteTransitions).doAfter(self.resetAqDynamic)
from Products.DCWorkflow.Transitions import TransitionDefinition
self.on(TransitionDefinition.setProperties).doAfter(self.resetAqDynamic)
from Products.DCWorkflow.Variables import Variables
self.on(Variables.setStateVar).doAfter(self.resetAqDynamic)
def resetAqDynamic(self, *args, **kw):
"""
Reset _aq_dynamic
"""
_aq_reset()
\ No newline at end of file
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from Products.CMFCore.utils import getToolByName
from AccessControl import ClassSecurityInfo
from Globals import InitializeClass, DTMLFile
from Products.CMFCore.utils import getToolByName
from Products.ERP5Type import Permissions
from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5 import _dtmldir
from zLOG import LOG
class ConversionTool(BaseTool):
"""
The ConversionTool class will provide in the future an
API to unify file conversion and metadata handling in ERP5.
The first version consists of a tool which acts both as central
point for conversion services and metadata handling services
for all ERP5 Document classes and scripts, as well as a Web
Service for external applications.
The Tool calls itself, through XML-RPC protocol. A dedicated
Zope instance can be setup for handling conversions.
In the future, the tool will be splitted in 2 parts:
- a Tool
- a WSGI service
The tool reuses the portal_web_services to connect through
XML-RPC to the conversion server.
ARCHITECTURE PHASE 1: all Converter classes are stored
in the Converter directory part of ERP5 Product. The tool
serves both as caller and recipient, and calls itself
through XML-RPC.
ARCHITECTURE PHASE 2: all Converter classes are moved to
a dedicated directory in /usr/share/oood/converter
(or new name). The Web Service API is moved away from
ConverterTool class and turned to a WSGI independent service
NOTE: this class is experimental and is subject to be removed
NOTE2: the code is only pseudo-code
"""
id = 'portal_conversions'
meta_type = 'ERP5 Conversion Tool'
portal_type = 'Conversion Tool'
allowed_types = ()
# Declarative Security
security = ClassSecurityInfo()
#
# ZMI methods
#
security.declareProtected( Permissions.ManagePortal, 'manage_overview' )
manage_overview = DTMLFile( 'explainConversionTool', _dtmldir )
def filtered_meta_types(self, user=None):
# Filters the list of available meta types.
all = SolverTool.inheritedAttribute('filtered_meta_types')(self)
meta_types = []
for meta_type in self.all_meta_types():
if meta_type['name'] in self.allowed_types:
meta_types.append(meta_type)
return meta_types
def tpValues(self):
""" show the content in the left pane of the ZMI """
return self.objectValues()
# Internal API - called by Document classes and scripts
def convert(self, file, source_format, destination_format, zip=False):
"""
Returns the converted file in the given format
zip parameter can be specified to return the result of conversion
in the form of a zip archive (which may contain multiple parts).
This can be useful to convert a single ODF file to HMTL
and png images.
"""
# Just call XML-RPC
preference_tool = getToolByName(self, 'portal_preferences')
web_service_tool = getToolByName(self, 'portal_web_services')
conversion_url = preference_tool.getPreferredConversionServiceUrl()
conversion_service = web_service_tool.connect(conversion_url)
# XXX - no exception handling - wrong
return conversion_service.convertFile(file, source_format, destination_format)
def getMetadataDict(self, file, source_format):
"""
Returns a dict of metadata values for the
document. The structure of this dict is "unpredictable"
and follows the convention of each file.
"""
# Just call XML-RPC
preference_tool = getToolByName(self, 'portal_preferences')
web_service_tool = getToolByName(self, 'portal_web_services')
conversion_url = preference_tool.getPreferredConversionServiceUrl()
conversion_service = web_service_tool.connect(conversion_url)
# XXX - no exception handling - wrong
return conversion_service.getFileMetadataItemList(file, source_format)
def updateMetadata(self, file, source_format, **kw):
"""
Updates the file in the given source_format
with provided metadata and return the resulting new file
"""
# Just call XML-RPC
preference_tool = getToolByName(self, 'portal_preferences')
web_service_tool = getToolByName(self, 'portal_web_services')
conversion_url = preference_tool.getPreferredConversionServiceUrl()
conversion_service = web_service_tool.connect(conversion_url)
# XXX - no exception handling - wrong
return conversion_service.updateFileMetadata(file, source_format, **kw)
# Web Service API - called by any application through XML-RPC
# Will be removed in the future and moved to WSGI service
def convertFile(self, file, source_format, destination_format, zip=False):
"""
Returns the converted file in the given format
"""
converter = self._findConverter(source_format, destination_format)
return converter.convertFile(file, source_format, destination_format, zip=zip)
def getFileMetadataItemList(self, file, source_format):
"""
Returns a list key, value pairs representing the
metadata values for the document. The structure of this
list is "unpredictable" and follows the convention of each file.
"""
converter = self._findConverter(source_format, destination_format)
return converter.getFileMetadataItemList(file, source_format)
def updateFileMetadata(self, file, source_format, **kw):
"""
Updates the file in the given source_format
with provided metadata and return the resulting new file
"""
converter = self._findConverter(source_format, destination_format)
return converter.updateFileMetadata(file, source_format, destination_format, zip=zip)
# Private methods
def _findConverter(self, source_format, destination_format):
"""
Browses all converter classes, initialised the repository of
converters and finds the appropriate class
"""
\ No newline at end of file
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
</item> </item>
<item> <item>
<key> <string>module</string> </key> <key> <string>module</string> </key>
<value> <string>Products.ERP5Type.patches.transforms.html_to_text</string> </value> <value> <string>Products.PortalTransforms.transforms.html_to_text</string> </value>
</item> </item>
<item> <item>
<key> <string>output</string> </key> <key> <string>output</string> </key>
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
</item> </item>
<item> <item>
<key> <string>module</string> </key> <key> <string>module</string> </key>
<value> <string>Products.ERP5Type.patches.transforms.png_to_text</string> </value> <value> <string>Products.PortalTransforms.transforms.png_to_text</string> </value>
</item> </item>
<item> <item>
<key> <string>output</string> </key> <key> <string>output</string> </key>
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
</item> </item>
<item> <item>
<key> <string>module</string> </key> <key> <string>module</string> </key>
<value> <string>Products.ERP5Type.patches.transforms.w3m_dump</string> </value> <value> <string>Products.PortalTransforms.transforms.w3m_dump</string> </value>
</item> </item>
<item> <item>
<key> <string>output</string> </key> <key> <string>output</string> </key>
......
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
containing searched words as well highlighting the searched \n containing searched words as well highlighting the searched \n
words in the text itself.\n words in the text itself.\n
"""\n """\n
from Products.ERP5.Document.Document import NotConvertedError\n
\n \n
is_gadget_mode = context.REQUEST.get(\'is_gadget_mode\', 0)\n is_gadget_mode = context.REQUEST.get(\'is_gadget_mode\', 0)\n
\n \n
...@@ -89,7 +90,10 @@ argument_names = (\'advanced_search_text\', \n ...@@ -89,7 +90,10 @@ argument_names = (\'advanced_search_text\', \n
\'searchabletext_phrase\',)\n \'searchabletext_phrase\',)\n
\n \n
if document_text is None:\n if document_text is None:\n
document_text = context.getSearchableText()\n try:\n
document_text = context.getSearchableText()\n
except NotConvertedError:\n
return context.Base_translateString("This document is not converted yet.")\n
\n \n
if selection is not None:\n if selection is not None:\n
params = selection.getParams()\n params = selection.getParams()\n
...@@ -166,6 +170,8 @@ else:\n ...@@ -166,6 +170,8 @@ else:\n
<string>selection</string> <string>selection</string>
<string>max_lines</string> <string>max_lines</string>
<string>max_text_length</string> <string>max_text_length</string>
<string>Products.ERP5.Document.Document</string>
<string>NotConvertedError</string>
<string>_getattr_</string> <string>_getattr_</string>
<string>context</string> <string>context</string>
<string>is_gadget_mode</string> <string>is_gadget_mode</string>
......
...@@ -108,7 +108,7 @@ for object_id in keys:\n ...@@ -108,7 +108,7 @@ for object_id in keys:\n
object_state=object_state,\n object_state=object_state,\n
object_class=object_class,\n object_class=object_class,\n
choice_item_list=choice_item_list)\n choice_item_list=choice_item_list)\n
line.setUid(\'new_%s\' % object_id)\n line.setUid(\'new_%s\' % str(object_id))\n
object_list.append(line)\n object_list.append(line)\n
i += 1 \n i += 1 \n
\n \n
......
...@@ -65,10 +65,12 @@ request=context.REQUEST\n ...@@ -65,10 +65,12 @@ request=context.REQUEST\n
\n \n
if uids != []:\n if uids != []:\n
context.manage_copyObjects(uids=uids, REQUEST=request, RESPONSE=request.RESPONSE)\n context.manage_copyObjects(uids=uids, REQUEST=request, RESPONSE=request.RESPONSE)\n
message = Base_translateString("Item(s) copied.")\n message = Base_translateString("Items copied.")\n
else:\n else:\n
message = Base_translateString("Please select one or more items to copy first.")\n message = Base_translateString("Please select one or more items to copy first.")\n
return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?portal_status_message=%s\' % message)\n \n
return context.Base_redirect(form_id,\n
keep_items=dict(portal_status_message=message))\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
...@@ -79,7 +81,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p ...@@ -79,7 +81,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>form_id, uids=[], listbox_uid=[],selection_name=\'\'</string> </value> <value> <string>form_id, uids=[], listbox_uid=[], selection_name=\'\'</string> </value>
</item> </item>
<item> <item>
<key> <string>_proxy_roles</string> </key> <key> <string>_proxy_roles</string> </key>
...@@ -122,6 +124,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p ...@@ -122,6 +124,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p
<string>selected_uids</string> <string>selected_uids</string>
<string>request</string> <string>request</string>
<string>message</string> <string>message</string>
<string>dict</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -96,10 +96,11 @@ if uids != []:\n ...@@ -96,10 +96,11 @@ if uids != []:\n
qs = \'?portal_status_message=%s\' % message \n qs = \'?portal_status_message=%s\' % message \n
else:\n else:\n
context.manage_cutObjects(uids=uids, REQUEST=request)\n context.manage_cutObjects(uids=uids, REQUEST=request)\n
message = Base_translateString("Item(s) cut.")\n message = Base_translateString("Items cut.")\n
else:\n else:\n
message = Base_translateString("Please select one or more items to cut first.")\n message = Base_translateString("Please select one or more items to cut first.")\n
return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?portal_status_message=%s\' % message)\n \n
return context.Base_redirect(form_id, keep_items=dict(portal_status_message=message))\n
]]></string> </value> ]]></string> </value>
...@@ -112,7 +113,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p ...@@ -112,7 +113,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>form_id,selection_name=\'\',uids=[],listbox_uid=[]</string> </value> <value> <string>form_id, selection_name=\'\', uids=[], listbox_uid=[]</string> </value>
</item> </item>
<item> <item>
<key> <string>errors</string> </key> <key> <string>errors</string> </key>
...@@ -159,6 +160,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p ...@@ -159,6 +160,7 @@ return request.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?p
<string>message</string> <string>message</string>
<string>repr</string> <string>repr</string>
<string>qs</string> <string>qs</string>
<string>dict</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -70,21 +70,23 @@ if context.cb_dataValid:\n ...@@ -70,21 +70,23 @@ if context.cb_dataValid:\n
for portal_type in portal_type_list:\n for portal_type in portal_type_list:\n
if portal_type not in allowed_type_list:\n if portal_type not in allowed_type_list:\n
error_message = Base_translateString(\'Sorry, you can not paste these items here.\')\n error_message = Base_translateString(\'Sorry, you can not paste these items here.\')\n
\n
if context.cb_dataValid and error_message==\'\':\n if context.cb_dataValid and error_message==\'\':\n
try:\n try:\n
new_item_list = context.manage_pasteObjects(REQUEST[\'__cp\'])\n new_item_list = context.manage_pasteObjects(REQUEST[\'__cp\'])\n
except KeyError:\n except KeyError:\n
msg = Base_translateString(\'Nothing to paste.\')\n return context.Base_redirect(form_id,\n
return REQUEST.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?portal_status_message=%s\' % msg)\n keep_items=dict(portal_status_message=Base_translateString(\'Nothing to paste.\')))\n
else:\n else:\n
new_id_list = [i[\'new_id\'] for i in new_item_list]\n new_id_list = [i[\'new_id\'] for i in new_item_list]\n
msg = Base_translateString(\'Item(s) paste in progress.\')\n return context.Base_redirect(form_id,\n
return REQUEST.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?portal_status_message=%s\' % msg)\n keep_items=dict(portal_status_message=Base_translateString(\'Items paste in progress.\')))\n
elif context.cb_dataValid and error_message!=\'\':\n \n
return REQUEST.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?portal_status_message=%s\' % error_message)\n elif context.cb_dataValid and error_message != \'\':\n
else:\n return context.Base_redirect(form_id, keep_items=dict(portal_status_message=error_message))\n
error_message = Base_translateString(\'Copy or cut one or more items to paste first.\')\n \n
return REQUEST.RESPONSE.redirect(context.absolute_url() + \'/\' + form_id + \'?portal_status_message=%s\' % error_message)\n error_message = Base_translateString(\'Copy or cut one or more items to paste first.\')\n
return context.Base_redirect(form_id, keep_items=dict(portal_status_message=error_message))\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
...@@ -139,7 +141,7 @@ else:\n ...@@ -139,7 +141,7 @@ else:\n
<string>_getitem_</string> <string>_getitem_</string>
<string>new_item_list</string> <string>new_item_list</string>
<string>KeyError</string> <string>KeyError</string>
<string>msg</string> <string>dict</string>
<string>i</string> <string>i</string>
<string>new_id_list</string> <string>new_id_list</string>
</tuple> </tuple>
......
...@@ -138,7 +138,7 @@ for bt in bt_id_list:\n ...@@ -138,7 +138,7 @@ for bt in bt_id_list:\n
object_state=object_state, \n object_state=object_state, \n
object_class=object_class, \n object_class=object_class, \n
choice_item_list=[[save_and_remove_title, \'save_and_remove\']])\n choice_item_list=[[save_and_remove_title, \'save_and_remove\']])\n
line.setUid(\'new_%s\' % object_id)\n line.setUid(\'new_%s\' % str(object_id))\n
object_list.append(line)\n object_list.append(line)\n
i += 1 \n i += 1 \n
\n \n
......
...@@ -87,7 +87,7 @@ for uid in uids:\n ...@@ -87,7 +87,7 @@ for uid in uids:\n
if dep_id not in id_list:\n if dep_id not in id_list:\n
id_list.append(dep_id)\n id_list.append(dep_id)\n
if dep_repository != \'meta\':\n if dep_repository != \'meta\':\n
portal_status_message+=\'\\\'%s\\\' added because \\\'%s\\\' depends on it.<br/>\'%(dep_id.replace(\'.bt5\', \'\'), id.replace(\'.bt5\', \'\'))\n portal_status_message+=\'\\\'%s\\\' added because \\\'%s\\\' depends on it.\'%(dep_id.replace(\'.bt5\', \'\'), id.replace(\'.bt5\', \'\'))\n
current_uid_list.append(context.encodeRepositoryBusinessTemplateUid(dep_repository, dep_id))\n current_uid_list.append(context.encodeRepositoryBusinessTemplateUid(dep_repository, dep_id))\n
else:\n else:\n
provider_list = context.getProviderList(dep_id)\n provider_list = context.getProviderList(dep_id)\n
......
...@@ -14650,7 +14650,7 @@ ...@@ -14650,7 +14650,7 @@
</item> </item>
<item> <item>
<key> <string>module</string> </key> <key> <string>module</string> </key>
<value> <string>Products.ERP5Type.patches.transforms.png_to_text</string> </value> <value> <string>Products.PortalTransforms.transforms.png_to_text</string> </value>
</item> </item>
<item> <item>
<key> <string>output</string> </key> <key> <string>output</string> </key>
...@@ -15171,7 +15171,7 @@ ...@@ -15171,7 +15171,7 @@
</item> </item>
<item> <item>
<key> <string>module</string> </key> <key> <string>module</string> </key>
<value> <string>Products.ERP5Type.patches.transforms.w3m_dump</string> </value> <value> <string>Products.PortalTransforms.transforms.w3m_dump</string> </value>
</item> </item>
<item> <item>
<key> <string>output</string> </key> <key> <string>output</string> </key>
......
1324 1330
\ No newline at end of file \ No newline at end of file
...@@ -109,10 +109,10 @@ ...@@ -109,10 +109,10 @@
</tal:block>\n </tal:block>\n
<span id="listbox_record_number" class="listbox_record_number"\n <span id="listbox_record_number" class="listbox_record_number"\n
tal:attributes="id string:${field_id}_record_number"\n tal:attributes="id string:${field_id}_record_number"\n
i18n:translate="" i18n:domain="ui"><tal:block tal:replace="here/total_size" i18n:name="number">0</tal:block> record(s)</span>\n i18n:translate="" i18n:domain="ui"><tal:block tal:replace="here/total_size" i18n:name="number">0</tal:block> records</span>\n
<span id="listbox_item_number" class="listbox_item_number"\n <span id="listbox_item_number" class="listbox_item_number"\n
tal:attributes="id string:${field_id}_item_number"\n tal:attributes="id string:${field_id}_item_number"\n
i18n:translate="" i18n:domain="ui"> - <tal:block tal:replace="python: len(here.getCheckedUidList())" i18n:name="number">0</tal:block> item(s) selected</span>\n i18n:translate="" i18n:domain="ui"> - <tal:block tal:replace="python: len(here.getCheckedUidList())" i18n:name="number">0</tal:block> items selected</span>\n
</td>\n </td>\n
\n \n
<td class="pageNavigation" style="white-space: nowrap; vertical-align: middle; text-align: center;">\n <td class="pageNavigation" style="white-space: nowrap; vertical-align: middle; text-align: center;">\n
......
837 838
\ No newline at end of file \ No newline at end of file
# -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# Copyright (c) 2004, 2005, 2006 Nexedi SARL and Contributors. # Copyright (c) 2004, 2005, 2006 Nexedi SARL and Contributors.
...@@ -957,6 +958,90 @@ class TestBase(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -957,6 +958,90 @@ class TestBase(ERP5TypeTestCase, ZopeTestCase.Functional):
props['chain_%s' % id] = ','.join(wf_ids) props['chain_%s' % id] = ','.join(wf_ids)
pw.manage_changeWorkflows('', props = props) pw.manage_changeWorkflows('', props = props)
def test_14_UpdateRoleMappingwithNoDefinedRoleAndAcquisitionActivatedOnWorkflow(self, quiet=quiet, run=run_all_test):
"""updateRoleMappingsFor does a logical AND between all workflow defining security,
if a workflow defines no permission and is set to acquire permissions,
and another workflow defines permission and is set not to acquire perm,
then user have no permissions.
It may depends on which workflow pass the last transition.
"""
if not run: return
portal = self.getPortal()
portal_type = "Organisation"
module = portal.getDefaultModule(portal_type=portal_type)
# Add a non-existent workflow.
pw = self.getWorkflowTool()
dummy_simulation_worlflow_id = 'fake_simulation_workflow'
dummy_validation_worlflow_id = 'fake_validation_workflow'
#Assume that erp5_styles workflow Manage permissions with acquired Role by default
pw.manage_addWorkflow('erp5_workflow (ERP5-style empty workflow)',
dummy_simulation_worlflow_id)
pw.manage_addWorkflow('erp5_workflow (ERP5-style empty workflow)',
dummy_validation_worlflow_id)
dummy_simulation_worlflow = pw[dummy_simulation_worlflow_id]
dummy_validation_worlflow = pw[dummy_validation_worlflow_id]
dummy_validation_worlflow.variables.setStateVar('validation_state')
cbt = pw._chains_by_type
props = {}
for id, wf_ids in cbt.iteritems():
if id == portal_type:
old_wf_ids = wf_ids
props['chain_%s' % id] = ','.join([dummy_validation_worlflow_id, dummy_simulation_worlflow_id])
pw.manage_changeWorkflows('', props=props)
permission_list = list(dummy_simulation_worlflow.permissions)
manager_has_permission = {}
for permission in permission_list:
manager_has_permission[permission] = ('Manager',)
manager_has_no_permission = {}
for permission in permission_list:
manager_has_no_permission[permission] = ()
from AccessControl import getSecurityManager
user = getSecurityManager().getUser()
try:
self.assertTrue(permission_list)
self.assertFalse(dummy_simulation_worlflow.states.draft.permission_roles)
#1
obj = module.newContent(portal_type=portal_type)
#No role is defined by default on workflow
for permission in permission_list:
self.assertTrue(user.has_permission(permission, module))
#then check permission is acquired
for permission in permission_list:
self.assertTrue(user.has_permission(permission, obj))
#2 Now configure both workflow with same configuration
dummy_simulation_worlflow.states.draft.permission_roles = manager_has_permission.copy()
dummy_validation_worlflow.states.draft.permission_roles = manager_has_permission.copy()
dummy_simulation_worlflow.updateRoleMappingsFor(obj)
dummy_validation_worlflow.updateRoleMappingsFor(obj)
for permission in permission_list:
self.assertTrue(user.has_permission(permission, obj))
#3 change only dummy_simulation_worlflow
dummy_simulation_worlflow.states.draft.permission_roles = manager_has_no_permission.copy()
dummy_simulation_worlflow.updateRoleMappingsFor(obj)
for permission in permission_list:
self.assertFalse(user.has_permission(permission, obj))
#4 enable acquisition for dummy_simulation_worlflow
dummy_simulation_worlflow.states.draft.permission_roles = None
dummy_simulation_worlflow.updateRoleMappingsFor(obj)
for permission in permission_list:
self.assertTrue(user.has_permission(permission, obj))
finally:
# Make sure that the artificial workflow is not referred to any longer.
cbt = pw._chains_by_type
props = {}
for id, wf_ids in cbt.iteritems():
if id == portal_type:
# Remove the non-existent workflow.
wf_ids = old_wf_ids
props['chain_%s' % id] = ','.join(wf_ids)
pw.manage_changeWorkflows('', props=props)
pw.manage_delObjects([dummy_simulation_worlflow_id, dummy_validation_worlflow_id])
def test_getViewPermissionOwnerDefault(self): def test_getViewPermissionOwnerDefault(self):
"""Test getViewPermissionOwner method behaviour""" """Test getViewPermissionOwner method behaviour"""
portal = self.getPortal() portal = self.getPortal()
......
...@@ -1189,6 +1189,15 @@ class TestERP5Base(ERP5TypeTestCase): ...@@ -1189,6 +1189,15 @@ class TestERP5Base(ERP5TypeTestCase):
self.assertEquals('mailto:nobody@example.com', self.assertEquals('mailto:nobody@example.com',
pers.Entity_getDefaultEmailAsURL()) pers.Entity_getDefaultEmailAsURL())
def test_LinkAsURL(self):
person = self.getPersonModule().newContent(portal_type='Person')
link = person.newContent(portal_type='Link',
url_string='http://www.nexedi.com/')
self.assertEquals(link.asURL(), 'http://www.nexedi.com/')
link = person.newContent(portal_type='Link',
url_string='www.nexedi.com')
self.assertEquals(link.asURL(), 'http://www.nexedi.com')
def test_getTranslatedId(self): def test_getTranslatedId(self):
pers = self.getPersonModule().newContent( pers = self.getPersonModule().newContent(
portal_type='Person', id='default_email') portal_type='Person', id='default_email')
...@@ -1253,22 +1262,20 @@ class TestERP5Base(ERP5TypeTestCase): ...@@ -1253,22 +1262,20 @@ class TestERP5Base(ERP5TypeTestCase):
def test_ConvertImage(self): def test_ConvertImage(self):
image = self.portal.newContent(portal_type='Image', id='test_image') image = self.portal.newContent(portal_type='Image', id='test_image')
image.edit(file=self.makeImageFileUpload('erp5_logo.png')) image.edit(file=self.makeImageFileUpload('erp5_logo.png'))
image_type, image_data = image.convert('jpg', display='thumbnail') self.assertEqual('image/png', image.getContentType())
self.assertEquals('image/jpeg', image_type) self.assertEqual((320, 250), (image.getWidth(), image.getHeight()))
# magic
self.assertEquals('\xff', image_data[0]) from Products.ERP5Type.Document import newTempImage
self.assertEquals('\xd8', image_data[1]) def convert(**kw):
image_type, image_data = image.convert('jpg', display='thumbnail', **kw)
def test_ConvertImageQuality(self): self.assertEqual('image/jpeg', image_type)
image = self.portal.newContent(portal_type='Image', id='test_image') thumbnail = newTempImage(self.portal, 'thumbnail', data=image_data)
image.edit(file=self.makeImageFileUpload('erp5_logo.png')) self.assertEqual(image_type, thumbnail.getContentType())
image_type, image_data = image.convert('jpg', display='thumbnail', self.assertEqual((128, 100), (thumbnail.getWidth(),
quality=100) thumbnail.getHeight()))
self.assertEquals('image/jpeg', image_type) return thumbnail.getSize()
# magic self.assertTrue(convert() < convert(quality=100))
self.assertEquals('\xff', image_data[0])
self.assertEquals('\xd8', image_data[1])
def test_ConvertImagePdata(self): def test_ConvertImagePdata(self):
image = self.portal.newContent(portal_type='Image', id='test_image') image = self.portal.newContent(portal_type='Image', id='test_image')
image.edit(file=self.makeImageFileUpload('erp5_logo.bmp')) image.edit(file=self.makeImageFileUpload('erp5_logo.bmp'))
......
...@@ -1043,6 +1043,8 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -1043,6 +1043,8 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
site.get_local_roles_for_userid(person_reference)) site.get_local_roles_for_userid(person_reference))
self.assertSameSet(('Associate',), self.assertSameSet(('Associate',),
section.get_local_roles_for_userid(person_reference)) section.get_local_roles_for_userid(person_reference))
self.assertRaises(Unauthorized, site_role_definition.edit,
role_name='Manager')
# delete Role Definition and check again (local roles must be gone too) # delete Role Definition and check again (local roles must be gone too)
site.manage_delObjects(site_role_definition.getId()) site.manage_delObjects(site_role_definition.getId())
...@@ -1402,8 +1404,39 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -1402,8 +1404,39 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
except Unauthorized: except Unauthorized:
self.fail("A webmaster should be able to rename a Category.") self.fail("A webmaster should be able to rename a Category.")
class TestERP5WebCategoryPublicationWorkflow(ERP5TypeTestCase):
"""Tests possible transitions for category_publication_workflow"""
def getBusinessTemplateList(self):
return ('erp5_base',
'erp5_web',
)
def afterSetUp(self):
base_category = self.getPortal().portal_categories\
.newContent(portal_type='Base Category')
self.doActionFor = self.getPortal().portal_workflow.doActionFor
self.category = base_category.newContent(portal_type='Category')
self.assertEqual('embedded', self.category.getValidationState())
def test_category_embedded_expired(self):
self.doActionFor(self.category, 'expire_action')
self.assertEqual('expired', self.category.getValidationState())
def test_category_embedded_protected_expired(self):
self.doActionFor(self.category, 'protect_action')
self.assertEqual('protected', self.category.getValidationState())
self.doActionFor(self.category, 'expire_action')
self.assertEqual('expired_protected', self.category.getValidationState())
def test_category_embedded_published_expired(self):
self.doActionFor(self.category, 'publish_action')
self.assertEqual('published', self.category.getValidationState())
self.doActionFor(self.category, 'expire_action')
self.assertEqual('expired_published', self.category.getValidationState())
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestERP5Web)) suite.addTest(unittest.makeSuite(TestERP5Web))
suite.addTest(unittest.makeSuite(TestERP5WebWithSimpleSecurity)) suite.addTest(unittest.makeSuite(TestERP5WebWithSimpleSecurity))
suite.addTest(unittest.makeSuite(TestERP5WebCategoryPublicationWorkflow))
return suite return suite
# -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. # Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved.
......
...@@ -203,6 +203,24 @@ class TestXHTML(ERP5TypeTestCase): ...@@ -203,6 +203,24 @@ class TestXHTML(ERP5TypeTestCase):
ZopeTestCase._print('\n%s.' % document.id) ZopeTestCase._print('\n%s.' % document.id)
self.assert_(document.title in document.list(reset=1)) self.assert_(document.title in document.list(reset=1))
def test_preferenceViewDuplication(self):
"""Make sure that preference view is not duplicated."""
preference_view_id_dict = {}
def addPreferenceView(folder_id, view_id):
if not view_id in preference_view_id_dict:
preference_view_id_dict[view_id] = []
preference_view_id_dict[view_id].append('%s.%s' % (folder_id, view_id))
error_list = []
for object_ in self.portal.portal_skins.objectValues():
if object_.isPrincipiaFolderish:
for id_ in object_.objectIds():
if id_.startswith('Preference_view'):
addPreferenceView(object_.id, id_)
for view_id, location_list in preference_view_id_dict.items():
if len(location_list)>1:
error_list.extend(location_list)
self.assertEqual(error_list, [])
class W3Validator(object): class W3Validator(object):
def __init__(self, validator_path, show_warnings): def __init__(self, validator_path, show_warnings):
......
...@@ -1381,6 +1381,12 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor): ...@@ -1381,6 +1381,12 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
org_e = self._makeOrganisation(title='foo',description='bir') org_e = self._makeOrganisation(title='foo',description='bir')
org_f = self._makeOrganisation(title='foo',description='bar') org_f = self._makeOrganisation(title='foo',description='bar')
# uid=[]
catalog_kw= {'query':Query(uid=[])}
self.failIfDifferentSet(
[x.getPath() for x in (org_a, org_b, org_c, org_e, org_f)],
[x.path for x in self.getCatalogTool()(
portal_type='Organisation',**catalog_kw)])
# title='abc' # title='abc'
catalog_kw= {'title':Query(title='abc')} catalog_kw= {'title':Query(title='abc')}
self.failIfDifferentSet([org_a.getPath()], self.failIfDifferentSet([org_a.getPath()],
...@@ -3869,7 +3875,49 @@ VALUES ...@@ -3869,7 +3875,49 @@ VALUES
folder_object_list = [x.getObject().getId() for x in folder_object_list = [x.getObject().getId() for x in
person_module.searchFolder(title=title)] person_module.searchFolder(title=title)]
self.assertEquals([person_id],folder_object_list) self.assertEquals([person_id],folder_object_list)
def test_SearchFolderWithMultipleSpaces(self, quiet=quiet):
if not quiet:
message = 'Search Folder With Multiple Spaces'
ZopeTestCase._print('\n%s ' % message)
LOG('Testing... ',0,message)
person_module = self.getPersonModule()
# Make sure that the catalog will not split it with such research :
# title=foo AND title=bar
title='foo bar'
person_module.newContent(portal_type='Person',title=title).immediateReindexObject()
title = title.replace(' ', ' ')
person = person_module.newContent(portal_type='Person',title=title)
person_id = person.getId()
person.immediateReindexObject()
folder_object_list = [x.getObject().getId() for x in person_module.searchFolder()]
self.assertTrue(person_id in folder_object_list)
folder_object_list = [x.getObject().getId() for x in
person_module.searchFolder(title=title)]
self.assertEquals([person_id],folder_object_list)
def test_SearchFolderWithSingleQuote(self, quiet=quiet):
if not quiet:
message = 'Search Folder With Single Quote'
ZopeTestCase._print('\n%s ' % message)
LOG('Testing... ',0,message)
person_module = self.getPersonModule()
# Make sure that the catalog will not split it with such research :
# title=foo AND title=bar
title="foo 'bar"
person = person_module.newContent(portal_type='Person',title=title)
person_id = person.getId()
person.immediateReindexObject()
folder_object_list = [x.getObject().getId() for x in person_module.searchFolder()]
self.assertTrue(person_id in folder_object_list)
folder_object_list = [x.getObject().getId() for x in
person_module.searchFolder(title=title)]
self.assertEquals([person_id],folder_object_list)
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestERP5Catalog)) suite.addTest(unittest.makeSuite(TestERP5Catalog))
......
...@@ -1170,7 +1170,3 @@ psyco.bind(Field.get_value) ...@@ -1170,7 +1170,3 @@ psyco.bind(Field.get_value)
#from Products.CMFCore.ActionsTool import ActionsTool #from Products.CMFCore.ActionsTool import ActionsTool
#psyco.bind(ActionsTool.listFilteredActionsFor) #psyco.bind(ActionsTool.listFilteredActionsFor)
# install interactor
# we need to install interactor after to apply get_value patch.
from Products.ERP5Type.Interactor import field_value_interactor
field_value_interactor.install()
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2007-2009 Nexedi SA and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from Products.ERP5Type.Interactor.Interactor import Interactor
class FieldValueCacheInteractor(Interactor):
def install(self):
"""
Installs interactions
"""
from Products.Formulator.Field import ZMIField
from Products.ERP5Form.ProxyField import ProxyField
from Products.Formulator.Form import ZMIForm
self.on(ZMIField.manage_edit).doAfter(self.purgeFieldValueCache)
self.on(ZMIField.manage_edit_xmlrpc).doAfter(self.purgeFieldValueCache)
self.on(ZMIField.manage_tales).doAfter(self.purgeFieldValueCache)
self.on(ZMIField.manage_tales_xmlrpc).doAfter(self.purgeFieldValueCache)
self.on(ProxyField.manage_edit).doAfter(self.purgeFieldValueCache)
self.on(ProxyField.manage_edit_target).doAfter(self.purgeFieldValueCache)
self.on(ProxyField.manage_tales).doAfter(self.purgeFieldValueCache)
self.on(ZMIForm.manage_renameObject).doAfter(self.purgeFieldValueCache)
def uninstall(self):
"""
Uninstall interactions
"""
def purgeFieldValueCache(self, method_call_object):
"""
"""
from Products.ERP5Form import Form, ProxyField
Form.purgeFieldValueCache()
ProxyField.purgeFieldValueCache()
...@@ -2371,7 +2371,7 @@ class ListBoxHTMLRendererLine(ListBoxRendererLine): ...@@ -2371,7 +2371,7 @@ class ListBoxHTMLRendererLine(ListBoxRendererLine):
# JPS-XXX - I think we should not display a URL for objects # JPS-XXX - I think we should not display a URL for objects
# which do not have the View permission # which do not have the View permission
if type(url) is str: if type(url) is str:
url = unicode(url.decode('utf-8')) url = unicode(url, encoding)
html = u'<a href="%s">%s</a>' % (url, processed_value) html = u'<a href="%s">%s</a>' % (url, processed_value)
html_list.append((html, original_value, error, editable_field, url)) html_list.append((html, original_value, error, editable_field, url))
......
# -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# Copyright (c) 2004, 2009 Nexedi SA and Contributors. All Rights Reserved. # Copyright (c) 2002-2009 Nexedi SA and Contributors. All Rights Reserved.
# Romain Courteaud <romain@nexedi.com>
# #
# WARNING: This program as such is intended to be used by professional # WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential # programmers who take the whole responsability of assessing all potential
...@@ -26,71 +26,68 @@ ...@@ -26,71 +26,68 @@
# #
############################################################################## ##############################################################################
class ApparelTransformation: from Testing.ZopeTestCase.PortalTestCase import PortalTestCase
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Type.tests.SecurityTestCase import SecurityTestCase
import transaction
import unittest
class TestFieldValueCache(ERP5TypeTestCase):
""" """
A transformation can acquire other transformations A Sample Test Class
""" """
_properties = ( def getTitle(self):
{ 'id' : 'template_transformation_id', return "TestDiscussionThread"
'description' : "The contact persons involved",
'type' : 'lines',
'acquisition_base_category' : ('specialise',),
'acquisition_portal_type' : ('Apparel Transformation',),
'acquisition_copy_value' : 0,
'acquisition_mask_value' : 0,
'acquisition_sync_value' : 0,
'acquisition_accessor_id' : 'getId',
'acquisition_depends' : None,
'mode' : 'w' },
{ 'id' : 'template_transformation_url',
'description' : "The contact persons involved",
'type' : 'lines',
'acquisition_base_category' : ('specialise',),
'acquisition_portal_type' : ('Apparel Transformation',),
'acquisition_copy_value' : 0,
'acquisition_mask_value' : 0,
'acquisition_sync_value' : 0,
'acquisition_accessor_id' : 'getRelativeUrl',
'acquisition_depends' : None,
'mode' : 'w' },
{ 'id' : 'template_transformation_title', def getBusinessTemplateList(self):
'description' : "The contact persons involved", """
'type' : 'lines', Tuple of Business Templates we need to install
'acquisition_base_category' : ('specialise',), """
'acquisition_portal_type' : ('Apparel Transformation',), return (
'acquisition_copy_value' : 0, 'erp5_base',
'acquisition_mask_value' : 0, )
'acquisition_sync_value' : 0,
'acquisition_accessor_id' : 'getTitle',
'acquisition_depends' : None,
'mode' : 'w' },
{ 'id' : 'resource_title', def setUpOnce(self):
'description' : "Title of the resource", """
'type' : 'string', Do nothing
'acquisition_base_category' : ('resource',), """
'acquisition_portal_type' : ('Apparel Shape', 'Apparel Model', 'Apparel Assortment'),
'acquisition_copy_value' : 0,
'acquisition_mask_value' : 0,
'acquisition_sync_value' : 0,
'acquisition_accessor_id' : 'getTitle',
'acquisition_depends' : None,
'mode' : 'w' },
# Override default value XXX def afterSetUp(self):
{ 'id' : 'variation_base_category_line', """
'description' : 'The variation base category which serves as line in the matrix representation.', This is ran before each and every test, used to set up the environment
'type' : 'string', """
'default' : 'colour', self.person_module = self.portal.getDefaultModule(portal_type='Person')
'mode' : 'w' },
# Override default value XXX
{ 'id' : 'variation_base_category_column',
'description' : 'The variation base category which serves as column in the matrix representation.',
'type' : 'string',
'default' : 'size',
'mode' : 'w' },
)
def testEditZMIFieldPurgesValueCache(self):
"""
This test makes sure that if manage_edit is called on a ZMI
field then its ValueCache is purged.
"""
person = self.person_module.newContent()
form = person.Person_view
# Render
form()
# Get form value
field = form.my_first_name
id = 'title'
from Products.ERP5Form.ProxyField import _field_value_cache
cache_id = ('ProxyField.get_value',
field._p_oid,
field._p_oid,
id)
# Make sure cache has field
self.assertTrue(_field_value_cache.has_key(cache_id))
# Make sure cache and field are equal
self.assertEquals(field.get_value(id), _field_value_cache[cache_id])
# Call manage_renameObject
form.manage_renameObject('my_first_name', 'my_first_name2')
form.manage_renameObject('my_first_name2', 'my_first_name')
# Make sure cache has no field
self.assertFalse(_field_value_cache.has_key(cache_id))
# Render
form()
# Make sure cache has field
self.assertTrue(_field_value_cache.has_key(cache_id))
# Make sure cache and field are equal
self.assertEquals(field.get_value(id), _field_value_cache[cache_id])
...@@ -457,6 +457,10 @@ class TestPreferences(ERP5TypeTestCase): ...@@ -457,6 +457,10 @@ class TestPreferences(ERP5TypeTestCase):
preference_tool.getPreferredOoodocServerAddress('localhost')) preference_tool.getPreferredOoodocServerAddress('localhost'))
self.assertEqual(default_large_image_height, self.assertEqual(default_large_image_height,
preference_tool.getPreferredLargeImageHeight()) preference_tool.getPreferredLargeImageHeight())
# Default value passed by parameter has priority over the default in the
# property sheet.
self.assertEqual(large_image_height,
preference_tool.getPreferredLargeImageHeight(large_image_height))
# Members can't add new system preferences # Members can't add new system preferences
uf = self.getPortal().acl_users uf = self.getPortal().acl_users
...@@ -491,6 +495,8 @@ class TestPreferences(ERP5TypeTestCase): ...@@ -491,6 +495,8 @@ class TestPreferences(ERP5TypeTestCase):
preference_tool.getPreferredOoodocServerAddress('localhost')) preference_tool.getPreferredOoodocServerAddress('localhost'))
self.assertEqual(large_image_height, self.assertEqual(large_image_height,
preference_tool.getPreferredLargeImageHeight()) preference_tool.getPreferredLargeImageHeight())
self.assertEqual(large_image_height,
preference_tool.getPreferredLargeImageHeight(0))
# check a user can't edit preference which are marked for manager # check a user can't edit preference which are marked for manager
self.assertRaises(Unauthorized, user_pref.edit, preferred_ooodoc_server_address="localhost") self.assertRaises(Unauthorized, user_pref.edit, preferred_ooodoc_server_address="localhost")
......
...@@ -58,6 +58,7 @@ from Products.ERP5Type.tests.utils import FileUpload ...@@ -58,6 +58,7 @@ from Products.ERP5Type.tests.utils import FileUpload
from Products.ERP5Type.tests.utils import DummyLocalizer from Products.ERP5Type.tests.utils import DummyLocalizer
from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManagement import newSecurityManager
from zLOG import LOG from zLOG import LOG
from Products.ERP5.Document.Document import NotConvertedError
import os import os
QUIET = 0 QUIET = 0
...@@ -809,6 +810,30 @@ class TestDocument(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -809,6 +810,30 @@ class TestDocument(ERP5TypeTestCase, ZopeTestCase.Functional):
self.assertEquals('ERP5 is a free software.\n', self.assertEquals('ERP5 is a free software.\n',
document.SearchableText()) document.SearchableText())
def test_Base_showFoundText(self):
# Create document with good content
document = self.portal.document_module.newContent(portal_type='Drawing')
self.assertEquals('empty', document.getExternalProcessingState())
filename = 'TEST-en-002.odt'
upload_file = makeFileUpload(filename)
document.edit(file=upload_file)
transaction.commit()
self.tic()
self.assertEquals('converted', document.getExternalProcessingState())
# Upload different type of file inside
upload_file = makeFileUpload('REF-en-001.pdf')
document.edit(file=upload_file)
self.assertEquals('application/pdf', document.getContentType())
self.assertEquals('converting', document.getExternalProcessingState())
# As document is not converted, text convertion is impossible
# But document can still be retrive with portal catalog
self.assertRaises(NotConvertedError, document.asText)
self.assertRaises(NotConvertedError, document.getSearchableText)
self.assertEquals('This document is not converted yet.',
document.Base_showFoundText())
class TestDocumentWithSecurity(ERP5TypeTestCase): class TestDocumentWithSecurity(ERP5TypeTestCase):
username = 'yusei' username = 'yusei'
......
...@@ -951,6 +951,19 @@ class TestOOoImport(ERP5TypeTestCase): ...@@ -951,6 +951,19 @@ class TestOOoImport(ERP5TypeTestCase):
title='codification'), title='codification'),
region[6]) region[6])
def test_BigSpreadSheet_can_be_parsed(self,):
"""Test than OOoimport can parse a file with more than 40000 lines
"""
parser = OOoParser()
parser.openFile(open(makeFilePath('import_big_spreadsheet.ods'), 'rb'))
mapping = parser.getSpreadsheetsMapping()
not_ok = 1
for spread, values in mapping.iteritems():
self.assertEquals(len(values), 41001)
not_ok = 0
if not_ok:
self.fail('Spreadsheet not read!')
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestOOoImport)) suite.addTest(unittest.makeSuite(TestOOoImport))
......
...@@ -324,6 +324,15 @@ class TestUserManagement(ERP5TypeTestCase): ...@@ -324,6 +324,15 @@ class TestUserManagement(ERP5TypeTestCase):
assignment_stop_date=date-1) assignment_stop_date=date-1)
self._assertUserDoesNotExists('the_user', 'secret') self._assertUserDoesNotExists('the_user', 'secret')
def test_DeletedPersonIsNotUser(self):
p = self._makePerson(reference='the_user', password='secret')
self._assertUserExists('the_user', 'secret')
p.delete()
transaction.commit()
self._assertUserDoesNotExists('the_user', 'secret')
class TestLocalRoleManagement(ERP5TypeTestCase): class TestLocalRoleManagement(ERP5TypeTestCase):
"""Tests Local Role Management with ERP5Security. """Tests Local Role Management with ERP5Security.
......
...@@ -35,6 +35,7 @@ from ERP5Diff import ERP5Diff ...@@ -35,6 +35,7 @@ from ERP5Diff import ERP5Diff
from zLOG import LOG, INFO from zLOG import LOG, INFO
from lxml import etree from lxml import etree
from lxml.etree import Element
from lxml.builder import ElementMaker from lxml.builder import ElementMaker
from SyncCode import SYNCML_NAMESPACE from SyncCode import SYNCML_NAMESPACE
nsmap = {'syncml' : SYNCML_NAMESPACE} nsmap = {'syncml' : SYNCML_NAMESPACE}
...@@ -43,10 +44,7 @@ parser = etree.XMLParser(remove_blank_text=True) ...@@ -43,10 +44,7 @@ parser = etree.XMLParser(remove_blank_text=True)
from xml.dom import minidom from xml.dom import minidom
try: from base64 import b16encode, b16decode
from base64 import b16encode, b16decode
except ImportError:
from base64 import encodestring as b16encode, decodestring as b16decode
class XMLSyncUtilsMixin(SyncCode): class XMLSyncUtilsMixin(SyncCode):
...@@ -263,7 +261,7 @@ class XMLSyncUtilsMixin(SyncCode): ...@@ -263,7 +261,7 @@ class XMLSyncUtilsMixin(SyncCode):
) )
) )
))) )))
data_store = xml.find('Item/Data/DevInf/DataStore') data_store = xml.find('{%(ns)s}Item/{%(ns)s}Data/{%(ns)s}DevInf/{%(ns)s}DataStore' % {'ns': SYNCML_NAMESPACE})
tx_element_list = [] tx_element_list = []
rx_element_list = [] rx_element_list = []
for type in conduit.getCapabilitiesCTTypeList(): for type in conduit.getCapabilitiesCTTypeList():
......
...@@ -906,7 +906,10 @@ class TestERP5DocumentSyncML(TestERP5DocumentSyncMLMixin, ERP5TypeTestCase): ...@@ -906,7 +906,10 @@ class TestERP5DocumentSyncML(TestERP5DocumentSyncMLMixin, ERP5TypeTestCase):
self.tic() self.tic()
self.synchronize(self.sub_id1) self.synchronize(self.sub_id1)
conflict_list = portal_sync.getConflictList() conflict_list = portal_sync.getConflictList()
self.assertEqual(len(conflict_list), 5) self.assertEqual(len(conflict_list), 6)
self.assertEqual(sorted([x.getKeyword() for x in conflict_list]),
['content_md5', 'content_type', 'description',
'short_title', 'source_reference', 'title'])
# check if we have the state conflict on all clients # check if we have the state conflict on all clients
self.checkSynchronizationStateIsConflict() self.checkSynchronizationStateIsConflict()
# we will take : # we will take :
......
...@@ -40,7 +40,7 @@ from base64 import encodestring ...@@ -40,7 +40,7 @@ from base64 import encodestring
try: try:
import memcache import memcache
from Products.ERP5Type.Tool.MemcachedTool import MemcachedDict from Products.ERP5Type.Tool.MemcachedTool import MemcachedDict, SharedDict
except ImportError: except ImportError:
LOG('DistributedRamCache', 0, 'unable to import memcache') LOG('DistributedRamCache', 0, 'unable to import memcache')
...@@ -62,7 +62,6 @@ class DistributedRamCache(BaseCache): ...@@ -62,7 +62,6 @@ class DistributedRamCache(BaseCache):
self._server_max_value_length = params.get('server_max_value_length', 1024*1024) self._server_max_value_length = params.get('server_max_value_length', 1024*1024)
self._debug_level = params.get('debug_level', 0) self._debug_level = params.get('debug_level', 0)
self._key_prefix = params.get('key_prefix', '') self._key_prefix = params.get('key_prefix', '')
self._cache_plugin_path = params.get('cache_plugin_path')
BaseCache.__init__(self) BaseCache.__init__(self)
def initCacheStorage(self): def initCacheStorage(self):
...@@ -78,26 +77,20 @@ class DistributedRamCache(BaseCache): ...@@ -78,26 +77,20 @@ class DistributedRamCache(BaseCache):
try: try:
dictionary = connection_pool.memcached_dict dictionary = connection_pool.memcached_dict
except AttributeError: except AttributeError:
dictionary = MemcachedDict(self._servers.split('\n'), dictionary = SharedDict(
server_max_key_length=self._server_max_key_length, MemcachedDict(self._servers.split('\n'),
server_max_value_length=self._server_max_value_length) server_max_key_length=self._server_max_key_length,
server_max_value_length=self._server_max_value_length),
prefix=self._key_prefix)
connection_pool.memcached_dict = dictionary connection_pool.memcached_dict = dictionary
return dictionary return dictionary
def checkAndFixCacheId(self, cache_id, scope): def _getCacheId(self, cache_id, scope):
## memcached doesn't support namespaces (cache scopes) so to "emmulate" return '%s_%s' % (scope, cache_id)
## such behaviour when constructing cache_id we add scope in front
cache_id = "%s%s%s%s" % (self._key_prefix, self._cache_plugin_path,
scope, cache_id)
# Escape key to normalise some chars
# which are not allowed by memcached
# Could reach the limit of max_key_len
cache_id = encodestring(cache_id).replace('\n', '')
return cache_id
def get(self, cache_id, scope, default=_MARKER): def get(self, cache_id, scope, default=_MARKER):
cache_storage = self.getCacheStorage() cache_storage = self.getCacheStorage()
cache_id = self.checkAndFixCacheId(cache_id, scope) cache_id = self._getCacheId(cache_id, scope)
cache_entry = cache_storage.get(cache_id) cache_entry = cache_storage.get(cache_id)
#Simulate the behaviour of a standard Dictionary #Simulate the behaviour of a standard Dictionary
if not isinstance(cache_entry, CacheEntry): if not isinstance(cache_entry, CacheEntry):
...@@ -116,7 +109,7 @@ class DistributedRamCache(BaseCache): ...@@ -116,7 +109,7 @@ class DistributedRamCache(BaseCache):
def set(self, cache_id, scope, value, cache_duration=None, calculation_time=0): def set(self, cache_id, scope, value, cache_duration=None, calculation_time=0):
cache_storage = self.getCacheStorage() cache_storage = self.getCacheStorage()
cache_id = self.checkAndFixCacheId(cache_id, scope) cache_id = self._getCacheId(cache_id, scope)
cache_entry = CacheEntry(value, cache_duration, calculation_time) cache_entry = CacheEntry(value, cache_duration, calculation_time)
cache_storage.set(cache_id, cache_entry) cache_storage.set(cache_id, cache_entry)
self.markCacheMiss() self.markCacheMiss()
...@@ -134,12 +127,12 @@ class DistributedRamCache(BaseCache): ...@@ -134,12 +127,12 @@ class DistributedRamCache(BaseCache):
def delete(self, cache_id, scope): def delete(self, cache_id, scope):
cache_storage = self.getCacheStorage() cache_storage = self.getCacheStorage()
cache_id = self.checkAndFixCacheId(cache_id, scope) cache_id = self._getCacheId(cache_id, scope)
del cache_storage[cache_id] del cache_storage[cache_id]
def has_key(self, cache_id, scope): def has_key(self, cache_id, scope):
cache_storage = self.getCacheStorage() cache_storage = self.getCacheStorage()
cache_id = self.checkAndFixCacheId(cache_id, scope) cache_id = self._getCacheId(cache_id, scope)
cache_entry = cache_storage.get(cache_id) cache_entry = cache_storage.get(cache_id)
to_return = False to_return = False
if isinstance(cache_entry, CacheEntry): if isinstance(cache_entry, CacheEntry):
......
# -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. # Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
...@@ -35,6 +36,10 @@ from zLOG import LOG ...@@ -35,6 +36,10 @@ from zLOG import LOG
global product_document_registry global product_document_registry
product_document_registry = [] product_document_registry = []
global product_interactor_registry
product_interactor_registry = []
global interactor_class_id_registry
interactor_class_id_registry = {}
def getProductDocumentPathList(): def getProductDocumentPathList():
result = product_document_registry result = product_document_registry
...@@ -45,7 +50,16 @@ def InitializeDocument(document_class, document_path=None): ...@@ -45,7 +50,16 @@ def InitializeDocument(document_class, document_path=None):
global product_document_registry global product_document_registry
# Register class in ERP5Type.Document # Register class in ERP5Type.Document
product_document_registry.append(((document_class, document_path))) product_document_registry.append(((document_class, document_path)))
#LOG('InitializeDocument', 0, document_class.__name__)
def getProductInteractorPathList():
result = product_interactor_registry
result.sort()
return result
def InitializeInteractor(interactor_class, interactor_path=None):
global product_interactor_registry
# Register class in ERP5Type.Interactor
product_interactor_registry.append(((interactor_class, interactor_path)))
def initializeProductDocumentRegistry(): def initializeProductDocumentRegistry():
from Utils import importLocalDocument from Utils import importLocalDocument
...@@ -56,3 +70,17 @@ def initializeProductDocumentRegistry(): ...@@ -56,3 +70,17 @@ def initializeProductDocumentRegistry():
#LOG('Added product document to ERP5Type repository: %s (%s)' % (class_id, document_path), 0, '') #LOG('Added product document to ERP5Type repository: %s (%s)' % (class_id, document_path), 0, '')
#print 'Added product document to ERP5Type repository: %s (%s)' % (class_id, document_path) #print 'Added product document to ERP5Type repository: %s (%s)' % (class_id, document_path)
def initializeProductInteractorRegistry():
from Utils import importLocalInteractor
for (class_id, interactor_path) in product_interactor_registry:
if class_id != 'Interactor': # Base class can not be global and placeless
importLocalInteractor(class_id, path=interactor_path)
def registerInteractorClass(class_id, klass):
global interactor_class_id_registry
interactor_class_id_registry[class_id] = klass
def installInteractorClassRegistry():
global interactor_class_id_registry
for class_id, klass in interactor_class_id_registry.items():
klass().install()
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2007-2009 Nexedi SA and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from MethodObject import Method from MethodObject import Method
from Products.ERP5Type.Base import _aq_reset from Products.ERP5Type.Base import _aq_reset
""" """
Current implementation uses callable objects. Current implementation uses callable objects.
Using decorator would be more modern and consistent with Using decorator would be more modern and consistent with
...@@ -16,7 +46,6 @@ from Products.ERP5Type.Base import _aq_reset ...@@ -16,7 +46,6 @@ from Products.ERP5Type.Base import _aq_reset
made generic. made generic.
""" """
class InteractorMethodCall: class InteractorMethodCall:
""" """
Method's wrapper used to keep arguments passed, in order to retrieve them Method's wrapper used to keep arguments passed, in order to retrieve them
...@@ -36,6 +65,8 @@ class InteractorMethodCall: ...@@ -36,6 +65,8 @@ class InteractorMethodCall:
return self.method(self.__dict__['instance'], *self.args, **self.kw) return self.method(self.__dict__['instance'], *self.args, **self.kw)
class InteractorMethod(Method): class InteractorMethod(Method):
"""
"""
def __init__(self, method): def __init__(self, method):
self.after_action_list = [] self.after_action_list = []
...@@ -61,6 +92,8 @@ class InteractorMethod(Method): ...@@ -61,6 +92,8 @@ class InteractorMethod(Method):
return result return result
class InteractorSource: class InteractorSource:
"""
"""
def __init__(self, method): def __init__(self, method):
""" """
...@@ -81,6 +114,10 @@ class InteractorSource: ...@@ -81,6 +114,10 @@ class InteractorSource:
self.method.registerAfterAction(action, args, kw) self.method.registerAfterAction(action, args, kw)
class Interactor: class Interactor:
"""
Interactor base class.
"""
def install(self): def install(self):
raise NotImplementedError raise NotImplementedError
...@@ -93,159 +130,4 @@ class Interactor: ...@@ -93,159 +130,4 @@ class Interactor:
Parameters may hold predicates ? Parameters may hold predicates ?
no need - use InteractorMethodCall and decide on action no need - use InteractorMethodCall and decide on action
""" """
return InteractorSource(method) return InteractorSource(method)
\ No newline at end of file
class AqDynamicInteractor(Interactor):
"""This base interactor will reset _aq_dynamic method cache, to regenerate
new accessors.
"""
def resetAqDynamic(self, *args, **kw):
"""
Reset _aq_dynamic
"""
_aq_reset()
class WorkflowToolInteractor(AqDynamicInteractor):
"""This interactor reset aq_dynamic method cache whenever workflow
associations are changed.
"""
def install(self):
from Products.CMFCore.WorkflowTool import WorkflowTool
self.on(WorkflowTool.manage_changeWorkflows).doAfter(self.resetAqDynamic)
class DCWorkflowInteractor(AqDynamicInteractor):
"""This interactor reset aq_dynamic method cache whenever a workflow
definition changes
"""
def install(self):
from Products.DCWorkflow.Transitions import Transitions
self.on(Transitions.addTransition).doAfter(self.resetAqDynamic)
self.on(Transitions.deleteTransitions).doAfter(self.resetAqDynamic)
from Products.DCWorkflow.Transitions import TransitionDefinition
self.on(TransitionDefinition.setProperties).doAfter(self.resetAqDynamic)
from Products.DCWorkflow.Variables import Variables
self.on(Variables.setStateVar).doAfter(self.resetAqDynamic)
## #
## # Experimental part
## #
## class InteractionWorkflowAqDynamicInteractor(AqDynamicInteractor):
## def install(self):
## """
## Installs interactions
## """
## from Products.ERP5.Interaction import InteractionDefinition
## self.on(InteractionDefinition.setProperties).doAfter(self.resetAqDynamic, 1, 2, toto="foo")
## self.on(InteractionDefinition.addVariable).doAfter(self.resetAqDynamic, 1, 2, toto="foo")
## def uninstall(self):
## """
## Uninstall interactions
## """
## # Interaction example
## class TypeInteractorExample(Interactor):
## def __init__(self, portal_type):
## self.portal_type = portal_type
## def install(self):
## from Products.CMFCore.TypesTool import TypesTool
## self.on(TypesTool.manage_edit).doAfter(self.doSomething)
## def doSomething(self, method_call_object):
## if self.portal_type == method_call_object.instance.portal_type:
## pass
## # do whatever
## class InteractorOfInteractor(Interactor):
## def __init__(self, interactor):
## self.interactor = interactor
## def install(self):
## self.on(interactor.doSomething).doAfter(self.doSomething)
## def doSomething(self, method_call_object):
## pass
## test = AqDynamicInteractor()
## test.install()
class FieldValueInteractor(Interactor):
def install(self):
"""
Installs interactions
"""
from Products.Formulator.Field import ZMIField
from Products.ERP5Form.ProxyField import ProxyField
from Products.Formulator.Form import ZMIForm
self.on(ZMIField.manage_edit).doAfter(self.purgeFieldValueCache)
self.on(ZMIField.manage_edit_xmlrpc).doAfter(self.purgeFieldValueCache)
self.on(ZMIField.manage_tales).doAfter(self.purgeFieldValueCache)
self.on(ZMIField.manage_tales_xmlrpc).doAfter(self.purgeFieldValueCache)
self.on(ProxyField.manage_edit).doAfter(self.purgeFieldValueCache)
self.on(ProxyField.manage_edit_target).doAfter(self.purgeFieldValueCache)
self.on(ProxyField.manage_tales).doAfter(self.purgeFieldValueCache)
self.on(ZMIForm.manage_renameObject).doAfter(self.purgeFieldValueCache)
def uninstall(self):
"""
Uninstall interactions
"""
def purgeFieldValueCache(self, method_call_object):
"""
"""
from Products.ERP5Form import Form, ProxyField
Form.purgeFieldValueCache()
ProxyField.purgeFieldValueCache()
class TypeInteractorExample(Interactor):
def __init__(self, portal_type):
self.portal_type = portal_type
def install(self):
from Products.CMFCore.TypesTool import TypesTool
self.on(TypesTool.manage_edit).doAfter(self.doSomething)
def doSomething(self, method_call_object):
if self.portal_type == method_call_object.instance.portal_type:
pass
# do whatever
class InteractorOfInteractor(Interactor):
def __init__(self, interactor):
self.interactor = interactor
def install(self):
self.on(Interactor.doSomething).doAfter(self.doSomething)
def doSomething(self, method_call_object):
pass
#interactor_of_interactor = InteractorOfInteractor(test)
#interactor_of_interactor.install()
# Install some interactors:
WorkflowToolInteractor().install()
DCWorkflowInteractor().install()
# This is used in ERP5Form and install method is called in ERP5Form
# Don't install this interactor here.
field_value_interactor = FieldValueInteractor()
...@@ -91,7 +91,6 @@ class CacheTool(BaseTool): ...@@ -91,7 +91,6 @@ class CacheTool(BaseTool):
'server': server, 'server': server,
'server_max_key_length': memcached_plugin.getServerMaxKeyLength(), 'server_max_key_length': memcached_plugin.getServerMaxKeyLength(),
'server_max_value_length': memcached_plugin.getServerMaxValueLength(), 'server_max_value_length': memcached_plugin.getServerMaxValueLength(),
'cache_plugin_path': cp.getPath(),
'key_prefix': getattr(self, 'erp5_site_global_id', '') 'key_prefix': getattr(self, 'erp5_site_global_id', '')
} }
cache_obj = DistributedRamCache(init_dict) cache_obj = DistributedRamCache(init_dict)
......
...@@ -32,6 +32,7 @@ from Products.ERP5Type.Tool.BaseTool import BaseTool ...@@ -32,6 +32,7 @@ from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type import Permissions, _dtmldir from Products.ERP5Type import Permissions, _dtmldir
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Globals import DTMLFile from Products.ERP5Type.Globals import DTMLFile
from quopri import encodestring
MEMCACHED_TOOL_MODIFIED_FLAG_PROPERTY_ID = '_v_memcached_edited' MEMCACHED_TOOL_MODIFIED_FLAG_PROPERTY_ID = '_v_memcached_edited'
...@@ -42,14 +43,12 @@ except ImportError: ...@@ -42,14 +43,12 @@ except ImportError:
def encodeKey(key): def encodeKey(key):
""" """
Encode the key. The current encoding is not very good Encode the key like 'Quoted Printable'.
since it is not bijective. Implementing a bijective
encoding is required.
""" """
# Memcached refuses characters which are below ' ' (included) in # According to the memcached's protocol.txt, the key cannot contain
# ascii table. Just strip them here to avoid the raise. # control characters and white spaces.
return ''.join([x for x in key if ord(x) > \ return encodestring(key, True).replace('\n', '').replace('\r', '')
MEMCACHED_MINIMUM_KEY_CHAR_ORD])
memcached_dict_pool = local() memcached_dict_pool = local()
if memcache is not None: if memcache is not None:
# Real memcache tool # Real memcache tool
...@@ -299,6 +298,9 @@ if memcache is not None: ...@@ -299,6 +298,9 @@ if memcache is not None:
plugin_path plugin_path
relative_url of dedicated Memcached Plugin relative_url of dedicated Memcached Plugin
""" """
global_prefix = getattr(self, 'erp5_site_global_id', '')
if global_prefix:
key_prefix = '%s_%s' % (global_prefix, key_prefix)
return SharedDict(self._getMemcachedDict(plugin_path), prefix=key_prefix) return SharedDict(self._getMemcachedDict(plugin_path), prefix=key_prefix)
else: else:
......
...@@ -324,7 +324,7 @@ def getTranslationStringWithContext(self, msg_id, context, context_id): ...@@ -324,7 +324,7 @@ def getTranslationStringWithContext(self, msg_id, context, context_id):
# Globals initialization # Globals initialization
##################################################### #####################################################
from InitGenerator import InitializeDocument from InitGenerator import InitializeDocument, InitializeInteractor, registerInteractorClass
# List Regexp # List Regexp
python_file_expr = re.compile("py$") python_file_expr = re.compile("py$")
...@@ -360,7 +360,7 @@ def updateGlobals(this_module, global_hook, ...@@ -360,7 +360,7 @@ def updateGlobals(this_module, global_hook,
this_module._dtmldir = os.path.join( product_path, 'dtml' ) this_module._dtmldir = os.path.join( product_path, 'dtml' )
# Update PropertySheet Registry # Update PropertySheet Registry
for module_id in ('PropertySheet', 'interfaces', 'Constraint', ): for module_id in ('PropertySheet', 'interfaces', 'Constraint'):
path, module_id_list = getModuleIdList(product_path, module_id) path, module_id_list = getModuleIdList(product_path, module_id)
if module_id == 'PropertySheet': if module_id == 'PropertySheet':
import_method = importLocalPropertySheet import_method = importLocalPropertySheet
...@@ -388,6 +388,12 @@ def updateGlobals(this_module, global_hook, ...@@ -388,6 +388,12 @@ def updateGlobals(this_module, global_hook,
path, module_id_list = getModuleIdList(product_path, 'Document') path, module_id_list = getModuleIdList(product_path, 'Document')
for document in module_id_list: for document in module_id_list:
InitializeDocument(document, document_path=path) InitializeDocument(document, document_path=path)
# Return interactor_class list
path, interactor_id_list = getModuleIdList(product_path, 'Interactor')
for interactor in interactor_id_list:
InitializeInteractor(interactor, interactor_path=path)
return module_id_list + core_module_id_list return module_id_list + core_module_id_list
##################################################### #####################################################
...@@ -573,6 +579,20 @@ def importLocalConstraint(class_id, path = None): ...@@ -573,6 +579,20 @@ def importLocalConstraint(class_id, path = None):
finally: finally:
f.close() f.close()
def importLocalInteractor(class_id, path=None):
import Products.ERP5Type.Interactor
if path is None:
instance_home = getConfiguration().instancehome
path = os.path.join(instance_home, "Interactor")
path = os.path.join(path, "%s.py" % class_id)
f = open(path)
try:
module = imp.load_source(class_id, path, f)
setattr(Products.ERP5Type.Interactor, class_id, getattr(module, class_id))
registerInteractorClass(class_id, getattr(Products.ERP5Type.Interactor, class_id))
finally:
f.close()
def getLocalExtensionList(): def getLocalExtensionList():
if not getConfiguration: if not getConfiguration:
return [] return []
...@@ -807,6 +827,7 @@ def importLocalDocument(class_id, document_path = None): ...@@ -807,6 +827,7 @@ def importLocalDocument(class_id, document_path = None):
import Products.ERP5Type.Document import Products.ERP5Type.Document
import Permissions import Permissions
import Products import Products
if document_path is None: if document_path is None:
instance_home = getConfiguration().instancehome instance_home = getConfiguration().instancehome
path = os.path.join(instance_home, "Document") path = os.path.join(instance_home, "Document")
...@@ -940,6 +961,10 @@ def initializeLocalPropertySheetRegistry(): ...@@ -940,6 +961,10 @@ def initializeLocalPropertySheetRegistry():
def initializeLocalConstraintRegistry(): def initializeLocalConstraintRegistry():
initializeLocalRegistry("Constraint", importLocalConstraint) initializeLocalRegistry("Constraint", importLocalConstraint)
def initializeLocalInteractorRegistry():
initializeLocalRegistry("Interactor", importLocalInteractor)
##################################################### #####################################################
# Product initialization # Product initialization
##################################################### #####################################################
...@@ -948,7 +973,7 @@ def initializeProduct( context, ...@@ -948,7 +973,7 @@ def initializeProduct( context,
this_module, this_module,
global_hook, global_hook,
document_module=None, document_module=None,
document_classes=None, document_classes=None, # XXX - Never used - must be likely removed
object_classes=None, object_classes=None,
portal_tools=None, portal_tools=None,
content_constructors=None, content_constructors=None,
......
# -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. # Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
...@@ -29,8 +30,8 @@ ...@@ -29,8 +30,8 @@
ERP5Type is provides a RAD environment for Zope / CMF ERP5Type is provides a RAD environment for Zope / CMF
All ERP5 classes derive from ERP5Type All ERP5 classes derive from ERP5Type
""" """
# Switch(es) for ongoing development which require single code base # Switch(es) for ongoing development which require single code base
USE_INTERACTOR = False
# Update ERP5 Globals # Update ERP5 Globals
import sys, Permissions, os import sys, Permissions, os
...@@ -95,9 +96,15 @@ def initialize( context ): ...@@ -95,9 +96,15 @@ def initialize( context ):
# We should register local classes at some point # We should register local classes at some point
from Products.ERP5Type.Utils import initializeLocalDocumentRegistry from Products.ERP5Type.Utils import initializeLocalDocumentRegistry
initializeLocalDocumentRegistry() initializeLocalDocumentRegistry()
# Experimental Interactor # We can now setup global interactors
if USE_INTERACTOR: from Products.ERP5Type.InitGenerator import initializeProductInteractorRegistry
import Interactor initializeProductInteractorRegistry()
# And local interactors
from Products.ERP5Type.Utils import initializeLocalInteractorRegistry
initializeLocalInteractorRegistry()
# We can now install all interactors
from Products.ERP5Type.InitGenerator import installInteractorClassRegistry
installInteractorClassRegistry()
from AccessControl.SecurityInfo import allow_module from AccessControl.SecurityInfo import allow_module
from AccessControl.SecurityInfo import ModuleSecurityInfo from AccessControl.SecurityInfo import ModuleSecurityInfo
......
# -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. # Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
...@@ -476,6 +477,7 @@ def updateRoleMappingsFor(self, ob): ...@@ -476,6 +477,7 @@ def updateRoleMappingsFor(self, ob):
roles = [] roles = []
refused_roles = [] refused_roles = []
role_type = 'list' role_type = 'list'
other_role_type_list = []
if sdef.permission_roles is not None: if sdef.permission_roles is not None:
roles = sdef.permission_roles.get(p, roles) roles = sdef.permission_roles.get(p, roles)
if type(roles) is type(()): if type(roles) is type(()):
...@@ -487,14 +489,17 @@ def updateRoleMappingsFor(self, ob): ...@@ -487,14 +489,17 @@ def updateRoleMappingsFor(self, ob):
if p in other_workflow.permissions: if p in other_workflow.permissions:
other_roles = other_sdef.permission_roles.get(p, []) other_roles = other_sdef.permission_roles.get(p, [])
if type(other_roles) is type(()) : if type(other_roles) is type(()) :
role_type = 'tuple' other_role_type_list.append('tuple')
else:
other_role_type_list.append('list')
for role in roles: for role in roles:
if role not in other_roles : if role not in other_roles :
refused_roles.append(role) refused_roles.append(role)
for role in refused_roles : for role in refused_roles :
if role in roles : if role in roles :
roles.remove(role) roles.remove(role)
if role_type=='tuple': if role_type == 'tuple' and ((not other_role_type_list) or ('list' not in other_role_type_list)):
#If at least, one of other workflows manage security and for all are role_type are tuple
roles = tuple(roles) roles = tuple(roles)
if modifyRolesForPermission(ob, p, roles): if modifyRolesForPermission(ob, p, roles):
changed = 1 changed = 1
......
# This package contains transforms for PortalTransforms.
# It does not have to be imported by ZopePatch, instead, erp5_crm business
# template contains a portal_transform configured to use thoses transforms.
# This is taken from PortalTransforms product
#
# Copyright (c) 2002-2003, Benjamin Saller <bcsaller@ideasuite.com>, and
# the respective authors.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Archetypes nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
from Products.PortalTransforms.libtransforms.retransform import retransform
class html_to_text(retransform):
inputs = ('text/html',)
output = 'text/plain'
def register():
# XXX convert entites with htmlentitydefs.name2codepoint ?
return html_to_text("html_to_text",
('<script [^>]>.*</script>(?im)', ''),
('<style [^>]>.*</style>(?im)', ''),
('<head [^>]>.*</head>(?im)', ''),
# added for ERP5, we want to transform <br/> in newlines
('<br\s*/?>(?im)', '\n'),
('(?im)<(h[1-6r]|address|p|ul|ol|dl|pre|div|center|blockquote|form|isindex|table)(?=\W)[^>]*>', ' '),
('<[^>]*>(?i)(?m)', ''),
)
...@@ -211,6 +211,10 @@ class ERP5TypeTestCase(PortalTestCase): ...@@ -211,6 +211,10 @@ class ERP5TypeTestCase(PortalTestCase):
This TestCase setups an ERP5Site and installs business templates. This TestCase setups an ERP5Site and installs business templates.
""" """
def shortDescription(self):
doc = self._TestCase__testMethodDoc
return doc and str(self) + ', ' + doc.split("\n")[0].strip() or None
def dummy_test(self): def dummy_test(self):
ZopeTestCase._print('All tests are skipped when --save option is passed ' ZopeTestCase._print('All tests are skipped when --save option is passed '
'with --update_business_templates or without --load') 'with --update_business_templates or without --load')
......
...@@ -245,6 +245,28 @@ class TestSessionTool(ERP5TypeTestCase): ...@@ -245,6 +245,28 @@ class TestSessionTool(ERP5TypeTestCase):
# session should be an emty dic as it expired # session should be an emty dic as it expired
self.assert_(session == {}) self.assert_(session == {})
def stepTestCheckSessionAfterNewPerson(self, sequence=None, \
sequence_list=None, **kw):
""" Test if session still the same after create new person setting the
reference. """
session = self.portal.portal_sessions[self.session_id]
session.clear()
session['key'] = 'value'
self.getPortal().person_module.newContent(portal_type='Person',
default_address_city='test',
default_address_region='test',
default_address_street_address='test',
default_email_text='test@test.com',
default_fax_text='123456789',
first_name='test',
last_name='test',
password='secret',
reference='test')
session = self.portal.portal_sessions[self.session_id]
self.assertEquals(session.get('key'), 'value')
def test_01_CheckSessionTool(self, quiet=0, run=run_all_test): def test_01_CheckSessionTool(self, quiet=0, run=run_all_test):
""" Create portal_sessions tool and needed cache factory. """ """ Create portal_sessions tool and needed cache factory. """
if not run: if not run:
...@@ -274,6 +296,7 @@ class TestSessionTool(ERP5TypeTestCase): ...@@ -274,6 +296,7 @@ class TestSessionTool(ERP5TypeTestCase):
stepTestSessionGetattr \ stepTestSessionGetattr \
stepTestSessionBulkStorage \ stepTestSessionBulkStorage \
stepTestSessionExpire \ stepTestSessionExpire \
stepTestCheckSessionAfterNewPerson \
' '
sequence_list.addSequenceString(sequence_string) sequence_list.addSequenceString(sequence_string)
sequence_list.play(self) sequence_list.play(self)
...@@ -297,6 +320,7 @@ class TestSessionTool(ERP5TypeTestCase): ...@@ -297,6 +320,7 @@ class TestSessionTool(ERP5TypeTestCase):
stepTestSessionGetattr \ stepTestSessionGetattr \
stepTestSessionBulkStorage \ stepTestSessionBulkStorage \
stepTestSessionExpire \ stepTestSessionExpire \
stepTestCheckSessionAfterNewPerson \
' '
sequence_list.addSequenceString(sequence_string) sequence_list.addSequenceString(sequence_string)
sequence_list.play(self) sequence_list.play(self)
......
...@@ -23,6 +23,7 @@ modules = [ ...@@ -23,6 +23,7 @@ modules = [
'html_to_text', # re based transform 'html_to_text', # re based transform
'text_to_html', # wrap text in a verbatim env 'text_to_html', # wrap text in a verbatim env
'text_pre_to_html', # wrap text into a pre 'text_pre_to_html', # wrap text into a pre
'png_to_text',
'pdf_to_html', # sf.net/projects/pdftohtml 'pdf_to_html', # sf.net/projects/pdftohtml
'pdf_to_text', # www.foolabs.com/xpdf 'pdf_to_text', # www.foolabs.com/xpdf
'rtf_to_html', # sf.net/projects/rtf-converter 'rtf_to_html', # sf.net/projects/rtf-converter
...@@ -35,6 +36,7 @@ modules = [ ...@@ -35,6 +36,7 @@ modules = [
'image_to_tiff', # transforms any image to a TIFF image 'image_to_tiff', # transforms any image to a TIFF image
'image_to_bmp', # transforms any image to a BMP image 'image_to_bmp', # transforms any image to a BMP image
'lynx_dump', # lynx -dump 'lynx_dump', # lynx -dump
'w3m dump',
'python', # python source files, no dependancies 'python', # python source files, no dependancies
'identity', # identity transform, no dependancies 'identity', # identity transform, no dependancies
] ]
......
...@@ -10,6 +10,10 @@ def register(): ...@@ -10,6 +10,10 @@ def register():
('<script [^>]>.*</script>(?im)', ''), ('<script [^>]>.*</script>(?im)', ''),
('<style [^>]>.*</style>(?im)', ''), ('<style [^>]>.*</style>(?im)', ''),
('<head [^>]>.*</head>(?im)', ''), ('<head [^>]>.*</head>(?im)', ''),
# added for ERP5, we want to transform <br/> in newlines
('<br\s*/?>(?im)', '\n'),
('(?im)<(h[1-6r]|address|p|ul|ol|dl|pre|div|center|blockquote|form|isindex|table)(?=\W)[^>]*>', ' '), ('(?im)<(h[1-6r]|address|p|ul|ol|dl|pre|div|center|blockquote|form|isindex|table)(?=\W)[^>]*>', ' '),
('<[^>]*>(?i)(?m)', ''), ('<[^>]*>(?i)(?m)', ''),
) )
from Products.PortalTransforms.interfaces import itransform from Products.PortalTransforms.interfaces import itransform
from StringIO import StringIO
import PIL.Image
from Products.PortalTransforms.libtransforms.commandtransform \ from Products.PortalTransforms.libtransforms.commandtransform \
import popentransform import popentransform
import os import os
import sys
import tempfile import tempfile
from zope.interface import implements from zope.interface import implements
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
# #
############################################################################## ##############################################################################
import os
from Products.PortalTransforms.interfaces import itransform from Products.PortalTransforms.interfaces import itransform
from Products.PortalTransforms.libtransforms.commandtransform import popentransform from Products.PortalTransforms.libtransforms.commandtransform import popentransform
from zope.interface import implements from zope.interface import implements
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment