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 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) 0.4.5 (2012-07-04)
------------------ ------------------
......
...@@ -65,7 +65,6 @@ configuration_save.addConfigurationItem("Permission Configurator Item",\n ...@@ -65,7 +65,6 @@ configuration_save.addConfigurationItem("Permission Configurator Item",\n
\n \n
# Create ERP5Site_getSecurityCategoryMapping\n # Create ERP5Site_getSecurityCategoryMapping\n
configuration_save.addConfigurationItem("Security Category Mapping Configurator Item")\n configuration_save.addConfigurationItem("Security Category Mapping Configurator Item")\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
...@@ -221,7 +221,7 @@ ...@@ -221,7 +221,7 @@
Tips: <br>\n Tips: <br>\n
<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> ]]></string> </value>
</item> </item>
......
639 640
\ No newline at end of file \ No newline at end of file
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>global</string> </value> <value> <string>global</string> </value>
</item> </item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>actbox_name</string> </key> <key> <string>actbox_name</string> </key>
<value> <string>Sale Opportunities to Validate (%(count)s)</string> </value> <value> <string>Sale Opportunities to Validate (%(count)s)</string> </value>
...@@ -18,7 +22,7 @@ ...@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[ <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> ]]></string> </value>
</item> </item>
...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=draft&local_roles=Owner ...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=draft&local_roles=Owner
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/> <global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -67,10 +68,7 @@ sale_opportunity_module/view?simulation_state=draft&local_roles=Owner ...@@ -67,10 +68,7 @@ sale_opportunity_module/view?simulation_state=draft&local_roles=Owner
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>global</string> </value> <value> <string>global</string> </value>
</item> </item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>actbox_name</string> </key> <key> <string>actbox_name</string> </key>
<value> <string>Submitted Sale Opportunities to Validate (%(count)s)</string> </value> <value> <string>Submitted Sale Opportunities to Validate (%(count)s)</string> </value>
...@@ -18,7 +22,7 @@ ...@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[ <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> ]]></string> </value>
</item> </item>
...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=submitted&local_roles=Assignor ...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=submitted&local_roles=Assignor
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/> <global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -67,10 +68,7 @@ sale_opportunity_module/view?simulation_state=submitted&local_roles=Assignor ...@@ -67,10 +68,7 @@ sale_opportunity_module/view?simulation_state=submitted&local_roles=Assignor
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>global</string> </value> <value> <string>global</string> </value>
</item> </item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>actbox_name</string> </key> <key> <string>actbox_name</string> </key>
<value> <string>Sale Opportunities to Qualify (%(count)s)</string> </value> <value> <string>Sale Opportunities to Qualify (%(count)s)</string> </value>
...@@ -18,7 +22,7 @@ ...@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[ <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> ]]></string> </value>
</item> </item>
...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=contacted&local_roles:list=Assigne ...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=contacted&local_roles:list=Assigne
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/> <global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=contacted&local_roles:list=Assigne ...@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=contacted&local_roles:list=Assigne
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>global</string> </value> <value> <string>global</string> </value>
</item> </item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>actbox_name</string> </key> <key> <string>actbox_name</string> </key>
<value> <string>Offers to Send (%(count)s)</string> </value> <value> <string>Offers to Send (%(count)s)</string> </value>
...@@ -18,7 +22,7 @@ ...@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[ <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> ]]></string> </value>
</item> </item>
...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=enquired&local_roles:list=Assignee ...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=enquired&local_roles:list=Assignee
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/> <global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=enquired&local_roles:list=Assignee ...@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=enquired&local_roles:list=Assignee
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>global</string> </value> <value> <string>global</string> </value>
</item> </item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>actbox_name</string> </key> <key> <string>actbox_name</string> </key>
<value> <string>Pending Offers (%(count)s)</string> </value> <value> <string>Pending Offers (%(count)s)</string> </value>
...@@ -18,7 +22,7 @@ ...@@ -18,7 +22,7 @@
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
<value> <string encoding="cdata"><![CDATA[ <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> ]]></string> </value>
</item> </item>
...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=offered&local_roles:list=Assignee& ...@@ -47,10 +51,7 @@ sale_opportunity_module/view?simulation_state=offered&local_roles:list=Assignee&
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple>
<global name="Guard" module="Products.DCWorkflow.Guard"/> <global name="Guard" module="Products.DCWorkflow.Guard"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=offered&local_roles:list=Assignee& ...@@ -68,10 +69,7 @@ sale_opportunity_module/view?simulation_state=offered&local_roles:list=Assignee&
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<tuple>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
596 597
\ No newline at end of file \ No newline at end of file
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
<string>link</string> <string>link</string>
</tuple> </tuple>
<tuple> <tuple>
<string>description</string> <string>DiscussionPost_getDescription</string>
<string>description</string> <string>description</string>
</tuple> </tuple>
<tuple> <tuple>
......
...@@ -121,6 +121,10 @@ ...@@ -121,6 +121,10 @@
<string>title</string> <string>title</string>
<string>Title</string> <string>Title</string>
</tuple> </tuple>
<tuple>
<string>reference</string>
<string>Reference</string>
</tuple>
<tuple> <tuple>
<string>translated_validation_state_title</string> <string>translated_validation_state_title</string>
<string>State</string> <string>State</string>
...@@ -140,6 +144,10 @@ ...@@ -140,6 +144,10 @@
<string>title</string> <string>title</string>
<string>Title</string> <string>Title</string>
</tuple> </tuple>
<tuple>
<string>reference</string>
<string>Reference</string>
</tuple>
<tuple> <tuple>
<string>agent_value</string> <string>agent_value</string>
<string>Related</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 116
\ No newline at end of file \ 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 2011-12-01 Kazuhiko
* jQuery Core 1.7.1. * jQuery Core 1.7.1.
......
This Business Template contains jQuery Core. This Business Template contains jQuery Core.
Current version is jQuery 1.7.1. Current version is jQuery 1.7.2.
\ No newline at end of file \ No newline at end of file
14 15
\ No newline at end of file \ No newline at end of file
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts31202676.8</string> </value> <value> <string>ts43624880.19</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -24,8 +24,9 @@ ...@@ -24,8 +24,9 @@
</item> </item>
<item> <item>
<key> <string>data</string> </key> <key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEWqqqoRfvv5AAAAD0lEQVQY <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAXElEQVRo3u3OMQ0AAAgDsPmXMpNg
GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value> g5Ae/Zu2c1kEBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF
BQUFBQUFBQUFBQUFvwQXQyiz05YjDDkAAAAASUVORK5CYII=</string> </value>
</item> </item>
<item> <item>
<key> <string>height</string> </key> <key> <string>height</string> </key>
...@@ -37,7 +38,7 @@ GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value> ...@@ -37,7 +38,7 @@ GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value>
</item> </item>
<item> <item>
<key> <string>size</string> </key> <key> <string>size</string> </key>
<value> <int>87</int> </value> <value> <int>149</int> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts31202666.15</string> </value> <value> <string>ts43624890.48</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -24,8 +24,9 @@ ...@@ -24,8 +24,9 @@
</item> </item>
<item> <item>
<key> <string>data</string> </key> <key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEXj6vr1J1NHAAAAD0lEQVQY <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAGDY0LsAAAAZ0lEQVRo3u3OoQ0AMAhFQfZfs44R
GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value> alqPwBNOYMjPy8XJ++qFp2f7NDQ0NDRcOhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUHBkEBAQEBAQE
BAQEBAQEBAQEBAQEBAQEBAQEBAQEBARcAfxPn/knx13hBgAAAABJRU5ErkJggg==</string> </value>
</item> </item>
<item> <item>
<key> <string>height</string> </key> <key> <string>height</string> </key>
...@@ -37,7 +38,7 @@ GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value> ...@@ -37,7 +38,7 @@ GWNgGAWjgPoAAAJYAAHlK0hvAAAAAElFTkSuQmCC</string> </value>
</item> </item>
<item> <item>
<key> <string>size</string> </key> <key> <string>size</string> </key>
<value> <int>87</int> </value> <value> <int>160</int> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts26730022.12</string> </value> <value> <string>ts43624907.99</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -24,9 +24,9 @@ ...@@ -24,9 +24,9 @@
</item> </item>
<item> <item>
<key> <string>data</string> </key> <key> <string>data</string> </key>
<value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAQ0lEQVQ4je3PoQ2AQABD0f+7/4oM <value> <string encoding="base64">iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAAEYXzpNAAAAZElEQVQ4y+3UOw6AIBgD4N7/dGqM
gEZwCjAcigEIqXlJm1SUZR1nAEopv2XbDyIQnV0CiZLIJDP6dOq9jX7hTCnljQtFvQnqrH32ZgAA McYHiBjxsQK61MUr6D/g8u1Nm6JzkZAiU55ol0jY4/oa0eSl8cS4n+klF6XQnqhtIIZVZnVSpNt5
AABJRU5ErkJggg==</string> </value> uuTKP5OvpkA0cyB6Fwm9RcIIvc/Pi9yoJuFbfrTHoAAAAABJRU5ErkJggg==</string> </value>
</item> </item>
<item> <item>
<key> <string>height</string> </key> <key> <string>height</string> </key>
...@@ -38,7 +38,7 @@ AABJRU5ErkJggg==</string> </value> ...@@ -38,7 +38,7 @@ AABJRU5ErkJggg==</string> </value>
</item> </item>
<item> <item>
<key> <string>size</string> </key> <key> <string>size</string> </key>
<value> <int>124</int> </value> <value> <int>157</int> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
2012-07-30 Kazuhiko
* jquery-ui 1.8.22.
2012-03-08 Kazuhiko 2012-03-08 Kazuhiko
* jquery-ui 1.8.18. * jquery-ui 1.8.18.
......
This Business Template contains only static files of jQuery UI. 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 19
\ No newline at end of file \ No newline at end of file
...@@ -1350,6 +1350,12 @@ button.formbt > span{\n ...@@ -1350,6 +1350,12 @@ button.formbt > span{\n
.page ul li {\n .page ul li {\n
list-style: square outside none;\n list-style: square outside none;\n
}\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> </tal:block>
]]></unicode> </value> ]]></unicode> </value>
......
1870 1871
\ No newline at end of file \ 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 @@ ...@@ -39,7 +39,9 @@
<item> <item>
<key> <string>periodicity_hour</string> </key> <key> <string>periodicity_hour</string> </key>
<value> <value>
<tuple/> <tuple>
<int>0</int>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
<item> <item>
<key> <string>periodicity_hour</string> </key> <key> <string>periodicity_hour</string> </key>
<value> <value>
<tuple/> <tuple>
<int>0</int>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
<item> <item>
<key> <string>periodicity_hour</string> </key> <key> <string>periodicity_hour</string> </key>
<value> <value>
<tuple/> <tuple>
<int>0</int>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
<item> <item>
<key> <string>periodicity_hour</string> </key> <key> <string>periodicity_hour</string> </key>
<value> <value>
<tuple/> <tuple>
<int>0</int>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
<item> <item>
<key> <string>periodicity_hour</string> </key> <key> <string>periodicity_hour</string> </key>
<value> <value>
<tuple/> <tuple>
<int>0</int>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -39,7 +39,9 @@ ...@@ -39,7 +39,9 @@
<item> <item>
<key> <string>periodicity_hour</string> </key> <key> <string>periodicity_hour</string> </key>
<value> <value>
<tuple/> <tuple>
<int>0</int>
</tuple>
</value> </value>
</item> </item>
<item> <item>
......
...@@ -54,7 +54,6 @@ ...@@ -54,7 +54,6 @@
\n \n
portal = context.getPortalObject()\n portal = context.getPortalObject()\n
mailhost = portal.MailHost\n mailhost = portal.MailHost\n
portal_preferences = portal.portal_preferences\n
promise_url = portal.getPromiseParameter(\'external_service\', \'smtp_url\')\n promise_url = portal.getPromiseParameter(\'external_service\', \'smtp_url\')\n
\n \n
if promise_url is None:\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. Provide automated ERP5 setup configuration.
\ No newline at end of file \ No newline at end of file
GPL
\ No newline at end of file
rafael
romain
\ No newline at end of file
9 17
\ No newline at end of file \ 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 ...@@ -72,7 +72,7 @@ for result in result_list:\n
if strict_check_mode and method() != kw[key]:\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 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 # 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 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 (object.getTitle(), object.Base_getOwnerId(), owner_id)\n
\n \n
......
...@@ -97,6 +97,7 @@ return {\'now\': DateTime(),\n ...@@ -97,6 +97,7 @@ return {\'now\': DateTime(),\n
\'sale_howto_currency_title\': \'Euro\',\n \'sale_howto_currency_title\': \'Euro\',\n
\'sale_howto_currency_tag\': \'EUR\',\n \'sale_howto_currency_tag\': \'EUR\',\n
\'sale_howto_product_reference\': \'ZUITE-TEST-SALEORDER-RL01\',\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_person_title\': \'ZUITE-TEST-CAMPAIGN-PERSON-SUPERVISOR\',\n
\'campaign_howto_person2_title\': \'ZUITE-TEST-CAMPAIGN-PERSON-OPERATION-MANAGER\',\n \'campaign_howto_person2_title\': \'ZUITE-TEST-CAMPAIGN-PERSON-OPERATION-MANAGER\',\n
\'campaign_howto_organisation_title\': \'ZUITE-TEST-CAMPAIGN-ORGANISATION-001\',\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 @@ ...@@ -50,8 +50,7 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string> <value> <string>preference_tool = context.getPortalObject().portal_preferences\n
preference_tool = context.getPortalObject().portal_preferences\n
\n \n
preference = preference_tool.getActivePreference()\n preference = preference_tool.getActivePreference()\n
\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 28-03-2011 lucas
- Replaced the email for a valid one. - Replaced the email for a valid one.
......
TODO: This bt5 contains no tests, all tests are part of the documentation.
- testHowToSaleOrder must be refactored to use new simulation. \ No newline at end of file
\ No newline at end of file
Copyright 2010, Nexedi SA Copyright 2010-2012, Nexedi SA
\ No newline at end of file \ No newline at end of file
This contains zelenium tests for user Tutorials instances. This contains scripts related to the users tutorials.
\ No newline at end of file \ No newline at end of file
rafael rafael
lucas
\ No newline at end of file
787 788
\ No newline at end of file \ No newline at end of file
...@@ -9,8 +9,8 @@ portal_categories/gender/female ...@@ -9,8 +9,8 @@ portal_categories/gender/female
portal_categories/gender/male portal_categories/gender/male
portal_categories/group/my_group portal_categories/group/my_group
portal_categories/incoterm/cpt portal_categories/incoterm/cpt
portal_categories/nationality/french
portal_categories/marital_status/married portal_categories/marital_status/married
portal_categories/nationality/french
portal_categories/order/normal portal_categories/order/normal
portal_categories/payment_mode/credit_card portal_categories/payment_mode/credit_card
portal_categories/quantity_unit/time portal_categories/quantity_unit/time
......
...@@ -63,6 +63,11 @@ ...@@ -63,6 +63,11 @@
verified and opened by administrator first\n verified and opened by administrator first\n
- you need to adjust group, function and site to your needs\n - you need to adjust group, function and site to your needs\n
"""\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 from Products.Formulator.Errors import ValidationError, FormValidationError\n
portal = context.getPortalObject()\n portal = context.getPortalObject()\n
translateString = context.Base_translateString\n translateString = context.Base_translateString\n
......
1088 1089
\ No newline at end of file \ No newline at end of file
...@@ -51,6 +51,10 @@ ...@@ -51,6 +51,10 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>type_class</string> </key>
<value> <string>State</string> </value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
......
...@@ -68,6 +68,10 @@ ...@@ -68,6 +68,10 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Variable</string> </value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
......
...@@ -68,6 +68,10 @@ ...@@ -68,6 +68,10 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Transition</string> </value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
......
...@@ -51,6 +51,10 @@ ...@@ -51,6 +51,10 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Variable</string> </value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
......
...@@ -67,6 +67,10 @@ ...@@ -67,6 +67,10 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Workflow</string> </value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </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 37
\ No newline at end of file \ No newline at end of file
...@@ -60,9 +60,9 @@ ...@@ -60,9 +60,9 @@
<!-- <span tal:replace="structure python: getattr(here.gadgets.form, field_type).gadget(field_name=field_name)"/> -->\n <!-- <span tal:replace="structure python: getattr(here.gadgets.form, field_type).gadget(field_name=field_name)"/> -->\n
\n \n
<!-- XXX: render gadget asynchronously -->\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 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 \n
</div>\n </div>\n
</div>\n </div>\n
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts37261735.49</string> </value> <value> <string>ts45811421.8</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
......
...@@ -89,10 +89,10 @@ ...@@ -89,10 +89,10 @@
\n \n
<!--Form render goes here -->\n <!--Form render goes here -->\n
<div id="form_gadget"\n <div id="form_gadget"\n
tal:attributes="gadget string:${current_form_id}/Form_asRenderJSGadget;\n tal:attributes="data-gadget string:${current_form_id}/Form_asRenderJSGadget;\n
gadget:data-source string:Form_asJSON?form_id=${current_form_id};\n data-gadget:data-source string:Form_asJSON?form_id=${current_form_id};\n
gadget:data-handler string:ERP5Form.update;\n data-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 data-gadget:property string: {&quot;cacheable&quot;: &quot;1&quot;, &quot;cache_id&quot;: &quot;${current_form_id}&quot;}">\n
</div>\n </div>\n
\n \n
</div>\n </div>\n
......
...@@ -71,8 +71,8 @@ ...@@ -71,8 +71,8 @@
\074script src="erp5_form.js"\076\074/script\076\n \074script src="erp5_form.js"\076\074/script\076\n
\n \n
\074div id="content"\n \074div id="content"\n
gadget="gadgets/content/gadget"\n data-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 tal:attributes="data-gadget string:gadgets/tabular_gadget/gadget?object_path=${object_path}\046current_form_id=${form_id}"\076\074/div\076\n
\n \n
\074script type="text/javascript" language="javascript"\076\n \074script type="text/javascript" language="javascript"\076\n
//\074![CDATA[\n //\074![CDATA[\n
......
8 9
\ No newline at end of file \ No newline at end of file
...@@ -95,16 +95,22 @@ def patchRPCParser(error_handler): ...@@ -95,16 +95,22 @@ def patchRPCParser(error_handler):
parser_klass.feed = verbose_feed parser_klass.feed = verbose_feed
class RPCRetry(object): class RPCRetry(object):
def __init__(self, proxy, retry_time, logger): def __init__(self, proxy, retry_time, logger, timeout=120):
super(RPCRetry, self).__init__() super(RPCRetry, self).__init__()
self._proxy = proxy self._proxy = proxy
self._retry_time = retry_time self._retry_time = retry_time
self._logger = logger self._logger = logger
self.__rpc_lock = threading.Lock() self.__rpc_lock = threading.Lock()
self.timeout = timeout
def _RPC(self, func_id, args=()): def _RPC(self, func_id, args=()):
default_timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(self.timeout)
try:
with self.__rpc_lock: with self.__rpc_lock:
return getattr(self._proxy, func_id)(*args) return getattr(self._proxy, func_id)(*args)
finally:
socket.setdefaulttimeout(default_timeout)
def _retryRPC(self, func_id, args=()): def _retryRPC(self, func_id, args=()):
retry_time = self._retry_time retry_time = self._retry_time
...@@ -141,29 +147,32 @@ class TestResultLineProxy(RPCRetry): ...@@ -141,29 +147,32 @@ class TestResultLineProxy(RPCRetry):
def stop(self, test_count=None, error_count=None, failure_count=None, def stop(self, test_count=None, error_count=None, failure_count=None,
skip_count=None, duration=None, date=None, command=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. Notify server of test completion.
Without any parameter, notifies of a test failure which prevents any Without any parameter, notifies of a test failure which prevents any
precise reading (step count, how many succeeded, etc). 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 = { status_dict = dict(x for x in (
'test_count': test_count, ('test_count', test_count),
'error_count': error_count, ('error_count', error_count),
'failure_count': failure_count, ('failure_count', failure_count),
'skip_count': skip_count, ('skip_count', skip_count),
'duration': duration, ('duration', duration),
'date': date, ('date', date),
} ('command', command),
if command is not None: ('stdout', stdout),
status_dict['command'] = command ('stderr', stderr),
if stdout is not None: ('html_test_result', html_test_result),
status_dict['stdout'] = stdout ) if x[1] is not None)
if stderr is not None: if kw:
status_dict['stderr'] = stderr self._logger.info('Extra parameters provided: %r', kw)
if html_test_result is not None: status_dict.update(kw)
status_dict['html_test_result'] = html_test_result
self._retryRPC('stopUnitTest', (self._test_result_line_path, self._retryRPC('stopUnitTest', (self._test_result_line_path,
status_dict)) status_dict))
......
...@@ -36,7 +36,7 @@ import urllib ...@@ -36,7 +36,7 @@ import urllib
from urlparse import urljoin from urlparse import urljoin
from z3c.etestbrowser.browser import ExtendedTestBrowser from z3c.etestbrowser.browser import ExtendedTestBrowser
from zope.testbrowser.browser import onlyOne from zope.testbrowser.browser import onlyOne, fix_exception_name
def measurementMetaClass(prefix): def measurementMetaClass(prefix):
""" """
...@@ -424,9 +424,15 @@ class Browser(ExtendedTestBrowser): ...@@ -424,9 +424,15 @@ class Browser(ExtendedTestBrowser):
@raise LookupError: Not found @raise LookupError: Not found
""" """
try: try:
return self.etree.xpath('//div[@id="transition_message"]')[0].text transition_message = self.etree.xpath(
'//div[@id="transition_message"]')[0].text
except IndexError: except IndexError:
raise LookupError("Cannot find div with ID 'transition_message'") 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): def getInformationArea(self):
""" """
...@@ -987,7 +993,7 @@ class ContextMainForm(MainForm): ...@@ -987,7 +993,7 @@ class ContextMainForm(MainForm):
maximum_attempt_number=1, maximum_attempt_number=1,
sleep_between_attempt=0, sleep_between_attempt=0,
dialog_name=None, dialog_name=None,
dialog_expected_transition_message=None, expected_transition_message=None,
**kw): **kw):
""" """
Select and submit a workflow action, given either by its label Select and submit a workflow action, given either by its label
...@@ -1022,8 +1028,8 @@ class ContextMainForm(MainForm): ...@@ -1022,8 +1028,8 @@ class ContextMainForm(MainForm):
@type sleep_between_attempt: int @type sleep_between_attempt: int
@param dialog_name: Function to call after the workflow action ('cancel' or 'confirm') @param dialog_name: Function to call after the workflow action ('cancel' or 'confirm')
@type dialog_name: str @type dialog_name: str
@param dialog_expected_transition_message: Expected dialog transition message @param expected_transition_message: Expected dialog transition message
@type dialog_expected_transition_message: str @type expected_transition_message: str
""" """
url_before = self.browser.url url_before = self.browser.url
...@@ -1045,13 +1051,14 @@ class ContextMainForm(MainForm): ...@@ -1045,13 +1051,14 @@ class ContextMainForm(MainForm):
getattr(self.browser.mainForm, getattr(self.browser.mainForm,
'submitDialog' + dialog_name.capitalize())() 'submitDialog' + dialog_name.capitalize())()
if dialog_expected_transition_message: if expected_transition_message:
transition_message = self.browser.getTransitionMessage() transition_message = self.browser.getTransitionMessage()
if transition_message != dialog_expected_transition_message: if transition_message != expected_transition_message:
raise AssertionError("Expected transition message: %s, got: %s" % \ raise AssertionError("Expected transition message: %s, got: %s" % \
(dialog_expected_transition_message, (expected_transition_message,
transition_message)) transition_message))
if dialog_name:
return show_dialog_time return show_dialog_time
if maximum_attempt_number == 1: 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): ...@@ -4177,10 +4177,7 @@ class RoleTemplateItem(BaseTemplateItem):
path = obsolete_key path = obsolete_key
bta.addObject(xml_data, name=path) bta.addObject(xml_data, name=path)
class CatalogSearchKeyTemplateItem(BaseTemplateItem): class CatalogKeyTemplateItemBase(BaseTemplateItem):
key_list_attr = 'sql_catalog_search_keys'
key_list_title = 'search_key_list'
key_title = 'Search key'
def build(self, context, **kw): def build(self, context, **kw):
catalog = _getCatalogValue(self) catalog = _getCatalogValue(self)
...@@ -4205,6 +4202,10 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem): ...@@ -4205,6 +4202,10 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
key_list = [key.text for key in xml.getroot()] key_list = [key.text for key in xml.getroot()]
self._objects[file_name[:-4]] = key_list 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): def install(self, context, trashbin, **kw):
catalog = _getCatalogValue(self) catalog = _getCatalogValue(self)
if catalog is None: if catalog is None:
...@@ -4222,16 +4223,16 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem): ...@@ -4222,16 +4223,16 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
keys = self._archive.keys() keys = self._archive.keys()
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
# XXX same as related key if force or self._getUpdateDictAction(update_dict) != 'nothing':
if update_dict.has_key(self.key_list_title) or force: catalog_key_list = self._getUpdatedCatalogKeyList(catalog_key_list, keys)
if not force: setattr(catalog, self.key_list_attr, catalog_key_list)
action = update_dict[self.key_list_title]
if action == 'nothing': def _getUpdatedCatalogKeyList(self, catalog_key_list, new_key_list):
return catalog_key_list = list(catalog_key_list) # copy
for key in keys: for key in new_key_list:
if key not in catalog_key_list: if key not in catalog_key_list:
catalog_key_list.append(key) catalog_key_list.append(key)
setattr(catalog, self.key_list_attr, catalog_key_list) return catalog_key_list
def uninstall(self, context, **kw): def uninstall(self, context, **kw):
catalog = _getCatalogValue(self) catalog = _getCatalogValue(self)
...@@ -4267,100 +4268,99 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem): ...@@ -4267,100 +4268,99 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
xml_data = self.generateXml(path=path) xml_data = self.generateXml(path=path)
bta.addObject(xml_data, name=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_attr = 'sql_search_result_keys'
key_list_title = 'result_key_list' key_list_title = 'result_key_list'
key_title = 'Result key' key_title = 'Result key'
class CatalogRelatedKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogRelatedKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_related_keys' key_list_attr = 'sql_catalog_related_keys'
key_list_title = 'related_key_list' key_list_title = 'related_key_list'
key_title = 'Related key' key_title = 'Related key'
# override this method to support 'key_list' for backward compatibility. # override this method to support 'key_list' for backward compatibility.
def install(self, context, trashbin, **kw): def _getUpdateDictAction(self, update_dict):
catalog = _getCatalogValue(self) action = update_dict.get(self.key_list_title, _MARKER)
if catalog is None: if action is _MARKER:
LOG('BusinessTemplate', 0, 'no SQL catalog was available') action = update_dict.get('key_list', 'nothing')
return return action
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)
class CatalogResultTableTemplateItem(CatalogSearchKeyTemplateItem): class CatalogResultTableTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_search_tables' key_list_attr = 'sql_search_tables'
key_list_title = 'result_table_list' key_list_title = 'result_table_list'
key_title = 'Result table' key_title = 'Result table'
# keyword # keyword
class CatalogKeywordKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogKeywordKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_keyword_search_keys' key_list_attr = 'sql_catalog_keyword_search_keys'
key_list_title = 'keyword_key_list' key_list_title = 'keyword_key_list'
key_title = 'Keyword key' key_title = 'Keyword key'
# datetime # datetime
class CatalogDateTimeKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogDateTimeKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_datetime_search_keys' key_list_attr = 'sql_catalog_datetime_search_keys'
key_list_title = 'datetime_key_list' key_list_title = 'datetime_key_list'
key_title = 'DateTime key' key_title = 'DateTime key'
# full text # full text
class CatalogFullTextKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogFullTextKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_full_text_search_keys' key_list_attr = 'sql_catalog_full_text_search_keys'
key_list_title = 'full_text_key_list' key_list_title = 'full_text_key_list'
key_title = 'Fulltext key' key_title = 'Fulltext key'
# request # request
class CatalogRequestKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogRequestKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_request_keys' key_list_attr = 'sql_catalog_request_keys'
key_list_title = 'request_key_list' key_list_title = 'request_key_list'
key_title = 'Request key' key_title = 'Request key'
# multivalue # multivalue
class CatalogMultivalueKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogMultivalueKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_multivalue_keys' key_list_attr = 'sql_catalog_multivalue_keys'
key_list_title = 'multivalue_key_list' key_list_title = 'multivalue_key_list'
key_title = 'Multivalue key' key_title = 'Multivalue key'
# topic # topic
class CatalogTopicKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogTopicKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_topic_search_keys' key_list_attr = 'sql_catalog_topic_search_keys'
key_list_title = 'topic_key_list' key_list_title = 'topic_key_list'
key_title = 'Topic key' key_title = 'Topic key'
class CatalogScriptableKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogScriptableKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_scriptable_keys' key_list_attr = 'sql_catalog_scriptable_keys'
key_list_title = 'scriptable_key_list' key_list_title = 'scriptable_key_list'
key_title = 'Scriptable key' key_title = 'Scriptable key'
class CatalogRoleKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogRoleKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_role_keys' key_list_attr = 'sql_catalog_role_keys'
key_list_title = 'role_key_list' key_list_title = 'role_key_list'
key_title = 'Role key' key_title = 'Role key'
class CatalogLocalRoleKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogLocalRoleKeyTemplateItem(CatalogUniqueKeyTemplateItemBase):
key_list_attr = 'sql_catalog_local_role_keys' key_list_attr = 'sql_catalog_local_role_keys'
key_list_title = 'local_role_key_list' key_list_title = 'local_role_key_list'
key_title = 'LocalRole key' key_title = 'LocalRole key'
......
...@@ -37,6 +37,7 @@ import tarfile ...@@ -37,6 +37,7 @@ import tarfile
from Acquisition import Implicit, Explicit from Acquisition import Implicit, Explicit
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from AccessControl.SecurityInfo import ModuleSecurityInfo
from Products.CMFActivity.ActiveResult import ActiveResult from Products.CMFActivity.ActiveResult import ActiveResult
from Products.ERP5Type.Globals import InitializeClass, DTMLFile, PersistentMapping from Products.ERP5Type.Globals import InitializeClass, DTMLFile, PersistentMapping
from Products.ERP5Type.DiffUtils import DiffFile from Products.ERP5Type.DiffUtils import DiffFile
...@@ -83,6 +84,8 @@ class BusinessTemplateIsMeta(Exception): ...@@ -83,6 +84,8 @@ class BusinessTemplateIsMeta(Exception):
""" """
pass pass
ModuleSecurityInfo(__name__).declarePublic('BusinessTemplateUnknownError')
class TemplateTool (BaseTool): class TemplateTool (BaseTool):
""" """
TemplateTool manages Business Templates. TemplateTool manages Business Templates.
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts83858910.0</string> </value> <value> <string>ts44338434.35</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -106,7 +106,7 @@ window.onload = function()\r\n ...@@ -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\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<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<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\t\tBuild 25427</td>\r\n
\t\t\t\t\t\t</tr>\r\n \t\t\t\t\t\t</tr>\r\n
\t\t\t\t\t</table>\r\n \t\t\t\t\t</table>\r\n
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts83858910.02</string> </value> <value> <string>ts44338467.6</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
</item> </item>
<item> <item>
<key> <string>content_type</string> </key> <key> <string>content_type</string> </key>
<value> <string>text/x-unknown-content-type</string> </value> <value> <string>application/octet-stream</string> </value>
</item> </item>
<item> <item>
<key> <string>data</string> </key> <key> <string>data</string> </key>
...@@ -93,7 +93,7 @@ others files in certain cases.\r\n ...@@ -93,7 +93,7 @@ others files in certain cases.\r\n
<!--- Generate Text Inputs --->\r\n <!--- Generate Text Inputs --->\r\n
<cfset i = 0>\r\n <cfset i = 0>\r\n
<cfloop list="#submitted_text#" index="textinput">\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 <cfset i = i + 1>\r\n
</cfloop>\r\n </cfloop>\r\n
\r\n \r\n
...@@ -184,7 +184,7 @@ wordWindowObj.writeBody();\r\n ...@@ -184,7 +184,7 @@ wordWindowObj.writeBody();\r\n
</item> </item>
<item> <item>
<key> <string>size</string> </key> <key> <string>size</string> </key>
<value> <int>5538</int> </value> <value> <int>5562</int> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>_EtagSupport__etag</string> </key> <key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts83858910.02</string> </value> <value> <string>ts44338476.75</string> </value>
</item> </item>
<item> <item>
<key> <string>__name__</string> </key> <key> <string>__name__</string> </key>
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
</item> </item>
<item> <item>
<key> <string>content_type</string> </key> <key> <string>content_type</string> </key>
<value> <string>text/x-unknown-content-type</string> </value> <value> <string>application/x-php</string> </value>
</item> </item>
<item> <item>
<key> <string>data</string> </key> <key> <string>data</string> </key>
...@@ -52,7 +52,7 @@ function print_textinputs_var() {\r\n ...@@ -52,7 +52,7 @@ function print_textinputs_var() {\r\n
\tglobal $textinputs;\r\n \tglobal $textinputs;\r\n
\tforeach( $textinputs as $key=>$val ) {\r\n \tforeach( $textinputs as $key=>$val ) {\r\n
\t\t# $val = str_replace( "\'", "%27", $val );\r\n \t\t# $val = str_replace( "\'", "%27", $val );\r\n
\t\techo "textinputs[$key] = decodeURIComponent(\\"" . $val . "\\");\\n";\r\n \t\techo "textinputs[$key] = decodeURIComponent(\\"" . htmlspecialchars($val, ENT_QUOTES) . "\\");\\n";\r\n
\t}\r\n \t}\r\n
}\r\n }\r\n
\r\n \r\n
...@@ -235,7 +235,7 @@ wordWindowObj.writeBody();\r\n ...@@ -235,7 +235,7 @@ wordWindowObj.writeBody();\r\n
</item> </item>
<item> <item>
<key> <string>size</string> </key> <key> <string>size</string> </key>
<value> <int>5854</int> </value> <value> <int>5884</int> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <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