Commit ebbf73db authored by Łukasz Nowak's avatar Łukasz Nowak

Merge remote-tracking branch 'origin/master' into interaction-drop

Conflicts:
	bt5/erp5_promise/PathTemplateItem/portal_alarms/promise_conversion_server.xml
	bt5/erp5_promise/PathTemplateItem/portal_alarms/promise_install_bt5.xml
	bt5/erp5_promise/PathTemplateItem/portal_alarms/promise_kumofs_server.xml
	bt5/erp5_promise/PathTemplateItem/portal_alarms/promise_mailhost_configuration.xml
	bt5/erp5_promise/PathTemplateItem/portal_alarms/promise_memcached_server.xml
	bt5/erp5_promise/PathTemplateItem/portal_alarms/promise_template_tool_configuration.xml
	bt5/erp5_promise/SkinTemplateItem/portal_skins/erp5_promise/Alarm_checkPromiseMailServer.xml
	bt5/erp5_promise/bt/description
	bt5/erp5_promise/bt/revision
	product/ERP5/ERP5Site.py
parents 70ffb3f0 39125bfe
Changes
=======
0.4.6 (2012-08-10)
------------------
* erp5.util.taskdistribution:
- set socket timeout for RPC calls to prevent a deadlock happens.
[Rafael Monnerat]
0.4.5 (2012-07-04)
------------------
......
......@@ -65,7 +65,6 @@ configuration_save.addConfigurationItem("Permission Configurator Item",\n
\n
# Create ERP5Site_getSecurityCategoryMapping\n
configuration_save.addConfigurationItem("Security Category Mapping Configurator Item")\n
</string> </value>
</item>
<item>
......
......@@ -221,7 +221,7 @@
Tips: <br>\n
<br>\n
<li> You can use this sample file <a href="consulting_configurator_sample_categories.ods"> Consulting.Configurator.Sample.Categories.ods </a></li>
<li> You can use this sample file <a href="standard_category.ods"> Standard Configurator Categories </a></li>
]]></string> </value>
</item>
......
639
\ No newline at end of file
640
\ No newline at end of file
......@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key>
<value> <string>global</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string>Sale Opportunities to Validate (%(count)s)</string> </value>
......@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[
sale_opportunity_module/view?simulation_state=draft&local_roles=Owner
sale_opportunity_module?reset:int=1&simulation_state=draft&local_roles=Owner
]]></string> </value>
</item>
......@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=draft&local_roles=Owner
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
......@@ -67,10 +68,7 @@ sale_opportunity_module/view?simulation_state=draft&local_roles=Owner
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
......
......@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key>
<value> <string>global</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string>Submitted Sale Opportunities to Validate (%(count)s)</string> </value>
......@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[
sale_opportunity_module/view?simulation_state=submitted&local_roles=Assignor
sale_opportunity_module?reset:int=1&simulation_state=submitted&local_roles=Assignor
]]></string> </value>
</item>
......@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=submitted&local_roles=Assignor
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
......@@ -67,10 +68,7 @@ sale_opportunity_module/view?simulation_state=submitted&local_roles=Assignor
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
......
......@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key>
<value> <string>global</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string>Sale Opportunities to Qualify (%(count)s)</string> </value>
......@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[
sale_opportunity_module/view?simulation_state=contacted&local_roles:list=Assignee&local_roles:list=Assignor
sale_opportunity_module?reset:int=1&simulation_state=contacted&local_roles:list=Assignee&local_roles:list=Assignor
]]></string> </value>
</item>
......@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=contacted&local_roles:list=Assigne
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
......@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=contacted&local_roles:list=Assigne
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
......
......@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key>
<value> <string>global</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string>Offers to Send (%(count)s)</string> </value>
......@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[
sale_opportunity_module/view?simulation_state=enquired&local_roles:list=Assignee&local_roles:list=Assignor
sale_opportunity_module?reset:int=1&simulation_state=enquired&local_roles:list=Assignee&local_roles:list=Assignor
]]></string> </value>
</item>
......@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=enquired&local_roles:list=Assignee
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
......@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=enquired&local_roles:list=Assignee
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
......
......@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key>
<value> <string>global</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string>Pending Offers (%(count)s)</string> </value>
......@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[
sale_opportunity_module/view?simulation_state=offered&local_roles:list=Assignee&local_roles:list=Assignor
sale_opportunity_module?reset:int=1&simulation_state=offered&local_roles:list=Assignee&local_roles:list=Assignor
]]></string> </value>
</item>
......@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=offered&local_roles:list=Assignee&
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
......@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=offered&local_roles:list=Assignee&
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
......
596
\ No newline at end of file
597
\ No newline at end of file
......@@ -97,7 +97,7 @@
<string>link</string>
</tuple>
<tuple>
<string>description</string>
<string>DiscussionPost_getDescription</string>
<string>description</string>
</tuple>
<tuple>
......
......@@ -121,6 +121,10 @@
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>reference</string>
<string>Reference</string>
</tuple>
<tuple>
<string>translated_validation_state_title</string>
<string>State</string>
......@@ -140,6 +144,10 @@
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>reference</string>
<string>Reference</string>
</tuple>
<tuple>
<string>agent_value</string>
<string>Related</string>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</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 context.getTextContent()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>DiscussionPost_getDescription</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
115
\ No newline at end of file
116
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
2012-07-30 Kazuhiko
* jQuery Core 1.7.2.
2011-12-01 Kazuhiko
* jQuery Core 1.7.1.
......
This Business Template contains jQuery Core.
Current version is jQuery 1.7.1.
\ No newline at end of file
Current version is jQuery 1.7.2.
\ No newline at end of file
14
\ No newline at end of file
15
\ No newline at end of file
......@@ -12,7 +12,7 @@
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts31202676.8</string> </value>
<value> <string>ts43624880.19</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......@@ -24,8 +24,9 @@
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEWqqqoRfvv5AAAAD0lEQVQY
GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAXElEQVRo3u3OMQ0AAAgDsPmXMpNg
g5Ae/Zu2c1kEBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF
BQUFBQUFBQUFBQUFvwQXQyiz05YjDDkAAAAASUVORK5CYII=</string> </value>
</item>
<item>
<key> <string>height</string> </key>
......@@ -37,7 +38,7 @@ GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>87</int> </value>
<value> <int>149</int> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -12,7 +12,7 @@
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts31202666.15</string> </value>
<value> <string>ts43624890.48</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......@@ -24,8 +24,9 @@
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEXj6vr1J1NHAAAAD0lEQVQY
GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAGDY0LsAAAAZ0lEQVRo3u3OoQ0AMAhFQfZfs44R
alqPwBNOYMjPy8XJ++qFp2f7NDQ0NDRcOhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUHBkEBAQEBAQE
BAQEBAQEBAQEBAQEBAQEBAQEBAQEBARcAfxPn/knx13hBgAAAABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>height</string> </key>
......@@ -37,7 +38,7 @@ GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>87</int> </value>
<value> <int>160</int> </value>
</item>
<item>
<key> <string>title</string> </key>
......
......@@ -12,7 +12,7 @@
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts26730022.12</string> </value>
<value> <string>ts43624907.99</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......@@ -24,9 +24,9 @@
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAQ0lEQVQ4je3PoQ2AQABD0f+7/4oM
gEZwCjAcigEIqXlJm1SUZR1nAEopv2XbDyIQnV0CiZLIJDP6dOq9jX7hTCnljQtFvQnqrH32ZgAA
AABJRU5ErkJggg==</string> </value>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAAEYXzpNAAAAZElEQVQ4y+3UOw6AIBgD4N7/dGqM
McYHiBjxsQK61MUr6D/g8u1Nm6JzkZAiU55ol0jY4/oa0eSl8cS4n+klF6XQnqhtIIZVZnVSpNt5
uuTKP5OvpkA0cyB6Fwm9RcIIvc/Pi9yoJuFbfrTHoAAAAABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>height</string> </key>
......@@ -38,7 +38,7 @@ AABJRU5ErkJggg==</string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>124</int> </value>
<value> <int>157</int> </value>
</item>
<item>
<key> <string>title</string> </key>
......
2012-07-30 Kazuhiko
* jquery-ui 1.8.22.
2012-03-08 Kazuhiko
* jquery-ui 1.8.18.
......
This Business Template contains only static files of jQuery UI.
Current version is jquery-ui-1.8.18.
Current version is jquery-ui-1.8.22.
18
\ No newline at end of file
19
\ No newline at end of file
......@@ -1350,6 +1350,12 @@ button.formbt > span{\n
.page ul li {\n
list-style: square outside none;\n
}\n
\n
/* contained inside content area images should be re-sized to fit in */\n
.content img {\n
max-width: 720px;\n
}\n
\n
</tal:block>
]]></unicode> </value>
......
1870
\ No newline at end of file
1871
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>global</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>check_site_consistency</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.6</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Check Site Consistency</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/ERP5Site_viewCheckConsistency?reset:int=1</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -39,7 +39,9 @@
<item>
<key> <string>periodicity_hour</string> </key>
<value>
<tuple/>
<tuple>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -39,7 +39,9 @@
<item>
<key> <string>periodicity_hour</string> </key>
<value>
<tuple/>
<tuple>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -39,7 +39,9 @@
<item>
<key> <string>periodicity_hour</string> </key>
<value>
<tuple/>
<tuple>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -39,7 +39,9 @@
<item>
<key> <string>periodicity_hour</string> </key>
<value>
<tuple/>
<tuple>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -39,7 +39,9 @@
<item>
<key> <string>periodicity_hour</string> </key>
<value>
<tuple/>
<tuple>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -39,7 +39,9 @@
<item>
<key> <string>periodicity_hour</string> </key>
<value>
<tuple/>
<tuple>
<int>0</int>
</tuple>
</value>
</item>
<item>
......
......@@ -54,7 +54,6 @@
\n
portal = context.getPortalObject()\n
mailhost = portal.MailHost\n
portal_preferences = portal.portal_preferences\n
promise_url = portal.getPromiseParameter(\'external_service\', \'smtp_url\')\n
\n
if promise_url is None:\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</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 encoding="cdata"><![CDATA[
process_list = context.Alarm_getReportResultList()\n
if len(process_list) > 0:\n
return "%s (%s)" % (process_list[0].summary, process_list[0].detail)\n
\n
return "Unknown"\n
]]></string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Alarm_getLastActiveMessageText</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</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>"""\n
"""\n
N_ = context.Base_translateString\n
if len(uids):\n
for alarm in context.portal_alarms.searchFolder(uid=uids):\n
alarm.solve()\n
# Invoke activiveSense a bit later\n
alarm.activate().activeSense()\n
portal_status_message = N_("Site Configuration is going to be fixed by Activities.")\n
else:\n
portal_status_message = N_("No Site Configuration fix was request.")\n
\n
if enable_alarm:\n
updated = False\n
for alarm in context.portal_alarms.searchFolder(id="promise_%"):\n
if not alarm.getEnabled():\n
alarm.setEnabled(1)\n
updated = True\n
if updated:\n
portal_status_message += N_("Consistency Check information will be periodically updated.")\n
\n
form_id = context.REQUEST.get("form_id", "")\n
\n
return context.Base_redirect(form_id, \n
keep_items=dict(portal_status_message=portal_status_message))\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>enable_alarm=True, uids=[], **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ERP5Site_fixConfigurationConsistency</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</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>alarm_tool = context.getPortalObject().portal_alarms\n
kw["id"] = "promise_%"\n
\n
alarm_list = []\n
for alarm in alarm_tool.searchFolder(**kw):\n
alarm.activeSense()\n
if alarm.sense():\n
alarm_list.append(alarm)\n
\n
return alarm_list\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ERP5Site_getPromiseAlarmList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</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>alarm_tool = context.getPortalObject().portal_alarms\n
N_ = context.Base_translateString\n
\n
for alarm in alarm_tool.searchFolder(id="promise_%"):\n
alarm.activeSense()\n
\n
portal_status_message = N_("Promises are been reloaded via activities, please wait for background activities finish.")\n
return context.Base_redirect("ERP5Site_viewCheckConsistency", \n
keep_items=dict(reset=1, \n
portal_status_message=portal_status_message))\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ERP5Site_updateConfigurationConsistency</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/>
</pickle>
<pickle>
<dictionary>
<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/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string>ERP5Site_fixConfigurationConsistency</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string>application/x-www-form-urlencoded</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>listbox</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list>
<string>your_enable_alarm</string>
</list>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list>
<string>your_information</string>
</list>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ERP5Site_viewCheckConsistency</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>ERP5Site_viewCheckConsistency</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_dialog</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Fix Site Configuration</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string>ERP5Site_updateConfigurationConsistency</string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string>Force Reload Promises</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>columns</string>
<string>count_method</string>
<string>list_method</string>
<string>selection_name</string>
<string>sort</string>
<string>title</string>
</list>
</value>
</item>
<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>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>all_editable_columns</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>columns</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>Title</string>
</tuple>
<tuple>
<string>Alarm_getLastActiveMessageText</string>
<string>Configuration Status</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>count_method</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_list_mode_listbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>list_method</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>selection_name</string> </key>
<value> <string>erp5_site_check_consistency_selection</string> </value>
</item>
<item>
<key> <string>sort</string> </key>
<value>
<list>
<tuple>
<string>title</string>
<string>descending</string>
</tuple>
</list>
</value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Site Configuration Problems</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Method" module="Products.Formulator.MethodField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>method_name</string> </key>
<value> <string>ERP5Site_getPromiseAlarmList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>default</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>your_enable_alarm</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>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>default</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_checkbox</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewFieldLibrary</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Do you want to enable Periodical Check?</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
2012-07-17 rafael
* Initial Release
\ No newline at end of file
Copyright (c) 2012 Nexedi SA
\ No newline at end of file
erp5_core
\ No newline at end of file
Provide automated ERP5 configuration.
\ No newline at end of file
Provide automated ERP5 setup configuration.
\ No newline at end of file
GPL
\ No newline at end of file
rafael
romain
\ No newline at end of file
9
\ No newline at end of file
17
\ No newline at end of file
portal_actions | check_site_consistency
\ No newline at end of file
......@@ -72,7 +72,7 @@ for result in result_list:\n
if strict_check_mode and method() != kw[key]:\n
raise RuntimeError, "One property is not the same that you wanted : you asked \'%s\' and expecting \'%s\' but get \'%s\'" % (key, kw[key], method())\n
# check that every object are owner by you\n
if strict_check_mode and object.Base_getOwnerId() not in [owner_id, functional_test_username, \'System Processes\', functional_another_test_username]:\n
if strict_check_mode and object.Base_getOwnerId() not in [owner_id, functional_test_username, \'System Processes\',\'zope\', functional_another_test_username]:\n
raise RuntimeError, "You have try to clean an item who haven\'t you as owner : %s is owned by %s and you are %s" % \\\n
(object.getTitle(), object.Base_getOwnerId(), owner_id)\n
\n
......
......@@ -97,6 +97,7 @@ return {\'now\': DateTime(),\n
\'sale_howto_currency_title\': \'Euro\',\n
\'sale_howto_currency_tag\': \'EUR\',\n
\'sale_howto_product_reference\': \'ZUITE-TEST-SALEORDER-RL01\',\n
\'sale_howto_trade_condition_title\': \'ZUITE-TEST-SALE-TRADE-CONDITION-001\',\n
\'campaign_howto_person_title\': \'ZUITE-TEST-CAMPAIGN-PERSON-SUPERVISOR\',\n
\'campaign_howto_person2_title\': \'ZUITE-TEST-CAMPAIGN-PERSON-OPERATION-MANAGER\',\n
\'campaign_howto_organisation_title\': \'ZUITE-TEST-CAMPAIGN-ORGANISATION-001\',\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</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>if clean:\n
context.Zuite_tearDownSaleTradeConditionTest()\n
\n
portal = context.getPortalObject()\n
howto_dict = context.Zuite_getHowToInfo()\n
isTransitionPossible = portal.portal_workflow.isTransitionPossible\n
\n
# check if there is already the euro curency on the instance\n
currency = context.portal_catalog.getResultValue(portal_type=\'Currency\',\n
title=howto_dict[\'sale_howto_currency_title\'])\n
\n
if currency is None:\n
currency = portal.currency_module.newContent(portal_type=\'Currency\',\n
title=howto_dict[\'sale_howto_currency_title\'],\n
reference=howto_dict[\'sale_howto_currency_tag\'],\n
id=howto_dict[\'sale_howto_currency_tag\'],\n
base_unit_quantity=0.01)\n
\n
if isTransitionPossible(currency, \'validate\'):\n
currency.validate()\n
\n
my_organisation = portal.organisation_module.newContent(portal_type=\'Organisation\',\n
title=howto_dict[\'sale_howto_organisation_title\'],\n
corporate_name=howto_dict[\'sale_howto_organisation_title\'])\n
my_organisation.setRole(\'supplier\')\n
my_organisation.setGroup(\'my_group\')\n
my_organisation.validate()\n
\n
organisation = portal.organisation_module.newContent(portal_type=\'Organisation\',\n
title=howto_dict[\'sale_howto_organisation2_title\'],\n
corporate_name=howto_dict[\'sale_howto_organisation2_title\'])\n
organisation.validate()\n
\n
person = portal.person_module.newContent(portal_type=\'Person\',\n
title=howto_dict[\'sale_howto_person_title\'],\n
career_subordination_title=howto_dict[\'sale_howto_organisation_title\'])\n
person.validate()\n
\n
pref = getattr(context.portal_preferences, howto_dict[\'howto_preference_id\'], None)\n
if pref is None:\n
pref = context.portal_preferences.newContent(portal_type="Preference",\n
id=howto_dict[\'howto_preference_id\'])\n
pref.setPreferredAccountingTransactionSectionCategory(\'group/my_group\')\n
if isTransitionPossible(pref, \'enable\'):\n
pref.enable()\n
\n
pref.setPreferredAccountingTransactionSourceSection(my_organisation.getRelativeUrl())\n
\n
# Disabling save form warning\n
# this is bad but needed quickly to disable save form warning \n
pref.setPreferredHtmlStyleUnsavedFormWarning(False)\n
\n
# Clear cache\n
portal.portal_caches.clearAllCache()\n
\n
return "Init Ok"\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>clean=True</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Zuite_setUpSaleTradeConditionTest</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</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>portal = context.getPortalObject()\n
howto_dict = context.Zuite_getHowToInfo()\n
\n
# remove the currency if it was created by us before\n
currency = context.portal_catalog.getResultValue(portal_type=\'Currency\',\n
title=howto_dict[\'sale_howto_currency_title\'],\n
local_roles = \'Owner\')\n
if currency is not None:\n
context.currency_module.deleteContent(currency.getId())\n
\n
# remove the organisation of the test if existing\n
organisation_list = context.Zuite_checkPortalCatalog(portal_type=\'Organisation\', max_count=1,\n
title=howto_dict[\'sale_howto_organisation_title\'])\n
if organisation_list is not None:\n
portal.organisation_module.deleteContent(organisation_list[0].getId())\n
\n
# remove the second organisation of the test if existing\n
organisation_list2 = context.Zuite_checkPortalCatalog(portal_type=\'Organisation\', max_count=1,\n
title=howto_dict[\'sale_howto_organisation2_title\'])\n
if organisation_list2 is not None:\n
portal.organisation_module.deleteContent(organisation_list2[0].getId())\n
\n
# remove the organisation of the test if existing\n
person_list = context.Zuite_checkPortalCatalog(portal_type=\'Person\', max_count=1,\n
title=howto_dict[\'sale_howto_person_title\'])\n
if person_list is not None:\n
portal.person_module.deleteContent(person_list[0].getId())\n
\n
# remove related sale packing list and sale order\n
sale_order_list = context.Zuite_checkPortalCatalog(portal_type=\'Sale Order\', max_count=1,\n
title=howto_dict[\'sale_howto_product_title\'])\n
if sale_order_list is not None:\n
for applied_rule in sale_order_list[0].getCausalityRelatedValueList(portal_type=\'Applied Rule\'):\n
applied_rule.getParentValue().deleteContent(applied_rule.getId())\n
portal.sale_order_module.deleteContent(sale_order_list[0].getId())\n
\n
# remove related sale packing list and sale order\n
sale_trade_condition_list = context.Zuite_checkPortalCatalog(portal_type=\'Sale Trade Condition\', max_count=1,\n
title=howto_dict[\'sale_howto_trade_condition_title\'])\n
if sale_trade_condition_list is not None:\n
portal.sale_trade_condition_module.deleteContent(sale_trade_condition_list[0].getId())\n
\n
\n
pref = getattr(context.portal_preferences, howto_dict[\'howto_preference_id\'], None)\n
if pref is not None:\n
context.portal_preferences.deleteContent(howto_dict[\'howto_preference_id\'])\n
\n
portal.portal_caches.clearAllCache()\n
\n
return "Clean Ok"\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Zuite_tearDownSaleTradeConditionTest</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -50,8 +50,7 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>
preference_tool = context.getPortalObject().portal_preferences\n
<value> <string>preference_tool = context.getPortalObject().portal_preferences\n
\n
preference = preference_tool.getActivePreference()\n
\n
......
30-06-2012 rafael
- Included Trade Condition related scripts
30-04-2012 rafael
- Major change, Tests were merged with the tutorials.
28-03-2011 lucas
- Replaced the email for a valid one.
......
TODO:
- testHowToSaleOrder must be refactored to use new simulation.
\ No newline at end of file
This bt5 contains no tests, all tests are part of the documentation.
\ No newline at end of file
Copyright 2010, Nexedi SA
\ No newline at end of file
Copyright 2010-2012, Nexedi SA
\ No newline at end of file
This contains zelenium tests for user Tutorials instances.
\ No newline at end of file
This contains scripts related to the users tutorials.
\ No newline at end of file
rafael
lucas
\ No newline at end of file
rafael
\ No newline at end of file
787
\ No newline at end of file
788
\ No newline at end of file
......@@ -9,8 +9,8 @@ portal_categories/gender/female
portal_categories/gender/male
portal_categories/group/my_group
portal_categories/incoterm/cpt
portal_categories/nationality/french
portal_categories/marital_status/married
portal_categories/nationality/french
portal_categories/order/normal
portal_categories/payment_mode/credit_card
portal_categories/quantity_unit/time
......
......@@ -63,6 +63,11 @@
verified and opened by administrator first\n
- you need to adjust group, function and site to your needs\n
"""\n
\n
# since the following code is just an example, we simply raise an exception so that\n
# it is not executed actually.\n
raise NotImplementedError\n
\n
from Products.Formulator.Errors import ValidationError, FormValidationError\n
portal = context.getPortalObject()\n
translateString = context.Base_translateString\n
......
1088
\ No newline at end of file
1089
\ No newline at end of file
......@@ -51,6 +51,10 @@
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>State</string> </value>
</item>
</dictionary>
</pickle>
</record>
......
......@@ -68,6 +68,10 @@
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Variable</string> </value>
</item>
</dictionary>
</pickle>
</record>
......
......@@ -68,6 +68,10 @@
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Transition</string> </value>
</item>
</dictionary>
</pickle>
</record>
......
......@@ -51,6 +51,10 @@
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Variable</string> </value>
</item>
</dictionary>
</pickle>
</record>
......
......@@ -67,6 +67,10 @@
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Workflow</string> </value>
</item>
</dictionary>
</pickle>
</record>
......
Copyright (c) 2008-2012 Nexedi SA
\ No newline at end of file
erp5_base
\ No newline at end of file
GPL
\ No newline at end of file
rafael
\ No newline at end of file
35
\ No newline at end of file
37
\ No newline at end of file
......@@ -60,9 +60,9 @@
<!-- <span tal:replace="structure python: getattr(here.gadgets.form, field_type).gadget(field_name=field_name)"/> -->\n
\n
<!-- XXX: render gadget asynchronously -->\n
<div tal:attributes="gadget string:gadgets/form/${field_type}/gadget?field_name=${field_name};\n
<div tal:attributes="data-gadget string:gadgets/form/${field_type}/gadget?field_name=${field_name};\n
id string:${form_id}_${field_name};\n
gadget:property string: {&quot;cacheable&quot;: &quot;1&quot;, &quot;cache_id&quot;: &quot;${form_id}_${field_name}&quot;}"></div>\n
data-gadget:property string: {&quot;cacheable&quot;: &quot;1&quot;, &quot;cache_id&quot;: &quot;${form_id}_${field_name}&quot;}"></div>\n
\n
</div>\n
</div>\n
......
......@@ -8,7 +8,7 @@
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts37261735.49</string> </value>
<value> <string>ts45811421.8</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......
......@@ -89,10 +89,10 @@
\n
<!--Form render goes here -->\n
<div id="form_gadget"\n
tal:attributes="gadget string:${current_form_id}/Form_asRenderJSGadget;\n
gadget:data-source string:Form_asJSON?form_id=${current_form_id};\n
gadget:data-handler string:ERP5Form.update;\n
gadget:property string: {&quot;cacheable&quot;: &quot;1&quot;, &quot;cache_id&quot;: &quot;${current_form_id}&quot;}">\n
tal:attributes="data-gadget string:${current_form_id}/Form_asRenderJSGadget;\n
data-gadget:data-source string:Form_asJSON?form_id=${current_form_id};\n
data-gadget:data-handler string:ERP5Form.update;\n
data-gadget:property string: {&quot;cacheable&quot;: &quot;1&quot;, &quot;cache_id&quot;: &quot;${current_form_id}&quot;}">\n
</div>\n
\n
</div>\n
......
......@@ -71,8 +71,8 @@
\074script src="erp5_form.js"\076\074/script\076\n
\n
\074div id="content"\n
gadget="gadgets/content/gadget"\n
tal:attributes="gadget string:gadgets/tabular_gadget/gadget?object_path=${object_path}\046current_form_id=${form_id}"\076\074/div\076\n
data-gadget="gadgets/content/gadget"\n
tal:attributes="data-gadget string:gadgets/tabular_gadget/gadget?object_path=${object_path}\046current_form_id=${form_id}"\076\074/div\076\n
\n
\074script type="text/javascript" language="javascript"\076\n
//\074![CDATA[\n
......
8
\ No newline at end of file
9
\ No newline at end of file
......@@ -95,16 +95,22 @@ def patchRPCParser(error_handler):
parser_klass.feed = verbose_feed
class RPCRetry(object):
def __init__(self, proxy, retry_time, logger):
def __init__(self, proxy, retry_time, logger, timeout=120):
super(RPCRetry, self).__init__()
self._proxy = proxy
self._retry_time = retry_time
self._logger = logger
self.__rpc_lock = threading.Lock()
self.timeout = timeout
def _RPC(self, func_id, args=()):
with self.__rpc_lock:
return getattr(self._proxy, func_id)(*args)
default_timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(self.timeout)
try:
with self.__rpc_lock:
return getattr(self._proxy, func_id)(*args)
finally:
socket.setdefaulttimeout(default_timeout)
def _retryRPC(self, func_id, args=()):
retry_time = self._retry_time
......@@ -141,29 +147,32 @@ class TestResultLineProxy(RPCRetry):
def stop(self, test_count=None, error_count=None, failure_count=None,
skip_count=None, duration=None, date=None, command=None,
stdout=None, stderr=None, html_test_result=None):
stdout=None, stderr=None, html_test_result=None, **kw):
"""
Notify server of test completion.
Without any parameter, notifies of a test failure which prevents any
precise reading (step count, how many succeeded, etc).
BBB: extra named arguments are deprecated (if some are really needed,
they must be declared as explicit parameters, with proper default
value).
"""
status_dict = {
'test_count': test_count,
'error_count': error_count,
'failure_count': failure_count,
'skip_count': skip_count,
'duration': duration,
'date': date,
}
if command is not None:
status_dict['command'] = command
if stdout is not None:
status_dict['stdout'] = stdout
if stderr is not None:
status_dict['stderr'] = stderr
if html_test_result is not None:
status_dict['html_test_result'] = html_test_result
status_dict = dict(x for x in (
('test_count', test_count),
('error_count', error_count),
('failure_count', failure_count),
('skip_count', skip_count),
('duration', duration),
('date', date),
('command', command),
('stdout', stdout),
('stderr', stderr),
('html_test_result', html_test_result),
) if x[1] is not None)
if kw:
self._logger.info('Extra parameters provided: %r', kw)
status_dict.update(kw)
self._retryRPC('stopUnitTest', (self._test_result_line_path,
status_dict))
......
......@@ -36,7 +36,7 @@ import urllib
from urlparse import urljoin
from z3c.etestbrowser.browser import ExtendedTestBrowser
from zope.testbrowser.browser import onlyOne
from zope.testbrowser.browser import onlyOne, fix_exception_name
def measurementMetaClass(prefix):
"""
......@@ -424,9 +424,15 @@ class Browser(ExtendedTestBrowser):
@raise LookupError: Not found
"""
try:
return self.etree.xpath('//div[@id="transition_message"]')[0].text
transition_message = self.etree.xpath(
'//div[@id="transition_message"]')[0].text
except IndexError:
raise LookupError("Cannot find div with ID 'transition_message'")
else:
if isinstance(transition_message, unicode):
transition_message = transition_message.encode('utf-8')
return transition_message
def getInformationArea(self):
"""
......@@ -987,7 +993,7 @@ class ContextMainForm(MainForm):
maximum_attempt_number=1,
sleep_between_attempt=0,
dialog_name=None,
dialog_expected_transition_message=None,
expected_transition_message=None,
**kw):
"""
Select and submit a workflow action, given either by its label
......@@ -1022,8 +1028,8 @@ class ContextMainForm(MainForm):
@type sleep_between_attempt: int
@param dialog_name: Function to call after the workflow action ('cancel' or 'confirm')
@type dialog_name: str
@param dialog_expected_transition_message: Expected dialog transition message
@type dialog_expected_transition_message: str
@param expected_transition_message: Expected dialog transition message
@type expected_transition_message: str
"""
url_before = self.browser.url
......@@ -1045,13 +1051,14 @@ class ContextMainForm(MainForm):
getattr(self.browser.mainForm,
'submitDialog' + dialog_name.capitalize())()
if dialog_expected_transition_message:
transition_message = self.browser.getTransitionMessage()
if transition_message != dialog_expected_transition_message:
raise AssertionError("Expected transition message: %s, got: %s" % \
(dialog_expected_transition_message,
transition_message))
if expected_transition_message:
transition_message = self.browser.getTransitionMessage()
if transition_message != expected_transition_message:
raise AssertionError("Expected transition message: %s, got: %s" % \
(expected_transition_message,
transition_message))
if dialog_name:
return show_dialog_time
if maximum_attempt_number == 1:
......
This diff is collapsed.
This diff is collapsed.
#!/usr/bin/python
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
# Vincent Pelletier <vincent@nexedi.com>
# Sebastien Robin <seb@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 datetime import date
from os import path
import rpy2.robjects as robjects
import os
from optparse import OptionParser
r = robjects.r
usage = """
Usage:
%prog [OPTION] file1.csv [file2.csv [...]]
Result:
Generates, in current directory, a graph per csv column in out-type format.
Their name is composed of:
- csv file basename (without extension)
- csv column title
- the ratio of present points (100 to 000). The higher the number, the
more the plot will be complete (less holes, longer timespan coverage).
- out-type extension
CSV files must have been generated by parse_timing_log.py tool.
"""
class CSVFile(object):
def __init__(self, file_name, field_delim=','):
file = open(file_name, 'r')
self.column_dict = column_dict = {}
self.column_list = column_list = []
self.ratio_dict = ratio_dict = {}
line_num = 0
self.value_max = value_max = {}
next_ord = 0
for x, title in enumerate(file.readline().split(field_delim)):
title = title.strip()
title = title.strip('"')
if title in column_dict:
title = next_ord
while title in column_dict:
title += 1
next_ord = title + 1
title = str(title)
column_dict[title] = []
column_list.append(title)
for line in file.readlines():
line_num += 1
for x, cell in enumerate(line.split(field_delim)):
cell = cell.strip()
key = column_list[x]
if x != 0:
cell = computeExpr(cell)
if cell is not None:
ratio = ratio_dict.get(key, 0)
ratio_dict[key] = ratio + 1
if cell > value_max.get(key, 0):
value_max[key] = cell
column_dict[key].append(cell)
line_num = float(line_num) / 100
for key in ratio_dict:
ratio_dict[key] /= line_num
def getColumn(self, column_id):
return self.column_dict[self.column_list[column_id]]
def iterColumns(self, start=0, stop=None):
if stop is None:
column_list = self.column_list[start:]
else:
column_list = self.column_list[start:stop]
return ((x, self.column_dict[x], self.value_max.get(x, 0), self.ratio_dict.get(x, 0)) for x in column_list)
def computeExpr(expr):
# only supports '=x/y'
if expr:
assert expr[0] == '='
num, denom = expr[1:].split('/')
result = float(int(num)) / int(denom)
else:
result = None
return result
def main():
parser = OptionParser(usage)
parser.add_option("--with-regression", action="store_true",
dest="regression_enabled", help="enable B-spline regression")
parser.add_option("--ignored-quantity", type="int", dest="ignored_quantity",
help="ignore IGNORED_QUANTITY higher values that might make a graph totally unusable")
parser.add_option("--out-type", type="string", default="png",
help="can be %default (default) or svg")
parser.add_option("--minimal-non-empty-values-ratio", type="float",
dest="minimal_non_empty_ratio", default=None,
help="graph with ratio of non empty values with lesser than value, then graph is ignored")
(options, file_name_list) = parser.parse_args()
current_dir = os.getcwd()
for file_name in file_name_list:
print 'Loading %s...' % (file_name, )
file = CSVFile(file_name)
date_string_list = file.getColumn(0)
date_list = []
x_label_value_list = []
# plotting functionnalities does not select smartly
# a good number of x values to display, so we will display 20 dates
# in order to have good enough dates on the x axis.
# x_label_value_list will be like [1, 5, 10...]
# date_list will be like ['2009/07/01', '2009/07/05', '2009/07/10', ...]
factor = 1
if len(date_string_list) > 20:
factor = int(len(date_string_list) / 20)
i = 0
for date_string in date_string_list:
if i % factor == 0:
x_label_value_list.append(i)
date_split = date_string.replace('"','').split('/')
date_split.reverse()
new_date = '/'.join(date_split)
date_list.append(new_date)
i += 1
max_x = len(date_string_list)
# knots are used for B-spline regression
# We need to add three additional knots at the begin and end in
# order to have the right basis
knot_list = [x_label_value_list[0]] * 3 + x_label_value_list \
+ [max_x] * 4
r_x_label_value_list = robjects.FloatVector(x_label_value_list)
robjects.globalenv["x_label_value_list"] = r_x_label_value_list
robjects.globalenv["knot_list"] = knot_list
r("x_label <- c(%s)" % ','.join(['"%s"' % x for x in date_list]))
# import the splines library in R
if options.regression_enabled:
r("library(splines)")
# now parse all columns and store a out-type file
for title, column, value_max, ratio in file.iterColumns(start=1):
out_file, out_ext = path.splitext(path.basename(file_name))
if out_ext != '.csv':
out_file = '.'.join((out_file, out_ext))
out_file_name = '%s_%s_%03i.%s' % (out_file, title.replace('%',''),
ratio, options.out_type)
i = 0
x_data = []
y_data = []
# First parse the list to retrieve values that we might want to remove
ignored_value_set = set([])
max_y_data = []
if options.ignored_quantity not in (None, 0):
for value in column:
if value is not None:
max_y_data.append(value)
max_y_data.sort()
ignored_value_set = set(max_y_data[-options.ignored_quantity:])
# build list with all data that we want to display
for value in column:
if value is not None and not (value in ignored_value_set):
x_data.append(i)
y_data.append(value)
i += 1
if len(x_data) == 0:
print 'Nothing to plot for %s...' % (out_file_name, )
continue
if options.minimal_non_empty_ratio is not None:
column_len = len(column)
if column_len:
if float(len(x_data))/column_len < options.minimal_non_empty_ratio:
print 'Not enough values to plot for %s...' % (out_file_name, )
continue
r_y_data = robjects.FloatVector(y_data)
r_x_data = robjects.FloatVector(x_data)
robjects.globalenv["y_data"] = r_y_data
robjects.globalenv["x_data"] = r_x_data
display_column_regression = options.regression_enabled
# if there is no more than one unique point, regression is useless
if len(set([x for x in r_y_data])) <= 1:
display_column_regression = 0
regression_string = ''
# Calculate a B-spline regression in order to give clear overview
# about the direction of chaotics values.
if display_column_regression:
r("bx <- splineDesign(knot_list, x_data)")
r("fitted_model <- lm(y_data ~ bx)")
regression_string = ', fitted_model$fit'
# Define the place where to store the graphe and format of the image
r("""%s(file='%s/%s', width=800, height=600)""" % (options.out_type,
current_dir, out_file_name))
# Increase the size for the place of the bottom axis labels (x)
r("""par(mar=c(9, 4, 4, 2) + 0.1)""")
# Plot the graph itself
r("""matplot(x_data, cbind(y_data %s), type='ll',
lty=1, main='%s (average display time per day)',
xlab='', ylab='time (s)', xaxt='n')""" % (
regression_string, title))
r("""axis(1, at=x_label_value_list, lab=x_label, las=2)""")
# stop changing the out-type file
r("""dev.off()""")
print 'Saving %s...' % (out_file_name, )
if __name__ == '__main__':
main()
......@@ -4177,10 +4177,7 @@ class RoleTemplateItem(BaseTemplateItem):
path = obsolete_key
bta.addObject(xml_data, name=path)
class CatalogSearchKeyTemplateItem(BaseTemplateItem):
key_list_attr = 'sql_catalog_search_keys'
key_list_title = 'search_key_list'
key_title = 'Search key'
class CatalogKeyTemplateItemBase(BaseTemplateItem):
def build(self, context, **kw):
catalog = _getCatalogValue(self)
......@@ -4205,6 +4202,10 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
key_list = [key.text for key in xml.getroot()]
self._objects[file_name[:-4]] = key_list
def _getUpdateDictAction(self, update_dict):
action = update_dict.get(self.key_list_title, 'nothing')
return action
def install(self, context, trashbin, **kw):
catalog = _getCatalogValue(self)
if catalog is None:
......@@ -4222,17 +4223,17 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
keys = self._archive.keys()
update_dict = kw.get('object_to_update')
force = kw.get('force')
# XXX same as related key
if update_dict.has_key(self.key_list_title) or force:
if not force:
action = update_dict[self.key_list_title]
if action == 'nothing':
return
for key in keys:
if key not in catalog_key_list:
catalog_key_list.append(key)
if force or self._getUpdateDictAction(update_dict) != 'nothing':
catalog_key_list = self._getUpdatedCatalogKeyList(catalog_key_list, keys)
setattr(catalog, self.key_list_attr, catalog_key_list)
def _getUpdatedCatalogKeyList(self, catalog_key_list, new_key_list):
catalog_key_list = list(catalog_key_list) # copy
for key in new_key_list:
if key not in catalog_key_list:
catalog_key_list.append(key)
return catalog_key_list
def uninstall(self, context, **kw):
catalog = _getCatalogValue(self)
if catalog is None:
......@@ -4267,100 +4268,99 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
xml_data = self.generateXml(path=path)
bta.addObject(xml_data, name=path)
class CatalogResultKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogUniqueKeyTemplateItemBase(CatalogKeyTemplateItemBase):
# like CatalogKeyTemplateItemBase, but for keys which use
# "key | value" syntax to configure dictionaries.
# The keys (part before the pipe) must be unique.
def _getMapFromKeyList(self, key_list):
# in case of duplicates, only the last installed entry will survive
return dict(tuple(part.strip() for part in key.split('|', 1))
for key in key_list)
def _getListFromKeyMap(self, key_map):
return [" | ".join(item) for item in sorted(key_map.items())]
def _getUpdatedCatalogKeyList(self, catalog_key_list, new_key_list):
# treat key lists as dictionaries, parse and update:
catalog_key_map = self._getMapFromKeyList(catalog_key_list)
catalog_key_map.update(self._getMapFromKeyList(new_key_list))
return self._getListFromKeyMap(catalog_key_map)
class CatalogSearchKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_search_keys'
key_list_title = 'search_key_list'
key_title = 'Search key'
class CatalogResultKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_search_result_keys'
key_list_title = 'result_key_list'
key_title = 'Result key'
class CatalogRelatedKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogRelatedKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_related_keys'
key_list_title = 'related_key_list'
key_title = 'Related key'
# override this method to support 'key_list' for backward compatibility.
def install(self, context, trashbin, **kw):
catalog = _getCatalogValue(self)
if catalog is None:
LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return
catalog_key_list = list(getattr(catalog, self.key_list_attr, []))
if context.getTemplateFormatVersion() == 1:
if len(self._objects.keys()) == 0: # needed because of pop()
return
keys = []
for k in self._objects.values().pop(): # because of list of list
keys.append(k)
else:
keys = self._archive.keys()
update_dict = kw.get('object_to_update')
force = kw.get('force')
# XXX must a find a better way to manage related key
if update_dict.has_key(self.key_list_title) or update_dict.has_key('key_list') or force:
if not force:
if update_dict.has_key(self.key_list_title):
action = update_dict[self.key_list_title]
else: # XXX for backward compatibility
action = update_dict['key_list']
if action == 'nothing':
return
for key in keys:
if key not in catalog_key_list:
catalog_key_list.append(key)
setattr(catalog, self.key_list_attr, catalog_key_list)
def _getUpdateDictAction(self, update_dict):
action = update_dict.get(self.key_list_title, _MARKER)
if action is _MARKER:
action = update_dict.get('key_list', 'nothing')
return action
class CatalogResultTableTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogResultTableTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_search_tables'
key_list_title = 'result_table_list'
key_title = 'Result table'
# keyword
class CatalogKeywordKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogKeywordKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_keyword_search_keys'
key_list_title = 'keyword_key_list'
key_title = 'Keyword key'
# datetime
class CatalogDateTimeKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogDateTimeKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_datetime_search_keys'
key_list_title = 'datetime_key_list'
key_title = 'DateTime key'
# full text
class CatalogFullTextKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogFullTextKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_full_text_search_keys'
key_list_title = 'full_text_key_list'
key_title = 'Fulltext key'
# request
class CatalogRequestKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogRequestKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_request_keys'
key_list_title = 'request_key_list'
key_title = 'Request key'
# multivalue
class CatalogMultivalueKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogMultivalueKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_multivalue_keys'
key_list_title = 'multivalue_key_list'
key_title = 'Multivalue key'
# topic
class CatalogTopicKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogTopicKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_topic_search_keys'
key_list_title = 'topic_key_list'
key_title = 'Topic key'
class CatalogScriptableKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogScriptableKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_scriptable_keys'
key_list_title = 'scriptable_key_list'
key_title = 'Scriptable key'
class CatalogRoleKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogRoleKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_role_keys'
key_list_title = 'role_key_list'
key_title = 'Role key'
class CatalogLocalRoleKeyTemplateItem(CatalogSearchKeyTemplateItem):
class CatalogLocalRoleKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_local_role_keys'
key_list_title = 'local_role_key_list'
key_title = 'LocalRole key'
......
......@@ -644,14 +644,14 @@ class ERP5Site(FolderMixIn, CMFSite, CacheCookieMixin):
def getPromiseParameter(self, section, option):
"""
Read external promise parameters.
The parameters should be provided by an external configuration file.
Location of this configuration file is defined in the zope configuration
file in a product_config named as the path of the ERP5 site.
Example if the site id is erp5:
<product-config /erp5>
Example if the site id is erp5:
<product-config /erp5>
promise_path /tmp/promise.cfg
</product-config>
</product-config>
The promise configuration is a simple ConfigParser readable file (a list of
section containing a list of string parameters.
......
......@@ -37,6 +37,7 @@ import tarfile
from Acquisition import Implicit, Explicit
from AccessControl import ClassSecurityInfo
from AccessControl.SecurityInfo import ModuleSecurityInfo
from Products.CMFActivity.ActiveResult import ActiveResult
from Products.ERP5Type.Globals import InitializeClass, DTMLFile, PersistentMapping
from Products.ERP5Type.DiffUtils import DiffFile
......@@ -83,6 +84,8 @@ class BusinessTemplateIsMeta(Exception):
"""
pass
ModuleSecurityInfo(__name__).declarePublic('BusinessTemplateUnknownError')
class TemplateTool (BaseTool):
"""
TemplateTool manages Business Templates.
......
......@@ -12,7 +12,7 @@
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts83858910.0</string> </value>
<value> <string>ts44338434.35</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......@@ -106,7 +106,7 @@ window.onload = function()\r\n
\t\t\t\t\t\t\t\tborder-left: #000000 1px solid; border-bottom: #000000 1px solid">\r\n
\t\t\t\t\t\t\t\t<span fcklang="DlgAboutVersion">version</span>\r\n
\t\t\t\t\t\t\t\t<br />\r\n
\t\t\t\t\t\t\t\t<b>2.6.6</b><br />\r\n
\t\t\t\t\t\t\t\t<b>2.6.8</b><br />\r\n
\t\t\t\t\t\t\t\tBuild 25427</td>\r\n
\t\t\t\t\t\t</tr>\r\n
\t\t\t\t\t</table>\r\n
......
......@@ -12,7 +12,7 @@
</item>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts83858910.02</string> </value>
<value> <string>ts44338467.6</string> </value>
</item>
<item>
<key> <string>__name__</string> </key>
......@@ -20,7 +20,7 @@
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/x-unknown-content-type</string> </value>
<value> <string>application/octet-stream</string> </value>
</item>
<item>
<key> <string>data</string> </key>
......@@ -93,7 +93,7 @@ others files in certain cases.\r\n
<!--- Generate Text Inputs --->\r\n
<cfset i = 0>\r\n
<cfloop list="#submitted_text#" index="textinput">\r\n
<cfset texts.textinputs = ListAppend(texts.textinputs, \'textinputs[#i#] = decodeURIComponent("#textinput#");\', CRLF)>\r\n
<cfset texts.textinputs = ListAppend(texts.textinputs, \'textinputs[#i#] = decodeURIComponent("\' & htmleditformat( textinput ) & \'");\', CRLF)>\r\n
<cfset i = i + 1>\r\n
</cfloop>\r\n
\r\n
......@@ -184,7 +184,7 @@ wordWindowObj.writeBody();\r\n
</item>
<item>
<key> <string>size</string> </key>
<value> <int>5538</int> </value>
<value> <int>5562</int> </value>
</item>
<item>
<key> <string>title</string> </key>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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