Commit 07da663a authored by Ayush Tiwari's avatar Ayush Tiwari

wip

parent ebabb612
<?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>categories</string> </key>
<value>
<tuple>
<string>action_type/object_action</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_action</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>new_thread</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>Add portal content</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>New Thread</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}/DiscussionModuleThread_viewAddThreadDialog</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>text</string> </key> <key> <string>text</string> </key>
<value> <string>string:${object_url}/DiscussionThreadModule_viewDiscussionThreadList</string> </value> <value> <string>string:${object_url}/DiscussionThreadModule_viewDiscussionThreadsList</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
<?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>categories</string> </key>
<value>
<tuple>
<string>action_type/object_action</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_action</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>new_reply</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>Add portal content</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>New Reply</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}/DiscussionThreadModule_viewAddReplyDialog</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>icon</string> </key>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='ADM'> <role id='ADM'>
<item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
<role id='USR'> <role id='USR'>
<item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
<role id='VSR'> <role id='VST'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
<role id='lm1tnw5i0d'> <role id='zope'>
<item>Owner</item> <item>Owner</item>
</role> </role>
</local_roles> </local_roles>
......
...@@ -6,10 +6,14 @@ ...@@ -6,10 +6,14 @@
<role id='USR'> <role id='USR'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
<role id='VSR'> <role id='VST'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
<role id='lm1tnw5i0d'> <role id='my_group'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item> <item>Owner</item>
</role> </role>
</local_roles> </local_roles>
......
...@@ -79,7 +79,6 @@ ...@@ -79,7 +79,6 @@
<role>Assignor</role> <role>Assignor</role>
<role>Associate</role> <role>Associate</role>
<role>Auditor</role> <role>Auditor</role>
<role>Author</role>
<role>Manager</role> <role>Manager</role>
</permission> </permission>
<permission type='tuple'> <permission type='tuple'>
......
...@@ -6,6 +6,53 @@ ...@@ -6,6 +6,53 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item> <item>
<key> <string>_count</string> </key> <key> <string>_count</string> </key>
<value> <value>
...@@ -24,13 +71,21 @@ ...@@ -24,13 +71,21 @@
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>function/forum</string>
</tuple>
</value>
</item>
<item> <item>
<key> <string>codification</string> </key> <key> <string>codification</string> </key>
<value> <string>FRN</string> </value> <value> <string>FRM</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Function Category for forum users</string> </value> <value> <string>Function category for forum users</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
...@@ -6,6 +6,53 @@ ...@@ -6,6 +6,53 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item> <item>
<key> <string>categories</string> </key> <key> <string>categories</string> </key>
<value> <value>
......
...@@ -6,13 +6,68 @@ ...@@ -6,13 +6,68 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>function/forum/user</string>
</tuple>
</value>
</item>
<item> <item>
<key> <string>codification</string> </key> <key> <string>codification</string> </key>
<value> <string>USR</string> </value> <value> <string>USR</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Forum User that can create new threads</string> </value> <value> <string>Forum users that can create new friends</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
...@@ -6,6 +6,53 @@ ...@@ -6,6 +6,53 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item> <item>
<key> <string>categories</string> </key> <key> <string>categories</string> </key>
<value> <value>
...@@ -16,11 +63,11 @@ ...@@ -16,11 +63,11 @@
</item> </item>
<item> <item>
<key> <string>codification</string> </key> <key> <string>codification</string> </key>
<value> <string>VSR</string> </value> <value> <string>VST</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Forum Visitor, can replies on public threads</string> </value> <value> <string>Forum visitor, can reply on public threads</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
...@@ -32,7 +79,7 @@ ...@@ -32,7 +79,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Visitor</string> </value> <value> <string>visitor</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -3,6 +3,6 @@ ...@@ -3,6 +3,6 @@
<item>TextDocument</item> <item>TextDocument</item>
</portal_type> </portal_type>
<portal_type id="Discussion Thread"> <portal_type id="Discussion Thread">
<item>DiscussionThread</item> <item>Discussion Thread</item>
</portal_type> </portal_type>
</property_sheet_list> </property_sheet_list>
\ No newline at end of file
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
<multi_property id='category'>function/forum/user</multi_property> <multi_property id='category'>function/forum/user</multi_property>
</role> </role>
<role id='Auditor'> <role id='Auditor'>
<property id='title'>Visitor Forum</property> <property id='title'>Visitor</property>
<property id='description'>Forum Visitors can view the discussion thread module and the public threads inside it.</property>
<multi_property id='category'>function/forum/visitor</multi_property> <multi_property id='category'>function/forum/visitor</multi_property>
</role> </role>
</type_roles> </type_roles>
\ No newline at end of file
<type_roles> <type_roles>
<role id='Assignor'> <role id='Assignor'>
<property id='title'>Administrator</property> <property id='title'>Administrator</property>
<property id='description'>Forum Administrators are allowed to modify any thread and change its status.</property>
<multi_property id='category'>function/forum/administrator</multi_property> <multi_property id='category'>function/forum/administrator</multi_property>
</role> </role>
<role id='Author; Auditor'> <role id='Author; Auditor'>
...@@ -11,7 +10,6 @@ ...@@ -11,7 +10,6 @@
</role> </role>
<role id='Auditor'> <role id='Auditor'>
<property id='title'>Visitor</property> <property id='title'>Visitor</property>
<property id='description'>Forum visitors read threads with their posts.</property>
<multi_property id='category'>function/forum/visitor</multi_property> <multi_property id='category'>function/forum/visitor</multi_property>
</role> </role>
</type_roles> </type_roles>
\ No newline at end of file
<type_roles> <type_roles>
<role id='Auditor; Author'>
<property id='title'>Default</property>
<property id='description'>Configured by ERP5 Configurator</property>
<multi_property id='category'>group/my_group</multi_property>
</role>
<role id='Auditor'> <role id='Auditor'>
<property id='title'>Forum User</property> <property id='title'>Forum User</property>
<property id='description'>Forum users can see information on Persons.</property>
<multi_property id='category'>function/forum/visitor</multi_property> <multi_property id='category'>function/forum/visitor</multi_property>
<multi_property id='category'>function/forum/user</multi_property> <multi_property id='category'>function/forum/user</multi_property>
<multi_property id='category'>function/forum/administrator</multi_property> <multi_property id='category'>function/forum/administrator</multi_property>
</role> </role>
<role id='Auditor'>
<property id='title'>Forum Visitor</property>
<property id='description'>Just a visitor.</property>
<multi_property id='category'>function/forum/visitor</multi_property>
</role>
</type_roles> </type_roles>
\ No newline at end of file
<type_roles> <type_roles>
<role id='Assignor; Assignee; Associate; Auditor; Author'>
<property id='title'>Default</property>
<property id='description'>Configured by ERP5 Configurator</property>
<multi_property id='category'>group/my_group</multi_property>
</role>
<role id='Auditor'> <role id='Auditor'>
<property id='title'>Forum User</property> <property id='title'>Forum User</property>
<property id='description'>Forum users can see information on Persons.</property>
<multi_property id='category'>function/forum/visitor</multi_property> <multi_property id='category'>function/forum/visitor</multi_property>
<multi_property id='category'>function/forum/user</multi_property> <multi_property id='category'>function/forum/user</multi_property>
<multi_property id='category'>function/forum/administrator</multi_property> <multi_property id='category'>function/forum/administrator</multi_property>
......
...@@ -6,25 +6,6 @@ ...@@ -6,25 +6,6 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_property_domain_dict</string> </key>
<value>
<dictionary>
<item>
<key> <string>short_title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
<item> <item>
<key> <string>acquire_local_roles</string> </key> <key> <string>acquire_local_roles</string> </key>
<value> <int>1</int> </value> <value> <int>1</int> </value>
...@@ -37,13 +18,8 @@ ...@@ -37,13 +18,8 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <value> <string>Post for a forum\n
<none/> </string> </value>
</value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addTextDocument</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
...@@ -65,49 +41,21 @@ ...@@ -65,49 +41,21 @@
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value> <value> <string>Base Type</string> </value>
</item> </item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item> <item>
<key> <string>domain_name</string> </key> <key> <string>type_class</string> </key>
<value> <value> <string>TextDocument</string> </value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>property_name</string> </key> <key> <string>type_interface</string> </key>
<value> <string>short_title</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <value>
<none/> <tuple/>
</value> </value>
</item> </item>
<item> <item>
<key> <string>property_name</string> </key> <key> <string>type_mixin</string> </key>
<value> <string>title</string> </value> <value>
<tuple/>
</value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -9,20 +9,7 @@ ...@@ -9,20 +9,7 @@
<item> <item>
<key> <string>_property_domain_dict</string> </key> <key> <string>_property_domain_dict</string> </key>
<value> <value>
<dictionary> <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
<item>
<key> <string>short_title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</value> </value>
</item> </item>
<item> <item>
...@@ -31,7 +18,9 @@ ...@@ -31,7 +18,9 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>factory</string> </key> <key> <string>factory</string> </key>
...@@ -45,28 +34,16 @@ ...@@ -45,28 +34,16 @@
</tuple> </tuple>
</value> </value>
</item> </item>
<item>
<key> <string>icon</string> </key>
<value> <string>document_icon.gif</string> </value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>Discussion Thread Module</string> </value> <value> <string>Discussion Thread Module</string> </value>
</item> </item>
<item>
<key> <string>immediate_view</string> </key>
<value> <string>Folder_view</string> </value>
</item>
<item> <item>
<key> <string>init_script</string> </key> <key> <string>init_script</string> </key>
<value> <value>
<none/> <none/>
</value> </value>
</item> </item>
<item>
<key> <string>meta_type</string> </key>
<value> <string>ERP5 Folder</string> </value>
</item>
<item> <item>
<key> <string>permission</string> </key> <key> <string>permission</string> </key>
<value> <value>
...@@ -77,23 +54,56 @@ ...@@ -77,23 +54,56 @@
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value> <value> <string>Base Type</string> </value>
</item> </item>
<item>
<key> <string>product</string> </key>
<value> <string>ERP5Type</string> </value>
</item>
<item> <item>
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>Folder</string> </value> <value> <string>Folder</string> </value>
</item> </item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="PersistentMapping" module="Persistence.mapping"/>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/> </pickle>
<tuple/> <pickle>
</tuple> <dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>short_title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -108,12 +118,9 @@ ...@@ -108,12 +118,9 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<tuple> <global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -7,160 +7,53 @@ ...@@ -7,160 +7,53 @@
<pickle> <pickle>
<dictionary> <dictionary>
<item> <item>
<key> <string>_property_domain_dict</string> </key> <key> <string>content_icon</string> </key>
<value> <value>
<dictionary> <none/>
<item>
<key> <string>short_title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</value> </value>
</item> </item>
<item>
<key> <string>acquire_local_roles</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>content_icon</string> </key>
<value> <string>None</string> </value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>ERP5 default document. Supports synchronisation and XML.</string> </value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addXMLObject</string> </value>
</item>
<item>
<key> <string>filter_content_types</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value> <value>
<tuple/> <none/>
</value> </value>
</item> </item>
<item>
<key> <string>icon</string> </key>
<value> <string>document_icon.gif</string> </value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>Discussion Thread</string> </value> <value> <string>Discussion Thread</string> </value>
</item> </item>
<item> <item>
<key> <string>id_generator</string> </key> <key> <string>init_script</string> </key>
<value> <value>
<none/> <none/>
</value> </value>
</item> </item>
<item> <item>
<key> <string>id_group</string> </key> <key> <string>permission</string> </key>
<value> <string>None</string> </value>
</item>
<item>
<key> <string>immediate_view</string> </key>
<value> <string>XMLObject_view</string> </value>
</item>
<item>
<key> <string>init_script</string> </key>
<value> <value>
<none/> <none/>
</value> </value>
</item> </item>
<item>
<key> <string>meta_type</string> </key>
<value> <string>ERP5 XML Object</string> </value>
</item>
<item>
<key> <string>permission</string> </key>
<value> <string>View</string> </value>
</item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value> <value> <string>Base Type</string> </value>
</item> </item>
<item> <item>
<key> <string>product</string> </key> <key> <string>type_class</string> </key>
<value> <string>ERP5Type</string> </value> <value> <string>XMLObject</string> </value>
</item> </item>
<item> <item>
<key> <string>searchable_text_method_id</string> </key> <key> <string>type_interface</string> </key>
<value> <value>
<tuple/> <tuple/>
</value> </value>
</item> </item>
<item> <item>
<key> <string>searchable_text_property_id</string> </key> <key> <string>type_mixin</string> </key>
<value>
<tuple>
<string>title</string>
<string>description</string>
<string>id</string>
<string>reference</string>
<string>short_title</string>
</tuple>
</value>
</item>
<item>
<key> <string>short_title</string> </key>
<value> <string>None</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<tuple>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>short_title</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<tuple>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
<tuple/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <value>
<none/> <tuple/>
</value> </value>
</item> </item>
<item>
<key> <string>property_name</string> </key>
<value> <string>title</string> </value>
</item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
......
<workflow_chain> <workflow_chain>
<chain>
<type>Discussion Post</type>
<workflow>edit_workflow</workflow>
</chain>
<chain> <chain>
<type>Discussion Thread</type> <type>Discussion Thread</type>
<workflow>discussion_thread_workflow, edit_workflow</workflow> <workflow>discussion_thread_workflow, edit_workflow</workflow>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string>ERP5_Forum</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -2,31 +2,10 @@ ...@@ -2,31 +2,10 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/> <global name="ERP5 Form" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <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> <item>
<key> <string>_objects</string> </key> <key> <string>_objects</string> </key>
<value> <value>
...@@ -94,8 +73,8 @@ ...@@ -94,8 +73,8 @@
<value> <value>
<list> <list>
<string>my_title</string> <string>my_title</string>
<string>my_text_content</string>
<string>my_source_title</string> <string>my_source_title</string>
<string>my_text_content</string>
</list> </list>
</value> </value>
</item> </item>
......
...@@ -81,6 +81,10 @@ ...@@ -81,6 +81,10 @@
<key> <string>container_getter_id</string> </key> <key> <string>container_getter_id</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>context_getter_id</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -240,6 +244,10 @@ ...@@ -240,6 +244,10 @@
<key> <string>container_getter_id</string> </key> <key> <string>container_getter_id</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>context_getter_id</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -385,7 +393,7 @@ ...@@ -385,7 +393,7 @@
</item> </item>
<item> <item>
<key> <string>base_category</string> </key> <key> <string>base_category</string> </key>
<value> <string>Source</string> </value> <value> <string>source</string> </value>
</item> </item>
<item> <item>
<key> <string>catalog_index</string> </key> <key> <string>catalog_index</string> </key>
...@@ -401,6 +409,10 @@ ...@@ -401,6 +409,10 @@
<key> <string>container_getter_id</string> </key> <key> <string>container_getter_id</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>context_getter_id</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>css_class</string> </key> <key> <string>css_class</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -486,7 +498,7 @@ ...@@ -486,7 +498,7 @@
<value> <value>
<list> <list>
<tuple> <tuple>
<string>person</string> <string>Person</string>
<string>Person</string> <string>Person</string>
</tuple> </tuple>
</list> </list>
......
...@@ -50,27 +50,35 @@ ...@@ -50,27 +50,35 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>person = context.ERP5Site_getAuthenticatedMemberPersonValue\n <value> <string># Example code:\n
\n
# Import a standard function, and get the HTML request and response objects.\n
from Products.PythonScripts.standard import html_quote\n
request = container.REQUEST\n
response = request.response\n
\n
person = context.ERP5Site_getAuthenticatedMemberPersonValue()\n
translateString = context.Base_translateString\n
\n \n
discussion_post = context.newContent(\n discussion_post = context.newContent(\n
title=title,\n title=title,\n
text_content=text_content,\n text_content=text_content,\n
source_value=person,\n source_value=person,\n
portal_type=\'Discussion Post\'\n portal_type="Discussion Post"\n
)\n )\n
\n
if batch_mode:\n if batch_mode:\n
return discussion_post\n return discussion_post\n
\n \n
translateString = context.Base_translateString\n portal_status_message = translateString("New reply created.")\n
\n \n
portal_status_message = translateString(\'New reply created.\')\n
context.Base_redirect(\'view\',\n context.Base_redirect(\'view\',\n
keep_items = dict(portal_status_message=portal_status_message))\n keep_items = dict(portal_status_message=portal_status_message))\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>title, text_content, form_id, batch_mode=False, **kw</string> </value> <value> <string>title, text_content, form_id, batch_mode=False,**kw</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
...@@ -50,32 +50,39 @@ ...@@ -50,32 +50,39 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>person = context.ERP5Site_getAuthenticatedMemberPersonValue()\n <value> <string># Example code:\n
\n
# Import a standard function, and get the HTML request and response objects.\n
from Products.PythonScripts.standard import html_quote\n
#request = container.REQUEST\n
#response = request.response\n
\n
person = context.ERP5Site_getAuthenticatedMemberPersonValue()\n
translateString = context.Base_translateString\n translateString = context.Base_translateString\n
\n \n
discussion_thread = context.newContent(\n discussion_thread = context.newContent(\n
title=title,\n title = title,\n
text_content=text_content,\n text_content=text_content,\n
portal_type=\'Discussion Thread\'\n portal_type="Discussion Thread"\n
)\n )\n
\n
discussion_post = discussion_thread.newContent(\n discussion_post = discussion_thread.newContent(\n
title=title,\n title=title,\n
text_content=text_content,\n text_content=text_content,\n
source_value=person,\n source_value=person,\n
portal_type=\'Discussion Post\'\n portal_type="Discussion Post"\n
)\n )\n
\n \n
discussion_thread.publish()\n discussion_thread.publish()\n
portal_status_message = translateString(\n portal_status_message = translateString(\n
\'New post created. Your post will be reviewed for approval..\'\n "New post created"\n
)\n )\n
\n \n
if batch_mode:\n if batch_mode:\n
# For unit tests\n
return discussion_thread\n return discussion_thread\n
\n \n
return discussion_thread.Base_redirect(\'view\',\n return discussion_thread.Base_redirect(\'view\',\n
keep_items = dict(portal_status_message=portal_status_message), **kw)\n keep_items=dict(portal_status_message=portal_status_message), **kw)\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
...@@ -2,31 +2,10 @@ ...@@ -2,31 +2,10 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/> <global name="ERP5 Form" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <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> <item>
<key> <string>_objects</string> </key> <key> <string>_objects</string> </key>
<value> <value>
...@@ -93,8 +72,8 @@ ...@@ -93,8 +72,8 @@
<key> <string>left</string> </key> <key> <string>left</string> </key>
<value> <value>
<list> <list>
<string>my_title</string> <string>your_title</string>
<string>my_text_content</string> <string>your_text_content</string>
</list> </list>
</value> </value>
</item> </item>
...@@ -133,7 +112,7 @@ ...@@ -133,7 +112,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>New Reply</string> </value> <value> <string>New reply</string> </value>
</item> </item>
<item> <item>
<key> <string>unicode_mode</string> </key> <key> <string>unicode_mode</string> </key>
......
...@@ -2,31 +2,10 @@ ...@@ -2,31 +2,10 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/> <global name="ERP5 Form" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <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> <item>
<key> <string>_objects</string> </key> <key> <string>_objects</string> </key>
<value> <value>
...@@ -39,7 +18,7 @@ ...@@ -39,7 +18,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Use this dialog to create a reply and associate it with a post.</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>edit_order</string> </key> <key> <string>edit_order</string> </key>
...@@ -109,7 +88,7 @@ ...@@ -109,7 +88,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>DiscussionModuleThread_viewAddThreadDialog</string> </value> <value> <string>DiscussionThreadModule_viewAddThreadDialog</string> </value>
</item> </item>
<item> <item>
<key> <string>method</string> </key> <key> <string>method</string> </key>
...@@ -133,7 +112,7 @@ ...@@ -133,7 +112,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>New Post</string> </value> <value> <string>New Threads</string> </value>
</item> </item>
<item> <item>
<key> <string>unicode_mode</string> </key> <key> <string>unicode_mode</string> </key>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>my_text_content</string> </value> <value> <string>your_text_content</string> </value>
</item> </item>
<item> <item>
<key> <string>message_values</string> </key> <key> <string>message_values</string> </key>
...@@ -237,7 +237,7 @@ ...@@ -237,7 +237,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Text Content</string> </value> <value> <string>Content</string> </value>
</item> </item>
<item> <item>
<key> <string>truncate</string> </key> <key> <string>truncate</string> </key>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>my_title</string> </value> <value> <string>your_title</string> </value>
</item> </item>
<item> <item>
<key> <string>message_values</string> </key> <key> <string>message_values</string> </key>
......
...@@ -2,31 +2,10 @@ ...@@ -2,31 +2,10 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/> <global name="ERP5 Form" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <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> <item>
<key> <string>_objects</string> </key> <key> <string>_objects</string> </key>
<value> <value>
...@@ -110,7 +89,7 @@ ...@@ -110,7 +89,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>DiscussionThreadModule_viewDiscussionThreadList</string> </value> <value> <string>DiscussionThreadModule_viewDiscussionThreadsList</string> </value>
</item> </item>
<item> <item>
<key> <string>method</string> </key> <key> <string>method</string> </key>
...@@ -118,7 +97,7 @@ ...@@ -118,7 +97,7 @@
</item> </item>
<item> <item>
<key> <string>name</string> </key> <key> <string>name</string> </key>
<value> <string>DiscussionThreadModule_viewDiscussionThreadList</string> </value> <value> <string>DiscussionThreadModule_viewDiscussionThreadsList</string> </value>
</item> </item>
<item> <item>
<key> <string>pt</string> </key> <key> <string>pt</string> </key>
......
...@@ -83,21 +83,25 @@ ...@@ -83,21 +83,25 @@
<string>Title</string> <string>Title</string>
</tuple> </tuple>
<tuple> <tuple>
<string>translated_validation_state</string> <string>translated_validation_state_title</string>
<string>State</string> <string>State</string>
</tuple> </tuple>
<tuple> <tuple>
<string>rating</string> <string>rating</string>
<string>Rating</string> <string>rating</string>
</tuple> </tuple>
<tuple> <tuple>
<string>creation_date</string> <string>creation_date</string>
<string>Date</string> <string>creation_date</string>
</tuple> </tuple>
<tuple> <tuple>
<string>count</string> <string>count</string>
<string>Reply</string> <string>Reply</string>
</tuple> </tuple>
<tuple>
<string>subject_list</string>
<string>subject_list</string>
</tuple>
</list> </list>
</value> </value>
</item> </item>
...@@ -114,8 +118,8 @@ ...@@ -114,8 +118,8 @@
<value> <value>
<list> <list>
<tuple> <tuple>
<string>Discussion Thread</string> <string>Discussion Threads</string>
<string>Discussion Thread</string> <string>Discussion Threads</string>
</tuple> </tuple>
</list> </list>
</value> </value>
...@@ -129,7 +133,7 @@ ...@@ -129,7 +133,7 @@
<value> <value>
<list> <list>
<tuple> <tuple>
<string>Date</string> <string>creation_date</string>
<string>asc</string> <string>asc</string>
</tuple> </tuple>
</list> </list>
......
...@@ -261,16 +261,13 @@ ...@@ -261,16 +261,13 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="TALESMethod" module="Products.Formulator.TALESField"/>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item> <item>
<key> <string>_text</string> </key> <key> <string>_text</string> </key>
<value> <string>python: len(cell.objectIds())</string> </value> <value> <string>python:len(cell.objectids())</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -2,31 +2,10 @@ ...@@ -2,31 +2,10 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/> <global name="ERP5 Form" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <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> <item>
<key> <string>_objects</string> </key> <key> <string>_objects</string> </key>
<value> <value>
...@@ -80,9 +59,7 @@ ...@@ -80,9 +59,7 @@
<item> <item>
<key> <string>center</string> </key> <key> <string>center</string> </key>
<value> <value>
<list> <list/>
<string>my_listbox</string>
</list>
</value> </value>
</item> </item>
<item> <item>
...@@ -97,7 +74,8 @@ ...@@ -97,7 +74,8 @@
<list> <list>
<string>my_title</string> <string>my_title</string>
<string>my_rating</string> <string>my_rating</string>
<string>my_text_content</string> <string>my_listbox</string>
<string>my_subject_list</string>
</list> </list>
</value> </value>
</item> </item>
...@@ -105,7 +83,7 @@ ...@@ -105,7 +83,7 @@
<key> <string>right</string> </key> <key> <string>right</string> </key>
<value> <value>
<list> <list>
<string>my_translated_validation_state</string> <string>my_translated_validation_state_title</string>
</list> </list>
</value> </value>
</item> </item>
......
...@@ -94,15 +94,11 @@ ...@@ -94,15 +94,11 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>full_text_search_key</string> </key> <key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>full_text_search_key_script</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>global_attributes</string> </key> <key> <string>global_search_column</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -130,7 +126,7 @@ ...@@ -130,7 +126,7 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>page_navigation_mode</string> </key> <key> <string>page_navigation_template</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -185,6 +181,10 @@ ...@@ -185,6 +181,10 @@
<key> <string>stat_method</string> </key> <key> <string>stat_method</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>style_columns</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -269,15 +269,11 @@ ...@@ -269,15 +269,11 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>full_text_search_key</string> </key> <key> <string>global_attributes</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>full_text_search_key_script</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>global_attributes</string> </key> <key> <string>global_search_column</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -305,7 +301,7 @@ ...@@ -305,7 +301,7 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>page_navigation_mode</string> </key> <key> <string>page_navigation_template</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
...@@ -360,6 +356,10 @@ ...@@ -360,6 +356,10 @@
<key> <string>stat_method</string> </key> <key> <string>stat_method</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>style_columns</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -399,15 +399,19 @@ ...@@ -399,15 +399,19 @@
<list> <list>
<tuple> <tuple>
<string>title</string> <string>title</string>
<string>Title</string> <string>title</string>
</tuple> </tuple>
<tuple> <tuple>
<string>translated_validation_state_title</string> <string>translated_validation_state_title</string>
<string>State</string> <string>translated_validation_state_title</string>
</tuple> </tuple>
<tuple> <tuple>
<string>rating</string> <string>rating</string>
<string>Rating</string> <string>rating</string>
</tuple>
<tuple>
<string>subject_list</string>
<string>subject_list</string>
</tuple> </tuple>
</list> </list>
</value> </value>
...@@ -470,20 +474,16 @@ ...@@ -470,20 +474,16 @@
<key> <string>external_validator</string> </key> <key> <string>external_validator</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>full_text_search_key</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>full_text_search_key_script</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>global_attributes</string> </key> <key> <string>global_attributes</string> </key>
<value> <value>
<list/> <list/>
</value> </value>
</item> </item>
<item>
<key> <string>global_search_column</string> </key>
<value> <string></string> </value>
</item>
<item> <item>
<key> <string>hidden</string> </key> <key> <string>hidden</string> </key>
<value> <int>0</int> </value> <value> <int>0</int> </value>
...@@ -513,12 +513,12 @@ ...@@ -513,12 +513,12 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>page_navigation_mode</string> </key> <key> <string>page_navigation_template</string> </key>
<value> <string>slider</string> </value> <value> <string>slider</string> </value>
</item> </item>
<item> <item>
<key> <string>page_template</string> </key> <key> <string>page_template</string> </key>
<value> <string>ListBox_ThreadAsHTML</string> </value> <value> <string>ListBox_threadAsHTML</string> </value>
</item> </item>
<item> <item>
<key> <string>portal_types</string> </key> <key> <string>portal_types</string> </key>
...@@ -542,7 +542,7 @@ ...@@ -542,7 +542,7 @@
</item> </item>
<item> <item>
<key> <string>search</string> </key> <key> <string>search</string> </key>
<value> <int>1</int> </value> <value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>search_columns</string> </key> <key> <string>search_columns</string> </key>
...@@ -552,11 +552,11 @@ ...@@ -552,11 +552,11 @@
</item> </item>
<item> <item>
<key> <string>select</string> </key> <key> <string>select</string> </key>
<value> <int>1</int> </value> <value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>selection_name</string> </key> <key> <string>selection_name</string> </key>
<value> <string>search_selection</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>sort</string> </key> <key> <string>sort</string> </key>
...@@ -580,6 +580,12 @@ ...@@ -580,6 +580,12 @@
<key> <string>stat_method</string> </key> <key> <string>stat_method</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item>
<key> <string>style_columns</string> </key>
<value>
<list/>
</value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Threads</string> </value> <value> <string>Threads</string> </value>
...@@ -604,10 +610,7 @@ ...@@ -604,10 +610,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="Method" module="Products.Formulator.MethodField"/>
<global name="Method" module="Products.Formulator.MethodField"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -620,10 +623,7 @@ ...@@ -620,10 +623,7 @@
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<tuple> <global name="Method" module="Products.Formulator.MethodField"/>
<global name="Method" module="Products.Formulator.MethodField"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ListField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_subject_list</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>unknown_selection</string> </key>
<value> <string>You selected an item that was not in the list.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>items</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra_item</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>first_item</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>items</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>5</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Subjects</string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="StringField" module="Products.Formulator.StandardFields"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>my_text_content</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
<item>
<key> <string>required_not_found</string> </key>
<value> <string>Input is required but no input given.</string> </value>
</item>
<item>
<key> <string>too_long</string> </key>
<value> <string>Too much input was given.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>alternate_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_maxwidth</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>display_width</string> </key>
<value> <int>20</int> </value>
</item>
<item>
<key> <string>editable</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>enabled</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>external_validator</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>max_length</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>required</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Text Content</string> </value>
</item>
<item>
<key> <string>truncate</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>unicode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>whitespace_preserve</string> </key>
<value> <int>0</int> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<dictionary> <dictionary>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>my_translated_validation_state</string> </value> <value> <string>my_translated_validation_state_title</string> </value>
</item> </item>
<item> <item>
<key> <string>message_values</string> </key> <key> <string>message_values</string> </key>
...@@ -209,7 +209,7 @@ ...@@ -209,7 +209,7 @@
</item> </item>
<item> <item>
<key> <string>editable</string> </key> <key> <string>editable</string> </key>
<value> <int>1</int> </value> <value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>enabled</string> </key> <key> <string>enabled</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</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>
<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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<tal:block metal:define-macro="main"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal"\n
xmlns:i18n="http://xml.zope.org/namespaces/i18n"\n
tal:define="listbox_max_lines python: int(here.getMaxLineNumber());\n
total_line python: int(here.total_size);\n
current_page python: int(here.current_page) + 1;\n
current_page_max python: listbox_max_lines * current_page;\n
current_page_start python: (listbox_max_lines * (current_page - 1)) + 1;\n
current_page_stop python: (total_line < current_page_max) and total_line or current_page_max;\n
your_search_text python:here.getParamDict().get(\'your_search_text\', None)">\n
\n
<!-- ListBox (search mode) starts here. -->\n
<input type="hidden" \n
name="list_selection_name" \n
value="default" \n
tal:attributes="value selection_name" />\n
<input tal:condition="md5_string" \n
type="hidden" \n
name="md5_object_uid_list" \n
value="checksum" \n
tal:attributes="value md5_string" />\n
<input type="hidden" name="listbox_uid" value="1"/>\n
\n
<input tal:condition="python:form_id and is_gadget_mode" type="hidden" name="gadget_form_id" tal:attributes="value form_id" />\n
\n
<tal:block tal:define="expand python: 1;\n
date_renderer python: context.getContext().ERP5Site_viewSearchResult.listbox_modification_date.render_pdf;">\n
<tal:block metal:use-macro="template/macros/ListBoxContainer">\n
<tal:block metal:fill-slot="ListBoxBody">\n
\n
<div class="search result">\n
\n
<!-- Advanced Search header -->\n
<div class="centeredInner searchBar extendedSearchBar"\n
tal:define="search_default_text python:context.getContext().Base_translateString(\'Search\')"\n
tal:condition="python:not is_gadget_mode and show_search_line">\n
<input name="top_your_search_text" size="40" value="" type="text"\n
value="Search" tal:attributes="value your_search_text | search_default_text;\n
onfocus string:if (this.value==\'${search_default_text}\') this.value=\'\';"\n
\n
onfocus="this.value=\'\';"\n
onkeypress="submitFormOnEnter(event, this.form, \'ERP5Site_processAdvancedSearch\');"/>\n
<input class="button" i18n:domain="ui" i18n:attributes="value"\n
value="Search" name="ERP5Site_processAdvancedSearch:method" type="submit" />\n
</div>\n
\n
<!-- Result Header -->\n
<div class="resultList">\n
<div class="searchResultHeader" >\n
\n
<span class="left" \n
tal:define="table_form_id request/current_form_id | form_id">\n
\n
<a tal:condition="not:is_gadget_mode"\n
tal:attributes="href string:${context_url}/${table_form_id}?list_style=table">\n
<img id="style_toggle_icon" \n
tal:attributes="src string:${portal_url_string}/images/search_style_icon.png" \n
alt="Search Icon"\n
height="16"\n
title="Table mode"\n
i18n:domain="ui" i18n:attributes="title"/>\n
</a>\n
\n
<input tal:condition="python:not is_gadget_mode and (is_domain_tree_supported or is_report_tree_supported)"\n
type="image" src="text_block.png" id="listbox_flat_list_mode"\n
title="Flat List" name="setFlatListMode:method"\n
value="1" alt="Flat List"\n
tal:attributes="src string:${portal_url_string}/images/text_block.png;\n
id string:${field_id}_flat_list_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
<input tal:condition="python: not is_gadget_mode and is_report_tree_supported"\n
type="image" src="view_tree.png" id="listbox_report_tree_mode"\n
title="Report Tree" name="setReportTreeMode:method"\n
value="1" alt="Report Tree"\n
tal:attributes="src string:${portal_url_string}/images/view_tree.png;\n
id string:${field_id}_report_tree_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
<input tal:condition="python: not is_gadget_mode and is_domain_tree_supported"\n
type="image" src="view_choose.png" id="listbox_domain_tree_mode"\n
title="Domain Tree" name="setDomainTreeMode:method"\n
value="1" alt="Domain Tree"\n
tal:attributes="src string:${portal_url_string}/images/view_choose.png;\n
id string:${field_id}_domain_tree_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
\n
<input tal:condition="python:not is_gadget_mode and (is_domain_tree_supported or is_report_tree_supported)"\n
type="image" src="images/showall.png" id="listbox_reset_selection"\n
title="Show All" name="Folder_show:method"\n
id="listbox_reset_selection"\n
value="1" alt="Flat List"\n
tal:attributes="src string:${portal_url_string}/images/showall.png;"\n
i18n:domain="ui" i18n:attributes="title" />\n
\n
<!-- supporting table mode for gadget mode -->\n
<button tal:condition="is_gadget_mode"\n
tal:define = "params python: {\'list_style\':\'table\'}"\n
title="Table mode"\n
type="button"\n
tal:attributes="onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+table_form_id,box,box_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img id="style_toggle_icon"\n
alt="Table Mode Icon"\n
tal:attributes="src string:${portal_url_string}/images/search_style_icon.png" \n
height="16"/>\n
</button>\n
\n
<a tal:attributes="id string:${field_id}_title; href here/getListActionUrl"\n
tal:condition="python: here.field.get_value(\'list_action\')">\n
<em i18n:translate="" \n
i18n:domain="ui" tal:content="here/getTitle" />\n
</a>\n
<tal:block tal:condition="python: not here.field.get_value(\'list_action\')">\n
<em i18n:translate="" \n
i18n:domain="ui" tal:content="here/getTitle" />\n
</tal:block>\n
\n
<!-- supporting domain tree mode for gadget mode (disabled)-->\n
<!--\n
<br tal:condition="is_gadget_mode"/>\n
<button tal:condition="python: is_gadget_mode and (is_domain_tree_supported or is_report_tree_supported)"\n
tal:define = "params python: {\'setFlatListMode:method\':1}"\n
id="listbox_flat_list_mode"\n
type="button"\n
title="Flat List"\n
alt="Flat List"\n
tal:attributes="id string:${field_id}_flat_list_mode;\n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,box_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img src="text_block.png"\n
tal:attributes="src string:${portal_url_string}/images/text_block.png;"/></button>\n
\n
<button tal:condition="python: is_gadget_mode and is_report_tree_supported"\n
tal:define = "params python: {\'setReportTreeMode:method\':1}"\n
style="cursor:pointer;" id="listbox_report_tree_mode"\n
type="button"\n
title="Report Tree"\n
alt="Report Tree"\n
tal:attributes="id string:${field_id}_report_tree_mode;\n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,box_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img src="view_tree.png"\n
tal:attributes="src string:${portal_url_string}/images/view_tree.png;"/></button>\n
\n
<button tal:condition="python: is_gadget_mode and is_domain_tree_supported"\n
tal:define = "params python: {\'setDomainTreeMode:method\':\'1\'}"\n
style="cursor:pointer;" id="listbox_domain_tree_mode"\n
type="button"\n
title="Domain Tree"\n
alt="Domain Tree"\n
tal:attributes="id string:${field_id}_domain_tree_mode;\n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,box_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img src="view_choose.png"\n
tal:attributes="src string:${portal_url_string}/images/view_choose.png;"/></button>\n
-->\n
</span>\n
\n
<span class="right">\n
<tal:block tal:condition="python: total_line > 0"\n
tal:replace="structure python: real_context.Base_translateString(\'Results <em>${start} - ${stop}</em> of <em>${total}</em>.\', mapping=dict(start=current_page_start, stop=current_page_stop, total=total_line))"/>\n
\n
<span tal:condition="python: total_line == 0" \n
class="warning" \n
i18n:translate="" \n
i18n:domain="ui">No result !</span>\n
</span>\n
<div class="clear"></div>\n
</div>\n
\n
<!-- Found results -->\n
<tal:block \n
tal:condition="is_web_mode">\n
<tal:block tal:define="global website python: real_context.getWebSiteValue()" />\n
</tal:block>\n
<table cellpadding="0" cellspacing="0" class="listbox search">\n
<tal:block tal:repeat="line line_list">\n
<tr tal:define="css python: test(repeat[\'line\'].index % 2, \'DataB\', \'DataA\');\n
obj line/getObject;\n
url obj/absolute_url;\n
portal_type obj/getPortalType;\n
is_document python:portal_type in\n
real_context.getPortalDocumentTypeList() and portal_type != \'Web Page\';\n
hidden_pop_dom_id string:dom_popup_${field_id}_${repeat/line/index};\n
details_dom_id string:${field_id}_search_details_${repeat/line/index};"\n
tal:attributes="id string:${field_id}_data_line_${repeat/line/index}; \n
class python: \'%s tbody\' % css;">\n
\n
<td class="icon">\n
<a tal:condition="is_document"\n
tal:attributes="href string: ${url}/Base_download"\n
i18n:translate="" \n
i18n:domain="ui" \n
title="Download Document">\n
<img tal:attributes="src obj/getIcon"\n
alt="Document Icon"/>\n
</a>\n
<img tal:condition="not: is_document"\n
tal:attributes="src obj/getIcon"\n
alt="Object Icon"\n
/>\n
</td>\n
\n
<td>\n
<div class="item_nohighlight"\n
tal:attributes="onmouseover python: is_web_mode and \'showPopik(\\\'%s\\\', true)\' % hidden_pop_dom_id or None;\n
onmouseout python: is_web_mode and \'showPopik(\\\'%s\\\', false)\' % hidden_pop_dom_id or None;">\n
\n
<div class="search_popup" \n
style="z-index:100;"\n
tal:condition="is_web_mode" \n
tal:attributes="id hidden_pop_dom_id">\n
<span tal:replace="structure python: obj.Document_getPopupInfo(website)"/>\n
</div>\n
\n
<div>\n
<a tal:attributes="href string:${url}/view">\n
<span class="search_result_title" tal:content="python: obj.getTitle() or (hasattr(obj, \'getReference\') and obj.getReference()) or obj.getId()" />\n
<span class="search_result_portal_type" tal:condition="python:portal_type != \'Web Page\'" tal:content="obj/getTranslatedPortalType" />\n
</a>\n
</div>\n
\n
<span class="searchDetails found" \n
tal:content="structure python: obj.Base_showFoundText(selection=selection)"/>\n
\n
<div tal:condition="is_web_mode"\n
class="searchDetails coordinates">\n
<tal:block tal:condition="obj/getReference|nothing">\n
<a tal:attributes="href python: \'%s/view\' % website.getPermanentURL(obj)"\n
tal:content="obj/getReference|nothing"/>&nbsp;-&nbsp;\n
</tal:block>\n
\n
<tal:block tal:repeat="section python: website.getWebSectionValueList(obj)">\n
<a href="#" \n
tal:content="section/getCompactTranslatedTitle"\n
tal:attributes="href python: \'%s/view\' %section.absolute_url()"/>\n
&nbsp;-&nbsp;\n
</tal:block>\n
\n
\n
<tal:block tal:repeat="owner obj/Base_getOwnerInfoList">\n
<a tal:content="owner/title" \n
tal:attributes="href owner/url"/>\n
&nbsp;-&nbsp;\n
</tal:block>\n
<a tal:content="python: date_renderer(obj.getModificationDate())" \n
tal:attributes="href string: ${url}/Base_viewHistory"/>\n
</div>\n
<div tal:condition="not: is_web_mode"\n
class="searchDetails coordinates">\n
<tal:block tal:condition="obj/getReference|nothing">\n
<a tal:attributes="href string: ${url}/view"\n
tal:content="obj/getReference|nothing"/>&nbsp;-&nbsp;\n
</tal:block>\n
<a tal:content="python: date_renderer(obj.getModificationDate())" \n
tal:attributes="href string: ${url}/Base_viewHistory"/>\n
</div>\n
</div>\n
</td>\n
</tr>\n
</tal:block>\n
<tr>\n
<td class="pageNavigation" colspan="2" style="white-space: nowrap; vertical-align: middle; text-align: right;">\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/page_navigation" />\n
</td>\n
</tr>\n
</table>\n
</div>\n
\n
<!-- Advanced Search footer -->\n
<div class="centeredInner searchBar extendedSearchBar" \n
tal:condition="python: not is_gadget_mode and show_search_line">\n
<input name="bottom_your_search_text" size="40" value="" type="text"\n
onkeypress="submitFormOnEnter(event, this.form, \'ERP5Site_processAdvancedSearchBottom\');"\n
tal:attributes="value your_search_text" />\n
<input class="button" i18n:domain="ui" i18n:attributes="value"\n
value="Search" name="ERP5Site_processAdvancedSearchBottom:method" type="submit" />\n
</div>\n
\n
<!-- Advanced Search footer for gadgets -->\n
<div class="centeredInner searchBar extendedSearchBar" \n
tal:condition="python: is_gadget_mode and show_search_line">\n
<input tal:define ="params python: {\'ERP5Site_processAdvancedSearchBottom:method\':\'\',\'bottom_your_search_text\':\'this.value\'};"\n
name="bottom_your_search_text" size="25" value="" type="text"\n
tal:attributes=\'value your_search_text;\n
onkeypress python:"if(event.keyCode==13){" + real_context.KnowledgePad_generateAjaxCall(context_url+"/"+form_id,box,box_id,params).replace("\\"this.value\\"","this.value")+ "return false;;}"\'/>\n
</div>\n
\n
</div>\n
</tal:block>\n
</tal:block>\n
</tal:block>\n
<!-- ListBox ends here. -->\n
\n
</tal:block>\n
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ListBox_asSearchStyleHTML</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Listboxes in search engine style</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</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>
<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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<tal:block metal:define-macro="main"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal"\n
xmlns:i18n="http://xml.zope.org/namespaces/i18n">\n
\n
<tal:block tal:define="expand python: 1">\n
<tal:block metal:use-macro="template/macros/ListBoxContainer">\n
<tal:block metal:fill-slot="ListBoxBody">\n
<div class="ListSummary">\n
<table cellpadding="0" cellspacing="0"\n
summary="This table contains the listbox headers">\n
<tr>\n
<td style="height: 10px">\n
<img src="Left.png" alt="left"\n
tal:attributes="src string:${portal_url_string}/images/Left.png" />\n
</td>\n
<td class="Top" colspan="2" style="height: 10px">\n
<img src="spacer.png" style="width: 5px; height: 10px;" alt="spacer"\n
tal:attributes="src string:${portal_url_string}/images/spacer.png" />\n
</td>\n
<td class="Top" colspan="3" style="height: 10px">\n
<img src="spacer.png" style="width: 5px; height: 10px" alt="spacer"\n
tal:attributes="src string:${portal_url_string}/images/spacer.png" />\n
</td>\n
</tr>\n
<tr id="listbox_title_line" class="listbox_title_line" \n
tal:attributes="id string:${field_id}_title_line">\n
<td class="Left" style="width: 17px">\n
<img src="spacer.png" style="width: 5px; height: 5px" alt="spacer"\n
tal:attributes="src string:${portal_url_string}/images/spacer.png" />\n
</td>\n
\t <td style="white-space: nowrap; vertical-align: middle"\n
tal:condition="not: is_gadget_mode">\n
<input tal:condition="python: is_domain_tree_supported or is_report_tree_supported"\n
type="image" src="text_block.png" id="listbox_flat_list_mode"\n
class="listbox_flat_list_mode"\n
title="Flat List" name="setFlatListMode:method"\n
value="1" alt="Flat List"\n
tal:attributes="src string:${portal_url_string}/images/text_block.png;\n
id string:${field_id}_flat_list_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
<input tal:condition="is_report_tree_supported"\n
type="image" src="view_tree.png" id="listbox_report_tree_mode"\n
title="Report Tree" name="setReportTreeMode:method"\n
value="1" alt="Report Tree" class="listbox_report_tree_mode"\n
tal:attributes="src string:${portal_url_string}/images/view_tree.png;\n
id string:${field_id}_report_tree_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
<input tal:condition="is_domain_tree_supported"\n
type="image" src="view_choose.png" id="listbox_domain_tree_mode"\n
title="Domain Tree" name="setDomainTreeMode:method"\n
value="1" alt="Domain Tree" class="listbox_domain_tree_mode"\n
tal:attributes="src string:${portal_url_string}/images/view_choose.png;\n
id string:${field_id}_domain_tree_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
</td>\n
<td style="width: 100%; vertical-align: middle">\n
&nbsp;\n
<a class="listbox_title"\n
tal:attributes="id string:${field_id}_title; href here/getListActionUrl"\n
tal:condition="python: here.field.get_value(\'list_action\')">\n
<tal:block i18n:translate="" \n
i18n:domain="ui" tal:content="here/getTitle" />:\n
</a>\n
<tal:block tal:condition="python: not here.field.get_value(\'list_action\')">\n
<span class="listbox_title" i18n:translate="" \n
i18n:domain="ui" tal:content="here/getTitle" />:\n
</tal:block>\n
<span id="listbox_record_number" class="listbox_record_number"\n
tal:attributes="id string:${field_id}_record_number"\n
i18n:translate="" i18n:domain="ui"><tal:block tal:replace="here/total_size" i18n:name="number">0</tal:block> records</span>\n
<span id="listbox_item_number" class="listbox_item_number"\n
tal:attributes="id string:${field_id}_item_number"\n
tal:condition="show_select_column"\n
i18n:translate="" i18n:domain="ui"> - <tal:block tal:replace="python: len(here.getCheckedUidList())" i18n:name="number">0</tal:block> items selected</span>\n
</td>\n
\n
<td class="pageNavigation" style="white-space: nowrap; vertical-align: middle; text-align: center;">\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/page_navigation" />\n
</td>\n
</tr>\n
</table>\n
</div>\n
<div class="listbox">\n
<table cellpadding="0" cellspacing="0"\n
summary="This table contains the listbox content">\n
<tr id="listbox_label_line" class="listbox_label_line"\n
tal:attributes="id string:${field_id}_label_line">\n
<td tal:condition="is_report_tree_mode"\n
class="Data" style="width: 50px; text-align: left; vertical-align: middle">\n
<select name="report_root_url"\n
tal:attributes="onchange string:submitAction(this.form, \'${context_url}/setReportRoot\')">\n
<tal:block tal:repeat="c here/getReportRootList">\n
<option value="base_domain"\n
tal:define="path python: c[0]; title python: c[1]"\n
tal:attributes="selected python: path == here.getSelectedReportPath(); value path"\n
tal:content="title" i18n:domain="ui" i18n:translate="">Domain</option>\n
</tal:block>\n
</select>\n
</td>\n
<td class="AnchorColumn Data" tal:condition="show_anchor_column">&nbsp;</td>\n
<td tal:condition="show_select_column"\n
class="Data" style="width: 50px; text-align: center; vertical-align: middle">\n
<input id="listbox_check_all" type="image"\n
name="checkAll:method" value="1"\n
src="checkall.png" alt="Check All" title="Check All"\n
class="listbox_check_all"\n
tal:attributes="id string:${field_id}_check_all;\n
name string:${field_id}_checkAll:method;\n
src string:${portal_url_string}/images/checkall.png"\n
i18n:domain="ui" i18n:attributes="title" />&nbsp;<input id="listbox_uncheck_all" type="image" name="uncheckAll:method" value="1"\n
src="%(portal_url_string)s/images/decheckall.png" style="border: 0" alt="Uncheck All" title="Uncheck All" class="listbox_uncheck_all"\n
tal:attributes="id string:${field_id}_uncheck_all;\n
name string:${field_id}_uncheckAll:method;\n
src string:${portal_url_string}/images/decheckall.png"\n
i18n:domain="ui" i18n:attributes="title" />\n
</td>\n
<tal:block tal:repeat="value here/getLabelValueList">\n
<tal:block tal:define="sql python: value[0];\n
title python: value[1];\n
sort_order python: value[2]">\n
<td tal:condition="sql" class="Data">\n
<button type="submit" class="sort_button"\n
tal:condition="not: is_gadget_mode"\n
name="setSelectionQuickSortOrder:method"\n
tal:attributes="title string:${title}; \n
value string:${field_id}.${sql}"\n
i18n:domain="ui" i18n:attributes="title">\n
<span tal:content="title" i18n:domain="ui" i18n:translate="">ID</span>\n
</button>\n
<button tal:condition="is_gadget_mode" \n
tal:define ="params python: {\'setSelectionQuickSortOrder:method\':field_id+\'.\'+sql};"\n
type="button" class="sort_button"\n
tal:attributes="title string:${title}; \n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box_relative_url,box_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<span tal:content="title" i18n:domain="ui" i18n:translate="">ID</span>\n
</button>\n
<img tal:condition="python: sort_order == \'ascending\'"\n
src="1bottomarrow.png" alt="Ascending Display" title="Ascending Display"\n
tal:attributes="src string:${portal_url_string}/images/1bottomarrow.png"\n
i18n:domain="ui" i18n:attributes="title" />\n
<img tal:condition="python: sort_order == \'descending\'"\n
src="1toparrow.png" alt="Descending Display" title="Descending Display"\n
tal:attributes="src string:${portal_url_string}/images/1toparrow.png"\n
i18n:domain="ui" i18n:attributes="title" />\n
</td>\n
<td tal:condition="not: sql" class="Data" tal:content="title"\n
i18n:domain="ui" i18n:translate="">\n
ID\n
</td>\n
</tal:block>\n
</tal:block>\n
</tr>\n
\n
<tr tal:condition="python: show_search_line or is_report_tree_mode"\n
id="listbox_search_line" class="listbox_search_line"\n
tal:attributes="id python: show_search_line and (\'%s_search_line\' % field_id) or (\'%s_report_depth_line\' % field_id)">\n
<tal:block tal:condition="is_report_tree_mode">\n
<td class="Data" style="width: 50px; text-align: left; vertical-align: middle" colspan="1"\n
tal:attributes="colspan python: show_search_line and 1 or (len(here.getSelectedColumnList()) + show_select_column + show_anchor_column + 1)"\n
tal:define="selection_index here/getSelectionIndex;\n
index python: selection_index is not None and \'&amp;selection_index=%s\' % selection_index or \'\';\n
is_report_opened python: int(not here.getSelection().isReportOpened());\n
requested_selection_name here/getRequestedSelectionName;\n
url here/getUrl"><tal:block tal:repeat="i python: range(0, 6)">&nbsp;<a href="?selection_name=default&amp;selection_index=0&amp;report_depth:int=0"\n
tal:attributes="href string:${url}?selection_name=${requested_selection_name}${index}&amp;report_depth:int=${i}"\n
tal:content="i">0</a></tal:block>&nbsp;-&nbsp;<a href="?selection_name=default&amp;selection_index=0&amp;is_report_opened:int=0"\n
tal:attributes="href string:${url}?selection_name=${requested_selection_name}${index}&amp;is_report_opened:int=${is_report_opened}"\n
tal:content="python: is_report_opened and \'Show\' or \'Hide\'"\n
i18n:domain="ui" i18n:translate="">Show</a>\n
</td>\n
</tal:block>\n
<td class="AnchorColumn" tal:condition="show_anchor_column">&nbsp;</td>\n
<td tal:condition="python: show_select_column and show_search_line"\n
class="Data" style="width: 50px; text-align: center; vertical-align: middle">\n
<input id="listbox_select" type="image" src="exec16.png"\n
title="Action" alt="Action" name="Base_doSelect:method"\n
class="listbox_select"\n
tal:attributes="id string:${field_id}_select;\n
src string:${portal_url_string}/images/exec16.png"\n
i18n:domain="ui" i18n:attributes="title" />\n
</td>\n
<tal:block tal:condition="show_search_line"\n
tal:repeat="value here/getSearchValueList">\n
<td class="DataB" style="padding-right: 5px"\n
tal:define="alias python: value[0];\n
param python: value[1];\n
search_field python: value[2]">\n
<span tal:condition="alias" style="font-size: -3">\n
<tal:block tal:condition="python: search_field is not None"\n
tal:replace="structure python: search_field.render(value = param, key = alias)" />\n
<tal:block tal:condition="python: search_field is None">\n
<input tal:condition="not: is_gadget_mode" name="id" size="8" value=""\n
tal:attributes="name alias; value param" style="width: 100%"\n
onkeypress="submitFormOnEnter(event, this.form, \'Base_doSelect\');" />\n
<input tal:condition="is_gadget_mode" \n
tal:define ="params python: {alias:\'this.value\'};"\n
size="8" type="textarea" \n
tal:attributes=\'value python: selection.getParams().get(alias,"");\n
onkeypress python:"if(event.keyCode==13){" + real_context.KnowledgePad_generateAjaxCall(context_url+"/"+form_id,box_relative_url,box_id,params).replace("\\"this.value\\"","this.value")+ "return false;;}"\'/>\n
</tal:block>\n
</span>\n
</td>\n
</tal:block>\n
</tr>\n
<tal:block tal:repeat="line line_list" tal:define="checked_uid_set here/getCheckedUidSet">\n
\n
<tr id="listbox_data_line_0" class="DataA"\n
tal:define="css python: line.getRowCSSClassName() or test(repeat[\'line\'].index % 2, \'DataB\', \'DataA\');\n
render_result line/render;"\n
tal:attributes="id string:${field_id}_data_line_${repeat/line/index}; class css">\n
<td tal:condition="is_report_tree_mode" class="DataA" align="left" valign="middle"\n
tal:attributes="class css"\n
tal:define="section_name python: line.getDomainTitle()">\n
<a tal:condition="section_name"\n
tal:define="method_id python: line.isOpen() and \'foldReport\' or \'unfoldReport\'"\n
tal:attributes="href string:${method_id}?report_url=${line/getDomainUrl}&amp;form_id=${form_id}&amp;list_selection_name=${selection_name};\n
class python:test(line.isOpen(), \'tree_open\', \'tree_closed\');\n
style python:\'white-space: nowrap;; margin-left: %spx\' % (line.getDepth() * 15)"\n
tal:content="section_name"/>\n
</td>\n
<td class="AnchorColumn Data" tal:condition="python:show_anchor_column and len(render_result)" style="width: 20px;">\n
<a href="#" tal:attributes="href python:render_result[0][4]"><img src="document_icon.gif" alt="document" tal:attributes="src string:${portal_url_string}/images/line_clickable.png" /></a>\n
</td>\n
<td tal:condition="show_select_column"\n
class="DataA" style="width: 50px; text-align: center; vertical-align: middle"\n
tal:attributes="class css">\n
<input tal:condition="python: not line.isSummary() and line.getObject() is not None"\n
type="checkbox" value="checked" name="uids:list"\n
tal:attributes="checked python: line.getUid() in checked_uid_set;\n
value line/getUid;" />\n
<tal:block tal:condition="python: line.isSummary() or line.getObject() is None"></tal:block>\n
</td>\n
<tal:block tal:repeat="value render_result">\n
<td tal:define="html python: value[0];\n
original_value python: value[1];\n
error python: value[2]"\n
class="DataA" align="left"\n
tal:attributes="class python: error and (css + \'Error\') or css;\n
align python: isinstance(original_value, (float, int, long)) and \'right\' or \'left\'">\n
<input tal:condition="not: repeat/value/index"\n
type="hidden" value="1" name="listbox_uid:list"\n
tal:attributes="value python: line.getUid() or \'\';\n
name string:${field_id}_uid:list" />\n
<span tal:replace="structure html">value</span>\n
</td>\n
</tal:block>\n
</tr>\n
</tal:block>\n
\n
<tr tal:condition="hide_rows_on_no_search_criterion"\n
class="listbox_missing_search_criterion">\n
<td tal:attributes="colspan python: len(here.getSearchValueList()) + 1">\n
<span i18n:translate="" \n
i18n:domain="ui">\n
To display actual content, please fill in one or more search criterion.\n
</span>\n
</td>\n
</tr>\n
\n
<tr tal:condition="python:here.showStat() and not hide_rows_on_no_search_criterion" id="listbox_stat_line"\n
class="listbox_stat_line"\n
tal:attributes="id string:${field_id}_stat_line">\n
<td tal:condition="is_report_tree_mode" class="Data">&nbsp;</td>\n
<td class="AnchorColumn Data" tal:condition="show_anchor_column">&nbsp;</td>\n
<td tal:condition="show_select_column" class="Data">&nbsp;</td>\n
<tal:block tal:repeat="value here/getStatValueList">\n
<td class="Data" align="left"\n
tal:define="original_value python: value[0]; processed_value python: value[1]"\n
tal:attributes="align python: isinstance(original_value, (float, int, long)) and \'right\' or \'left\'"\n
tal:content="structure processed_value" />\n
</tal:block>\n
</tr>\n
\n
</table>\n
</div>\n
</tal:block>\n
</tal:block>\n
</tal:block>\n
<!-- ListBox ends here. -->\n
</tal:block>\n
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ListBox_asStandardHTML</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</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>
<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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<tal:block metal:define-macro="main"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal"\n
xmlns:i18n="http://xml.zope.org/namespaces/i18n">\n
\n
<!-- ListBox (table mode) starts here -->\n
\n
<input tal:replace="nothing" type="hidden" name="form_id" tal:attributes="value form_id" tal:condition="form_id"/>\n
\n
<!--<input type="hidden" name="selection_name" tal:attributes="value selection_name" tal:condition="selection_name"/>\n
<input type="hidden" name="selection_index" tal:attributes="value selection_index" tal:condition="selection_index"/>-->\n
\n
<!--<input type="hidden" name="listbox_uid:list" value="" tal:attributes="name string:${field_id}_uid:list"/>\n
<input type="hidden" name="total_size" value="" tal:attributes="value here/total_size"/> -->\n
<input id="listbox_select" tal:attributes="id string:${field_id}_select"\n
title="Filter" alt="Filter" name="Base_doSelect:method"\n
type="submit" style="display: none"/>\n
\n
<tal:block tal:define="expand python: 1;\n
table_form_id request/current_form_id | form_id;\n
your_search_text python:here.getParamDict().get(\'your_search_text\', None)">\n
<tal:block metal:use-macro="template/macros/ListBoxContainer">\n
<tal:block metal:fill-slot="ListBoxBody">\n
\n
<input tal:condition="python:is_gadget_mode" type="hidden" name="dom_id" tal:attributes="value dom_id" />\n
\n
<table class="listbox table">\n
\n
<caption>\n
<span class="left">\n
\n
<a tal:condition="not:is_gadget_mode" tal:attributes="href string:${context_url}/${table_form_id}?list_style=search">\n
<img id="style_toggle_icon"\n
tal:attributes="src string:${context_url}/images/table_style_icon.png"\n
height="16"\n
title="Search mode"\n
alt="Search mode"\n
i18n:domain="ui" i18n:attributes="title"/>\n
</a>\n
\n
<input tal:condition="python:not is_gadget_mode and (is_domain_tree_supported or is_report_tree_supported)"\n
type="image" src="text_block.png" id="listbox_flat_list_mode"\n
title="Flat List" name="setFlatListMode:method"\n
value="1" alt="Flat List"\n
tal:attributes="src string:${portal_url_string}/images/text_block.png;\n
id string:${field_id}_flat_list_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
<input tal:condition="python: not is_gadget_mode and is_report_tree_supported"\n
type="image" src="view_tree.png" id="listbox_report_tree_mode"\n
title="Report Tree" name="setReportTreeMode:method"\n
value="1" alt="Report Tree"\n
tal:attributes="src string:${portal_url_string}/images/view_tree.png;\n
id string:${field_id}_report_tree_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
<input tal:condition="python: not is_gadget_mode and is_domain_tree_supported"\n
type="image" src="view_choose.png" id="listbox_domain_tree_mode"\n
title="Domain Tree" name="setDomainTreeMode:method"\n
value="1" alt="Domain Tree"\n
tal:attributes="src string:${portal_url_string}/images/view_choose.png;\n
id string:${field_id}_domain_tree_mode"\n
i18n:domain="ui" i18n:attributes="title" />\n
\n
<input tal:condition="python:not is_gadget_mode and (is_domain_tree_supported or is_report_tree_supported)"\n
type="image" id="listbox_reset_selection"\n
title="Show All" name="Folder_show:method"\n
id="listbox_reset_selection"\n
value="1" alt="Flat List"\n
tal:attributes="src string:${portal_url_string}/images/showall.png;"\n
i18n:domain="ui" i18n:attributes="title" />\n
\n
<!-- supporting search mode for gadget mode -->\n
\n
<button tal:condition="is_gadget_mode"\n
tal:define = "params python: {\'list_style\':\'search\'}"\n
type="button"\n
title="Search mode"\n
tal:attributes="onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img id="style_toggle_icon"\n
alt="Search mode"\n
tal:attributes="src string:${context_url}/images/table_style_icon.png"\n
height="16"/></button>\n
<a tal:attributes="id string:${field_id}_title; href here/getListActionUrl"\n
tal:condition="python: here.field.get_value(\'list_action\')">\n
<em i18n:translate="" \n
i18n:domain="ui" tal:content="here/getTitle" />\n
</a>\n
<tal:block tal:condition="python: not here.field.get_value(\'list_action\')">\n
<em i18n:translate="" \n
i18n:domain="ui" tal:content="here/getTitle" />\n
</tal:block>\n
<!-- supporting domain tree mode for gadget mode (disabled)-->\n
<!--\n
<br tal:condition="is_gadget_mode"/>\n
<button tal:condition="python: is_gadget_mode and (is_domain_tree_supported or is_report_tree_supported)"\n
tal:define = "params python: {\'setFlatListMode:method\':1}"\n
id="listbox_flat_list_mode"\n
type="button"\n
title="Flat List"\n
alt="Flat List"\n
tal:attributes="id string:${field_id}_flat_list_mode;\n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img tal:attributes="src string:${portal_url_string}/images/text_block.png;"/></button>\n
\n
<button tal:condition="python: is_gadget_mode and is_report_tree_supported"\n
tal:define = "params python: {\'setReportTreeMode:method\':1}"\n
style="cursor:pointer;" id="listbox_report_tree_mode"\n
type="button"\n
title="Report Tree"\n
alt="Report Tree"\n
tal:attributes="id string:${field_id}_report_tree_mode;\n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img src="view_tree.png"\n
tal:attributes="src string:${portal_url_string}/images/view_tree.png;"/></button>\n
\n
<button tal:condition="python: is_gadget_mode and is_domain_tree_supported"\n
tal:define = "params python: {\'setDomainTreeMode:method\':\'1\'}"\n
style="cursor:pointer;" id="listbox_domain_tree_mode"\n
type="button"\n
title="Domain Tree"\n
alt="Domain Tree"\n
tal:attributes="id string:${field_id}_domain_tree_mode;\n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<img tal:attributes="src string:${portal_url_string}/images/view_choose.png;"/></button>\n
-->\n
</span>\n
\n
<span class="right"\n
tal:define="listbox_max_lines python: int(here.getMaxLineNumber());\n
total_line python: int(here.total_size);\n
current_page python: int(here.current_page) + 1;\n
current_page_max python: listbox_max_lines * current_page;\n
current_page_start python: (listbox_max_lines * (current_page - 1)) + 1;\n
current_page_stop python: (total_line < current_page_max) and total_line or current_page_max;">\n
<tal:block condition="python: total_line > 0"\n
tal:replace="structure python: real_context.Base_translateString(\'Results <em>${start} - ${stop}</em> of <em>${total}</em>.\', mapping=dict(start=current_page_start, stop=current_page_stop, total=total_line))"/>\n
<span tal:condition="python: total_line == 0" class="warning" i18n:translate="" i18n:domain="ui">No result !</span>\n
</span>\n
</caption>\n
\n
<tr class ="thead listbox_search_line">\n
<td tal:condition="python:not is_gadget_mode and show_select_column"\n
class="Data" style="width: 50px; text-align: center; vertical-align: middle; white-space: nowrap;">\n
<input id="listbox_check_all" type="image"\n
name="checkAll:method" value="1"\n
alt="Check All" title="Check All"\n
tal:attributes="id string:${field_id}_check_all;\n
name string:${field_id}_checkAll:method;\n
src string:${portal_url_string}/images/checkall.png"\n
i18n:domain="ui" i18n:attributes="title" />&nbsp;<input id="listbox_uncheck_all"\n
type="image" name="uncheckAll:method" value="1"\n
style="border: 0" alt="Uncheck All" title="Uncheck All"\n
tal:attributes="id string:${field_id}_uncheck_all;\n
src string:${portal_url_string}/images/decheckall.png;\n
name string:${field_id}_uncheckAll:method;"\n
i18n:domain="ui" i18n:attributes="title" />\n
</td>\n
\n
<tal:block tal:repeat="value here/getLabelValueList">\n
<tal:block tal:define="sql python: value[0];\n
title python: value[1];\n
sort_order python: value[2]">\n
<th tal:condition="sql">\n
\n
<button tal:condition="not:is_gadget_mode" type="submit" class="sort_button"\n
name="setSelectionQuickSortOrder:method"\n
tal:attributes="title string:${title}; \n
value string:${field_id}.${sql}"\n
i18n:domain="ui" i18n:attributes="title">\n
<span tal:content="title" i18n:domain="ui" i18n:translate="">ID</span>\n
</button>\n
\n
<!-- Sort for gadget mode -->\n
<button tal:condition="is_gadget_mode" \n
tal:define ="params python: {\'setSelectionQuickSortOrder:method\':field_id+\'.\'+sql};"\n
type="button" \n
class="sort_button"\n
tal:attributes="title string:${title}; \n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);"\n
i18n:domain="ui" i18n:attributes="title">\n
<span tal:content="title" i18n:domain="ui" i18n:translate="">ID</span>\n
</button>\n
\n
<img tal:condition="python: sort_order == \'ascending\'"\n
alt="Ascending Display" title="Ascending Display"\n
tal:attributes="src string:${portal_url_string}/images/1bottomarrow.png"\n
style="float:left"\n
i18n:domain="ui" i18n:attributes="title"/>\n
<img tal:condition="python: sort_order == \'descending\'"\n
alt="Descending Display" title="Descending Display"\n
tal:attributes="src string:${portal_url_string}/images/1toparrow.png"\n
style="float:left"\n
i18n:domain="ui" i18n:attributes="title"/>\n
</th>\n
<th tal:condition="not: sql" tal:content="title" i18n:domain="ui" i18n:translate=""/>\n
</tal:block>\n
</tal:block>\n
</tr>\n
<tr class="thead listbox_search_line" tal:condition="show_search_line">\n
<td tal:condition="python: show_select_column and show_search_line and not is_gadget_mode"\n
class="Data" style="width: 50px; text-align: center; vertical-align: middle">\n
<input id="listbox_select" type="image"\n
title="Action" alt="Action" name="Base_doSelect:method"\n
tal:attributes="id string:${field_id}_select;\n
src string:${portal_url_string}/images/exec16.png"\n
i18n:domain="ui" i18n:attributes="title" />\n
\n
</td>\n
<td tal:repeat="value here/getSearchValueList">\n
<tal:block tal:define="alias python: value[0];\n
param python: value[1];\n
search_field python: value[2]"\n
tal:condition="alias">\n
<tal:block\n
tal:condition="python: search_field is not None"\n
tal:replace="structure python: search_field.render(value=param, key=alias)"/>\n
\n
<input tal:condition="python: not is_gadget_mode and search_field is None" \n
name="id" size="5" value=""\n
type="text" tal:attributes="name alias; value param"/>\n
\n
<!-- Search for gadget mode -->\n
<input tal:condition="python: is_gadget_mode and search_field is None" \n
tal:define ="params python: {alias:\'this.value\'};"\n
size="8"\n
type="textarea" \n
tal:attributes=\'value python: selection.getParams().get(alias,"");\n
onkeypress python:"if(event.keyCode==13){" + real_context.KnowledgePad_generateAjaxCall(context_url+"/"+form_id,box,dom_id,params).replace("\\"this.value\\"","this.value")+ "return false;;}"\'/>\n
\n
</tal:block>\n
</td>\n
</tr>\n
\n
<tal:replace tal:content="nothing">\n
TODO: Move pagination pre-calcultion higher in that code.\n
</tal:replace>\n
<tr class="tbody" tal:condition="line_list"\n
tal:repeat="line line_list" tal:define="checked_uid_set here/getCheckedUidSet">\n
<td tal:condition="python: show_select_column and not is_gadget_mode"\n
class="DataA" style="width: 50px; text-align: center; vertical-align: middle"\n
>\n
<input tal:condition="python: not line.isSummary() and line.getObject() is not None"\n
type="checkbox" value="checked" id="listbox_cb_1" name="uids:list"\n
tal:attributes="checked python: line.getUid() in checked_uid_set;\n
value line/getUid;\n
id string:${field_id}_cb_${line/getUid}" />\n
<tal:block tal:condition="python: line.isSummary() or line.getObject() is None"></tal:block>\n
</td>\n
\n
<tal:block tal:repeat="value line/render">\n
<td tal:define="html python: value[0];\n
original_value python: value[1];\n
error python: value[2];\n
editable_field python: value[3];\n
editable_field_css python: editable_field != None and editable_field.get_value(\'css_class\')">\n
<input tal:condition="not: repeat/value/index"\n
type="hidden" value="1" name="listbox_uid:list"\n
tal:attributes="value python: line.getUid() or \'\';\n
name string:${field_id}_uid:list" />\n
<tal:block tal:replace="structure html">value</tal:block>\n
</td>\n
</tal:block>\n
</tr>\n
<tr tal:condition="python: int(here.total_size) > int(here.getMaxLineNumber())"\n
class="tfoot">\n
<td class="pageNavigation" style="white-space: nowrap; vertical-align: middle; text-align: right;"\n
tal:attributes="colspan python: len(here.getSelectedColumnList()) + bool(show_select_column)">\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/page_navigation" />\n
</td>\n
</tr>\n
\n
<tr tal:condition="hide_rows_on_no_search_criterion"\n
class="listbox_missing_search_criterion">\n
<td tal:attributes="colspan python: len(here.getSearchValueList()) + 1">\n
<span i18n:translate="" \n
i18n:domain="ui">\n
To display actual content, please fill in one or more search criterion.\n
</span>\n
</td>\n
</tr>\n
\n
</table>\n
\n
<!-- Advanced Search footer -->\n
<div class="centeredInner extendedSearchBar"\n
tal:condition="python:not is_gadget_mode and show_search_line and your_search_text is not None">\n
<input name="bottom_your_search_text" size="40" value=""\n
type="text" tal:attributes="value your_search_text"\n
onkeypress="submitFormOnEnter(event, this.form, \'ERP5Site_processAdvancedSearchBottom\');"/>\n
<input class="button" value="Search" name="ERP5Site_processAdvancedSearchBottom:method" type="submit" />\n
</div>\n
\n
</tal:block>\n
</tal:block>\n
</tal:block>\n
<!-- ListBox ends here -->\n
\n
</tal:block>\n
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ListBox_asTableStyleHTML</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Listbox as tables renderer</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -44,109 +44,137 @@ ...@@ -44,109 +44,137 @@
form_id python: here.getForm().id;\n form_id python: here.getForm().id;\n
selection_name here/getSelectionName;\n selection_name here/getSelectionName;\n
selection here/getSelection;\n selection here/getSelection;\n
portal_url_string here/getPortalUrlString;\n
real_context here/getContext;\n real_context here/getContext;\n
global portal_url_string here/getPortalUrlString;\n
context_url real_context/absolute_url;\n context_url real_context/absolute_url;\n
md5_string here/getMD5Checksum;\n md5_string here/getMD5Checksum;\n
hide_rows_on_no_search_criterion here/isHideRowsOnNoSearchCriterion;\n hide_rows_on_no_search_criterion here/isHideRowsOnNoSearchCriterion;\n
line_list here/query;\n
is_domain_tree_mode here/isDomainTreeMode;\n is_domain_tree_mode here/isDomainTreeMode;\n
is_report_tree_mode here/isReportTreeMode;\n is_report_tree_mode here/isReportTreeMode;\n
is_domain_tree_supported here/isDomainTreeSupported;\n global is_domain_tree_supported here/isDomainTreeSupported;\n
is_report_tree_supported here/isReportTreeSupported;\n global is_report_tree_supported here/isReportTreeSupported;\n
global is_gadget_mode request/is_gadget_mode | nothing;\n
show_select_column here/showSelectColumn;\n show_select_column here/showSelectColumn;\n
show_anchor_column here/showAnchorColumn;\n show_anchor_column here/showAnchorColumn;\n
show_search_line here/showSearchLine;\n show_search_line here/showSearchLine;\n
is_web_mode request/is_web_mode | nothing;\n is_web_mode real_context/isWebMode | nothing;\n
is_dialog_mode request/dialog_mode | nothing;\n is_dialog_mode request/dialog_mode | nothing;\n
list_style python:request.get(\'list_style\', \n display_style_list here/getDisplayStyleList;\n
selection.getParams().get(\'list_style\', is_web_mode and \'table\' or None));\n list_style here/getListboxDisplayStyle;\n
is_gadget_mode request/is_gadget_mode | nothing;\n global_search_column here/getGlobalSearchColumn;\n
">\n global_search_column_script string:Base_doSelect;\n
<!-- ListBox starts here. -->\n show_global_search python: global_search_column not in (\'\', None);\n
<input type="hidden" name="list_selection_name" value="default" tal:attributes="value selection_name" />\n line_list here/query;\n
<input type="hidden" name="list_selection_name" value="default"\n listbox_max_lines python: int(here.getMaxLineNumber());\n
tal:attributes="value selection_name;\n total_line python: int(here.total_size);\n
name string:${field_id}_list_selection_name" />\n is_sample python: getattr(here, \'is_sample\', False);\n
<input tal:condition="md5_string" type="hidden" name="md5_object_uid_list" value="checksum" tal:attributes="value md5_string" />\n current_page python: int(here.current_page) + 1;\n
current_page_max python: listbox_max_lines * current_page;\n
current_page_start python: (listbox_max_lines * (current_page - 1)) + 1;\n
current_page_stop python: (total_line < current_page_max) and total_line or current_page_max;\n
form_url string:${context_url}/${form_id};\n
need_pagination python: total_line > listbox_max_lines;\n
show_list_style_selection python: len(display_style_list) > 1;\n
show_listbox_tree_mode_selection python: not is_gadget_mode and \n
(is_domain_tree_supported or is_report_tree_supported);\n
show_list_action_link python: here.field.get_value(\'list_action\');\n
page_navigation_template python: request.get(\'page_navigation_template\', here.getPageNavigationTemplate());\n
is_slider_mode python: \'Slider\' in page_navigation_template;\n
is_default_listbox_field python: field_id==\'listbox\';\n
field_prefix python: \'\';">\n
\n
<!-- Define hidden input. -->\n
<input type="hidden" \n
name="list_selection_name" \n
value="default" \n
tal:attributes="value selection_name" />\n
<input type="hidden" \n
name="list_selection_name" \n
value="default"\n
tal:attributes="value selection_name;\n
name string:${field_id}_list_selection_name" />\n
<input tal:condition="md5_string" \n
type="hidden" \n
name="md5_object_uid_list" \n
value="checksum" \n
tal:attributes="value md5_string" />\n
<input tal:condition="form_id" \n
type="hidden" \n
name="form_id" \n
tal:attributes="value form_id" \n
tal:replace="nothing"/>\n
<input tal:condition="field_id" \n
type="hidden" \n
name="field_id" \n
tal:attributes="value field_id" \n
tal:replace="nothing"/>\n
\n \n
<tal:block tal:condition="is_gadget_mode">\n <tal:block tal:condition="is_gadget_mode">\n
<tal:block tal:define="global box_relative_url python: request.get(\'box_relative_url\', \'\');\n <tal:block tal:define="global box_relative_url python: request.get(\'box_relative_url\', \'\');\n
global box python: real_context.restrictedTraverse(box_relative_url); \n global box python: real_context.restrictedTraverse(box_relative_url); \n
global box_id python: \'visual_%s\' %box_relative_url.split(\'/\')[-1];\n global box_id python: \'%s_content\' %box_relative_url.replace(\'/\', \'_\');\n
global dom_id python: request.get(\'dom_id\',None) or box_id;">\n global dom_id python: request.get(\'dom_id\',None) or box_id;\n
global field_prefix string:${box_id}_">\n
<input tal:condition="python:form_id" \n <input tal:condition="python:form_id" \n
type="hidden" name="gadget_form_id"\n type="hidden" \n
tal:attributes="value form_id" />\n name="gadget_form_id"\n
tal:attributes="value form_id" />\n
</tal:block>\n </tal:block>\n
</tal:block>\n </tal:block>\n
<tal:replace tal:content="nothing">\n \n
Because TAL cannot accept unbalanced tags, the support for a domain tree is realized by a macro.\n <tal:block tal:define="expand python: 0">\n
The macro ListBoxContainer is a no-op, if not in domain tree mode. Otherwise, the macro constructs\n <tal:block metal:define-macro="ListBoxContainer">\n
a domain tree and extracts the body in an extra table.\n <tal:block tal:condition="expand">\n
</tal:replace> \n <tal:block tal:condition="not: is_domain_tree_mode">\n
<tal:block tal:define="expand python: 0">\n <tal:block metal:define-slot="ListBoxBody" />\n
<tal:block metal:define-macro="ListBoxContainer">\n </tal:block>\n
<tal:block tal:condition="expand">\n
<tal:block tal:condition="not: is_domain_tree_mode">\n
<tal:block metal:define-slot="ListBoxBody" />\n
</tal:block>\n </tal:block>\n
</tal:block></tal:block></tal:block>\n </tal:block>\n
<tal:block tal:define="expand python: 1">\n </tal:block>\n
<tal:block metal:use-macro="template/macros/ListBoxContainer">\n \n
<tal:block metal:fill-slot="ListBoxBody">\n <tal:block tal:define="expand python: 1">\n
<div class="ListContent" style="margin-bottom:5px;">\n <tal:block metal:use-macro="template/macros/ListBoxContainer">\n
<tal:block tal:repeat="line line_list">\n <tal:block metal:fill-slot="ListBoxBody">\n
<div tal:define="post line/getBrain;">\n <div class="ListContent" style="margin-bottom:5px;">\n
<div style="margin:5px; padding:10px; background-color:#ffffff; border-radius: 15px 15px; -moz-border-radius: 10px;"\n <tal:block tal:repeat="line line_list">\n
tal:define="post line/getBrain;">\n <div tal:define="post line/getBrain;">\n
<div style="background-color:#efefef; padding:3px; height:20px; border-left:solid 3px #DE9435">\n <div style="margin:5 px; padding:10px; background-color:#ffffff; border_radius: 15px 15px; -moz-border-radius:10px" tal:define="post line/getBrain;">\n
<div style="float:left; height:20px;">\n <div style="background-color:#efefef; padding:3px; height:20px; border_left:solid 3px #DE9435">\n
<a tal:attributes="href post/getId">\n <div style="float:left; height:20px;">\n
<span style="margin:0; color #D98135; padding-left:5px; font:bold 1.2em Helvetica, Arial, sans-serif; margin-top:5px" tal:content="post/getTitle">\n <a tal:attributes="href post/getId">\n
</span>\n <span style="margin:0; color #98135; padding-left:5px; font:bold 1.2em Helvetica, Arial, sans-serif; margin-top:5px" tal:content="post/getTitle"></span>\n
</a>\n </a>\n
</div>\n </div>\n
<div style="float:right; height:20px;">\n <div style="float:right ; height:20px;">\n
<span style="color:#333; font-size:90%; margin:2px 0;"> by \n <span style="color:#333; font-size:90% margin:2px 0;"> by\n
<a href="#">\n <a href="#">\n
<span style="color:#a40;font-size:90%;" tal:content="python: post.getSourceValue() is not None and post.getSourceValue().getTitle() or \'User Unknown\'">\n <span style="color:a40#; font-size:90%" tal:content="python: post.getSourceValue() is not None and post.getSourceValue().getTitle() or \'User Unknown\'"></span>\n
</span>\n </a>on <span tal:replace="post/getCreationDate"></span>\n
</a> on <span tal:replace="post/getCreationDate"></span></span>\n </span>\n
</div>\n </div>\n
</div>\n </div>\n
<hr>\n <hr />\n
<div style="margin-left:10px;">\n <div style="margin-left:10 px;">\n
<span style="color:black;margin-top:10px;margin-bottom:10px;" tal:content="structure python:post.getTextContent()">\n <span style="color:black;margin-bottom:10px;" tal:content="structure python:post.getTextContent()"></span><br />\n
</span><br />\n </div>\n
</div>\n <hr />\n
<hr>\n <div style="margin-left:10 px;">\n
<div style="margin-left:10px;"><span style="color:#aaa">For signature</span></div>\n <span style="color:#aaa">For signature</span>\n
<hr> \n </div>\n
<button type="submit" title="Reply" \n <hr />\n
name="DiscussionThreadModule_viewAddReplyDialog:method"\n <button stylle="border:dashed 1px #3D6474; backgroung_color:#eee; padding:3px" onclick="submitAction(this.form, \'DiscussionThreadModule_viewAddReplyDialog\')">\n
style="border:dashed 1px #3D6474; background-color:#eee; padding:3px;"> \n <span>Reply</span>\n
<span>Reply</span>\n </button>\n
</button>\n </div>\n
</div>\n \n
</div>\n
</tal:block>\n
</div>\n </div>\n
</tal:block>\n </tal:block>\n
</div>\n
</tal:block>\n </tal:block>\n
</tal:block>\n </tal:block>\n
<tal:block tal:condition="python: list_style == \'search\'">\n
<span metal:use-macro="real_context/ListBox_asSearchStyleHTML/macros/main"/>\n
</tal:block>\n
<tal:block tal:condition="python: list_style == \'table\'">\n
<span metal:use-macro="real_context/ListBox_asTableStyleHTML/macros/main"/>\n
</tal:block>\n
<tal:block tal:condition="python: list_style not in (\'search\', \'table\')">\n
<span metal:use-macro="real_context/ListBox_asStandardHTML/macros/main"/>\n
</tal:block>\n
\n
</tal:block>\n </tal:block>\n
\n
</tal:block>
]]></unicode> </value> ]]></unicode> </value>
</item> </item>
...@@ -160,15 +188,15 @@ ...@@ -160,15 +188,15 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>ListBox_ThreadAsHTML</string> </value> <value> <string>ListBox_threadAsHTML</string> </value>
</item> </item>
<item> <item>
<key> <string>output_encoding</string> </key> <key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value> <value> <string>iso-8859-15</string> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <unicode></unicode> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</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>
<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>_text</string> </key>
<value> <unicode encoding="cdata"><![CDATA[
<tal:block tal:replace="nothing"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal"\n
xmlns:i18n="http://xml.zope.org/namespaces/i18n">\n
\n
\n
<!-- First & Previous button navigation --> \n
<tal:block metal:define-macro="first_previous_page_navigation">\n
\n
<tal:block tal:condition="python: here.current_page > 0">\n
<button type="image" src="2leftarrowv.png"\n
title="First Page" name="firstPage:method"\n
class="listbox_first_page"\n
tal:attributes="name string:${field_id}_firstPage:method;\n
src string:${portal_url_string}/images/2leftarrowv.png;\n
class python: test(is_default_listbox_field, \'listbox_first_page\', \'listbox_first_page %s_first_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title">\n
<span class="image"/>\n
</button>\n
<button type="image" src="1leftarrowv.png"\n
title="Previous Page" name="previousPage:method"\n
class="listbox_previous_page"\n
tal:attributes="name string:${field_id}_previousPage:method;\n
src string:${portal_url_string}/images/1leftarrowv.png;\n
class python: test(is_default_listbox_field, \'listbox_previous_page\', \'listbox_previous_page %s_previous_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title">\n
<span class="image"/>\n
</button>\n
\n
</tal:block>\n
\n
</tal:block>\n
\n
<!-- Next & Last button navigation --> \n
<tal:block metal:define-macro="next_last_page_navigation">\n
\n
<tal:block tal:condition="python: here.current_page < here.total_pages - 1">\n
<button type="image" src="1rightarrowv.png"\n
title="Next Page" name="nextPage:method" class="listbox_next_page"\n
tal:attributes="name string:${field_id}_nextPage:method;\n
src string:${portal_url_string}/images/1rightarrowv.png;\n
class python: test(is_default_listbox_field, \'listbox_next_page\', \'listbox_next_page %s_next_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title">\n
<span class="image"/>\n
</button>\n
<button type="image" src="2rightarrowv.png"\n
title="Last Page" name="lastPage:method" class="listbox_last_page"\n
tal:attributes="name string:${field_id}_lastPage:method;\n
src string:${portal_url_string}/images/2rightarrowv.png;\n
class python: test(is_default_listbox_field, \'listbox_last_page\', \'listbox_last_page %s_last_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title" >\n
<span class="image"/>\n
</button>\n
\n
</tal:block>\n
\n
</tal:block>\n
\n
<!-- First & Previous button navigation (asynchronous mode) --> \n
<tal:block metal:define-macro="first_previous_page_navigation_asynchronous">\n
\n
<tal:block tal:condition="python: here.current_page > 0">\n
<button tal:define ="params python: {field_id+\'_firstPage:method\':\'\', \'list_style\':list_style}"\n
title="First Page" \n
name="firstPage"\n
type = "button" \n
class = "listbox_first_page"\n
tal:attributes="value string:|&lt;;\n
onclick python:\n
real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);\n
class python: test(is_default_listbox_field, \'listbox_first_page\', \'listbox_first_page %s_first_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title">\n
<span class="image"/>\n
</button>\n
<button tal:define ="params python: {field_id+\'_previousPage:method\':\'\',\'page_start\':here.current_page+1,\'list_style\':list_style}"\n
title="Previous Page"\n
name="previousPage"\n
type="button"\n
class="listbox_previous_page"\n
tal:attributes="value string:&lt;&lt;;\n
onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);\n
class python: test(is_default_listbox_field, \'listbox_previous_page\', \'listbox_previous_page %s_previous_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title">\n
<span class="image"/>\n
</button>\n
</tal:block>\n
\n
</tal:block>\n
\n
<!-- Next & Last button navigation (asynchronous mode) --> \n
<tal:block metal:define-macro="next_last_page_navigation_asynchronous">\n
\n
<tal:block tal:condition="python: current_page < total_page">\n
<button tal:define ="params python: {field_id+\'_nextPage:method\':\'\',\'page_start\':here.current_page+1,\'list_style\':list_style}"\n
title="Next Page"\n
name="nextPage"\n
type="button"\n
class="listbox_next_page"\n
tal:attributes="onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);\n
class python: test(is_default_listbox_field, \'listbox_next_page\', \'listbox_next_page %s_next_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title">\n
<span class="image"/>\n
</button>\n
<button tal:define ="params python: {field_id+\'_lastPage:method\':\'\',\'total_size\':int(here.total_size), \'list_style\':list_style}"\n
title="Last Page"\n
name="lastPage"\n
type="button"\n
class="listbox_last_page"\n
tal:attributes="onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);\n
class python: test(is_default_listbox_field, \'listbox_last_page\', \'listbox_last_page %s_last_page\' %field_id)"\n
i18n:domain="ui" i18n:attributes="title">\n
<span class="image"/>\n
</button>\n
</tal:block>\n
\n
</tal:block>\n
\n
<!-- Type in listbox navigation --> \n
<tal:block metal:define-macro="type_in_page_navigation">\n
<input class="listbox_set_page" \n
name="page_start" onblur="this.value=this.defaultValue"\n
tal:attributes="name string:${field_id}_page_start;\n
class python: test(is_default_listbox_field, \'listbox_set_page\', \'listbox_set_page %s_set_page\' %field_id);\n
value python:here.current_page + 1;\n
size python:len(str(here.total_pages));\n
onkeypress string:submitFormOnEnter(event, this.form, \'${field_id}_setPage\')" />\n
/ <tal:block content="here/total_pages" />\n
</tal:block>\n
\n
<!-- Type in listbox page number navigation (asyncronous) --> \n
<tal:block metal:define-macro="type_in_page_navigation_asynchronous">\n
\n
<input class="listbox_set_page" \n
name="page_start" onblur="this.value=this.defaultValue"\n
tal:define="params python: {field_id+\'_setPage:method\':\'\',field_id+\'_page_start\':\'this.value\',\'list_style\':list_style}"\n
tal:attributes=\'name string:${field_id}_page_start;\n
class python: test(is_default_listbox_field, "listbox_set_page", "listbox_set_page %s_set_page" %field_id);\n
value python:here.current_page + 1;\n
size python:len(str(here.total_pages));\n
onkeypress python:"if(event.keyCode==13){" + real_context.KnowledgePad_generateAjaxCall(context_url+"/"+form_id,box,dom_id,params).replace("\\"this.value\\"","this.value")+ "return false;;}"\'/>\n
/ <tal:block content="here/total_pages" />\n
</tal:block>\n
\n
<!-- Show list of direct listbox page selection -->\n
<tal:block metal:define-macro="text_link_page_navigation">\n
<tal:block tal:repeat="page_index page_index_list ">\n
<a tal:attributes="href python: \'%s_setPage?%s_page_start=%s&list_selection_name=%s&listbox_uid:list=[]\' %(field_id, field_id, page_index, selection_name);\n
class python: test(page_index==current_page, \'selected\', \'\');\n
title string:Page ${page_index}"\n
tal:content="page_index"/>\n
</tal:block>\n
</tal:block>\n
\n
<!-- Show list of direct listbox page selection (asynchronous) -->\n
<tal:block metal:define-macro="text_link_page_navigation_asynchronous">\n
<tal:block tal:repeat="page_index page_index_list ">\n
<a tal:define="params python: {field_id+\'_setPage:method\':\'\',field_id+\'_page_start\':page_index,\'list_style\':list_style, \'list_selection_name\':selection_name, \'listbox_uid\':[]}"\n
tal:attributes="onclick python: real_context.KnowledgePad_generateAjaxCall(context_url+\'/\'+form_id,box,dom_id,params);\n
class python: test(page_index==current_page, \'selected\', \'\');\n
title string:Page ${page_index}"\n
tal:content="page_index"/>\n
</tal:block>\n
</tal:block>\n
\n
\n
<!-- Text navigation (i.e. 1 2 3 4 .. n links)-->\n
<tal:block metal:define-macro="text_navigation"\n
tal:define="offset python: 7;\n
all_page_index_list python: range(1, here.total_pages + 1);\n
page_index_list python: all_page_index_list[max(current_page-offset, 1)-1: min(current_page+offset, len(all_page_index_list))];\n
is_default_listbox_field python: field_id==\'listbox\';">\n
\n
<!-- Non gadget mode -->\n
<tal:block tal:condition="not: is_gadget_mode">\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/first_previous_page_navigation" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/text_link_page_navigation" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/next_last_page_navigation" />\n
</tal:block>\n
\n
<!-- Gadget mode -->\n
<tal:block tal:condition="is_gadget_mode"\n
tal:define="max_lines python: here.getMaxLineNumber();\n
total_page python: here.total_pages;\n
page_id python: here.current_page;\n
current_page python: page_id + 1;\n
previous_page python: current_page - 1;\n
next_page python: current_page + 1;">\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/first_previous_page_navigation_asynchronous" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/text_link_page_navigation_asynchronous" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/next_last_page_navigation_asynchronous" />\n
</tal:block>\n
\n
</tal:block>\n
\n
<!-- Slider navigation with input (i.e. first, previous, next, last links)-->\n
<tal:block metal:define-macro="page_navigation"\n
tal:define="is_default_listbox_field python: field_id==\'listbox\';">\n
<tal:block tal:condition="python: here.total_pages > 1">\n
\n
<!-- Non gadget mode -->\n
<tal:block tal:condition="not: is_gadget_mode">\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/first_previous_page_navigation" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/type_in_page_navigation" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/next_last_page_navigation" />\n
</tal:block>\n
\n
<!-- Gadget mode -->\n
<tal:block tal:condition="is_gadget_mode"\n
tal:define="max_lines python: here.getMaxLineNumber();\n
total_page python: here.total_pages;\n
page_id python: here.current_page;\n
current_page python: page_id + 1;\n
previous_page python: current_page - 1;\n
next_page python: current_page + 1;">\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/first_previous_page_navigation_asynchronous" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/type_in_page_navigation_asynchronous" />\n
<tal:block metal:use-macro="real_context/page_navigation_render/macros/next_last_page_navigation_asynchronous" />\n
</tal:block>\n
</tal:block>\n
</tal:block>\n
\n
</tal:block>\n
]]></unicode> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>page_navigation_render</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
##############################################################################
#
# Copyright (c) 2002-2015 Nexedi SA and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility 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
# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
##############################################################################
from Products.ERP5Type.tests.SecurityTestCase import SecurityTestCase from Products.ERP5Type.tests.SecurityTestCase import SecurityTestCase
from httplib import OK as HTTP_OK from httplib import OK as HTTP_OK
import transaction
class TestDiscussionThread(SecurityTestCase): class TestDiscussionThread(SecurityTestCase):
""" """
...@@ -7,198 +35,183 @@ class TestDiscussionThread(SecurityTestCase): ...@@ -7,198 +35,183 @@ class TestDiscussionThread(SecurityTestCase):
""" """
def getTitle(self): def getTitle(self):
return "TestDiscussionThread" return "Test Discussion thread"
def getBusinessTemplateList(self):
"""
Tuple of Business Templates we need to install
"""
return ('erp5_base',
'erp5_web',
'erp5_ingestion_mysql_innodb_catalog',
'erp5_ingestion',
'erp5_dms',
'erp5_forum_tutorial')
def afterSetUp(self): def afterSetUp(self):
""" """
This is ran before each and every test, used to set up the environment This is ran before anything, used to set the environment
""" """
user_list = [
# This is Dictator, a user of our portal and a forum admin
dict(title='Dictator', reference='admin', function='forum/administrator'),
# This is "Forum User", a user of our portal. He's funny, but has no administrative power
dict(title='Forum User', reference='forum_user', function='forum/user'),
# This is yet another user. He has no administrative power
dict(title='Another Forum User', reference='another_forum_user', function='forum/user'),
# This is a Lurker. He is lurking in the forum, but is not an User
dict(title='Forum visitor', reference='visitor', function='forum/visitor'),
# This is a Spy. He has an ERP5 account, but no specific forum access.
dict(title='Spy', reference='spy', function=None),
]
# now we create the users
for user in user_list:
self.createSimpleUser(**user)
self.commit() user_list=[
self.tic() dict(title='Dictator', reference='admin', function='forum/administrator'),
dict(title='Forum User', reference='forum_user', function='forum/user'),
dict(title='Another_Forum_user', reference='another_forum_user', function='forum/user'),
dict(title='Forum Visitor', reference='visitor', function='forum/visitor'),
dict(title='Spy', reference='spy', function=None),
]
for user in user_list:
if len(self.portal.portal_catalog(portal_type='Person', reference=user['reference']))==0:
self.createSimpleUser(**user)
# self.tic()
self.forum_module = self.portal.getDefaultModule(portal_type='Discussion Thread') self.forum_module = self.portal.getDefaultModule(portal_type='Discussion Thread')
self.assertTrue(self.forum_module is not None) self.assertTrue(self.forum_module is not None)
def _newThread(self, content=''): def _newThread(self, content=''):
"""Helper function to create a new Thread""" """Helper function to create new Thread"""
return self.forum_module.DiscussionThreadModule_addThread( return self.forum_module.DiscussionThreadModule_addThread(
title='Some title', title='Some title',
text_content=content, text_content=content,
form_id='DiscussionThreadModule_viewAddThreadDialog', form_id='DiscussionThreadModule_viewAddThreadDialog',
batch_mode=True, batch_mode=True
) )
def testUserCanCreateContent(self): def testUserCanCreateContent(self):
""" """
Use case: Use case:
- user creates a thread - user creates a thread
- that user can see it - that user can see it
- that user can reply to his thread - that user can reply to this thread
""" """
# forum_user should be able to access/view the forum module # forum user should be able to access/view the forum module
self.assertUserCanAccessDocument('forum_user', self.forum_module)
self.assertUserCanViewDocument('forum_user', self.forum_module) self.assertUserCanViewDocument('forum_user', self.forum_module)
self.assertUserCanAccessDocument('forum_user', self.forum_module)
self.assertUserCanAddDocument('forum_user', self.forum_module) self.assertUserCanAddDocument('forum_user', self.forum_module)
self.login('forum_user') self.login('forum_user')
thread_content='Hey, lets create a new thread!' thread_content="Hey, let's create a new thread!"
thread = self._newThread(content=thread_content) thread = self._newThread(content=thread_content)
# user should be able to access/view the created thread
self.assertUserCanViewDocument('forum_user', thread) self.assertUserCanViewDocument('forum_user', thread)
self.assertUserCanAccessDocument('forum_user', thread) self.assertUserCanAccessDocument('forum_user', thread)
self.assertUserCanAddDocument('forum_user', thread) self.assertUserCanAddDocument('forum_user', thread)
# get thread posts
thread_posts = thread.objectValues() thread_posts = thread.objectValues()
self.assertEquals(len(thread_posts), 1)
# thread should have only one post self.assertEquals(thread_posts[0].getTextContent(), thread_content)
self.assertEqual(len(thread_posts), 1) self.assertEquals(thread.getParentValue().getRelativeUrl(), self.forum_module.getRelativeUrl())
self.assertEquals(thread.getValidationState(), 'public')
# that unique post should have the right content
self.assertEqual(thread_posts[0].getTextContent(), thread_content) reply_content = 'Can we add a reply?'
# Check that the thread is inserted in the forum module
self.assertEqual(thread.getParentValue().getRelativeUrl(), self.forum_module.getRelativeUrl())
# the thread should have been published
self.assertEqual(thread.getValidationState(), 'public')
reply_content='Can we add a reply?'
post = thread.DiscussionThreadModule_addReply( post = thread.DiscussionThreadModule_addReply(
title='A new reply', title='A new reply',
text_content=reply_content, text_content = reply_content,
form_id='DiscussionThreadModule_viewAddReplyDialog', form_id = 'DiscussionThreadModule_viewAddReplyDialog',
batch_mode=True, batch_mode=True,
) )
self.assertUserCanViewDocument('forum_user', post) self.assertUserCanViewDocument('forum_user', post)
self.assertUserCanAccessDocument('forum_user', post) self.assertUserCanAccessDocument('forum_user', post)
transaction.commit()
self.tic() self.tic()
thread_posts = thread.objectValues() thread_posts = thread.objectValues()
self.assertEquals(len(thread_posts), 2)
# original thread and reply: self.assertEquals(len(thread.searchFolder(SearchableText=reply_content)), 1)
# thread should have two posts self.assertEquals(post.getParentValue().getRelativeUrl(), thread.getRelativeUrl())
self.assertEqual(len(thread_posts), 2)
# Check that post was inserted in thread
self.assertEqual(post.getParentValue().getRelativeUrl(), thread.getRelativeUrl())
def testSpyCannotAccessButVisitorCan(self): def testSpyCannotAccessButVisitorCan(self):
""" """
Unassigneds can't display threads, and visitor can: Unassigned can't display threads, and visitor can:
- user creates a thread - user creates a thread
- outsiders can't read the thread - outsiders can't read hthe thread
- visitor can read the thread - visitors can read the thread
""" """
self.login('forum_user') self.login('forum_user')
thread = self._newThread() thread =self._newThread()
self.failIfUserCanViewDocument('spy', thread) self.failIfUserCanViewDocument('spy', thread)
self.failIfUserCanAccessDocument('spy', thread) self.failIfUserCanAccessDocument('spy', thread)
self.assertUserCanViewDocument('visitor', thread) self.assertUserCanViewDocument('visitor', thread)
self.assertUserCanAccessDocument('visitor', thread) self.assertUserCanAccessDocument('visitor', thread)
# Check that visitor has permissions on related objects self.assertUserCanAccessDocument('visitor', self.portal.person_module.searchFolder(reference='forum_user')[0].getObject())
# for example, if visitor has no permissions on the Person
# module, the above checks will pass, but the view def testVisistorsCannotPost(self):
# will not work, because Person.getTitle() will fail
self.assertUserCanViewDocument('visitor', self.portal.person_module)
self.assertUserCanAccessDocument('visitor', self.portal.person_module)
response = self.publish('/%s/%s' % \
(self.portal.getId(), thread.getRelativeUrl()),
'visitor:visitor'
)
self.assertEqual(response.getStatus(), HTTP_OK)
def testVisitorCannotPost(self):
""" """
Use case: Use case:
- user creates a thread - user creates a thread
- visitor cannot reply - visitor cannot reply
- visitor cannot post a new thread - visitor cannot post a thread
""" """
self.login('forum_user') self.login('forum_user')
thread = self._newThread() thread = self._newThread()
# visitor cannot reply to a thread
self.failIfUserCanAddDocument('visitor', thread) self.failIfUserCanAddDocument('visitor', thread)
# visitor cannot create a new thread
self.failIfUserCanAddDocument('visitor', self.forum_module) self.failIfUserCanAddDocument('visitor', self.forum_module)
def testAdminCanModerate(self): def testAdminCanModerate(self):
""" """
Use case: Use case:
- admin creates a thread - admin creates a thread
- admin can display it - admin closes it
- admin closes it - admin can display it
- admin can display it - admin reopens it
- admin reopens it
""" """
self.login('admin') self.login('admin')
thread = self._newThread() thread = self._newThread()
self.assertUserCanPassWorkflowTransition('admin', 'close_action', thread) self.assertUserCanPassWorkflowTransition('admin', 'close_action', thread)
thread.close() thread.close()
self.commit() transaction.commit()
self.assertUserCanViewDocument('admin', thread) self.assertUserCanViewDocument('admin', thread)
self.assertUserCanAccessDocument('admin', thread) self.assertUserCanAccessDocument('admin', thread)
self.assertUserCanPassWorkflowTransition('admin', 'unclose_action', thread) self.assertUserCanPassWorkflowTransition('admin', 'unclose_action', thread)
def testUserCannotModerate(self): def testUserCannotModerate(self):
""" """
Use case: Use case:
- user creates thread - user creates a thread
- user cannot close it - user cannot close it
""" """
self.login('forum_user') self.login('forum_user')
thread = self._newThread() thread = self._newThread()
self.assertUserCanPassWorkflowTransition('forum_user', 'close_action', thread) self.assertUserCanPassWorkflowTransition('forum_user', 'close_action', thread)
self.failIfUserCanPassWorkflowTransition('another_forum_user', 'close_action', thread) self.failIfUserCanPassWorkflowTransition('another_forum_user', 'close_action', thread)
def testHiddenState(self):
"""
Use case:
- forum creates a thread
- admin hides it
- forum_user still see his thread
- and can reply
- but another forum_user cannot display it
- user cannot unhide it
"""
self.login('forum_user')
thread = self._newThread()
self.failIfUserCanPassWorkflowTransition('another_forum_user', 'unhide_action', thread)
def testCanPostIfNotOwner(self): def testCanPostIfNotOwner(self):
""" """
Use case: Use case:
- forum_user creates a thread - forum_user creates a thread
- another_forum_user displays it - another_forum_user displays it
- another_forum_user replies - another_forum_user replies
""" """
self.login('forum_user') self.login('forum_user')
thread = self._newThread() thread = self._newThread()
# other user (not thread owner) can access and view the thread
self.assertUserCanViewDocument('another_forum_user', thread) self.assertUserCanViewDocument('another_forum_user', thread)
self.assertUserCanAccessDocument('another_forum_user', thread) self.assertUserCanAccessDocument('another_forum_user', thread)
# ... and can reply to thread even if he did not start it self.assertUserCanAddDocument('another_forum_user', thread)
self.assertUserCanAddDocument('another_forum_user', thread) \ No newline at end of file
response = self.publish('/%s/%s' % \
(self.portal.getId(), thread.getRelativeUrl()),
'another_forum_user:another_forum_user'
)
self.assertEqual(response.getStatus(), HTTP_OK)
...@@ -6,10 +6,20 @@ ...@@ -6,10 +6,20 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>testDiscussionThread</string> </value> <value> <string>testDiscussionThread</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value> <string>Unittest for forum template</string> </value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>test.erp5.testDiscussionThread</string> </value> <value> <string>test.erp5.testDiscussionThread</string> </value>
...@@ -24,6 +34,20 @@ ...@@ -24,6 +34,20 @@
<none/> <none/>
</value> </value>
</item> </item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple>
<string>W: 29, 0: Unused OK imported from httplib as HTTP_OK (unused-import)</string>
</tuple>
</value>
</item>
<item> <item>
<key> <string>version</string> </key> <key> <string>version</string> </key>
<value> <string>erp5</string> </value> <value> <string>erp5</string> </value>
...@@ -31,13 +55,28 @@ ...@@ -31,13 +55,28 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -50,7 +89,7 @@ ...@@ -50,7 +89,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -59,7 +98,7 @@ ...@@ -59,7 +98,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="3" aka="AAAAAAAAAAM="> <record id="4" aka="AAAAAAAAAAQ=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle> </pickle>
...@@ -72,33 +111,6 @@ ...@@ -72,33 +111,6 @@
<key> <string>action</string> </key> <key> <string>action</string> </key>
<value> <string>validate</string> </value> <value> <string>validate</string> </value>
</item> </item>
<item>
<key> <string>actor</string> </key>
<value> <string>ERP5TypeTestCase</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1377844658.71</float>
<string>GMT+9</string>
</tuple>
</state>
</object>
</value>
</item>
<item> <item>
<key> <string>validation_state</string> </key> <key> <string>validation_state</string> </key>
<value> <string>validated</string> </value> <value> <string>validated</string> </value>
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>ERP5 default workflow</string> </value> <value> <string>Discussion Thread Workflow</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>cancel</string> </value> <value> <string>cancelled</string> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -44,10 +44,7 @@ ...@@ -44,10 +44,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="PersistentMapping" module="Persistence.mapping"/>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -46,10 +46,7 @@ ...@@ -46,10 +46,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="PersistentMapping" module="Persistence.mapping"/>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -61,6 +58,7 @@ ...@@ -61,6 +58,7 @@
<key> <string>Access contents information</string> </key> <key> <string>Access contents information</string> </key>
<value> <value>
<tuple> <tuple>
<string>Assignor</string>
<string>Manager</string> <string>Manager</string>
<string>Owner</string> <string>Owner</string>
</tuple> </tuple>
...@@ -96,7 +94,7 @@ ...@@ -96,7 +94,7 @@
<key> <string>View</string> </key> <key> <string>View</string> </key>
<value> <value>
<tuple> <tuple>
<string>Manager</string> <string>Assignor</string>
<string>Owner</string> <string>Owner</string>
</tuple> </tuple>
</value> </value>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="StateDefinition" module="Products.DCWorkflow.States"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>hidden</string> </value>
</item>
<item>
<key> <string>permission_roles</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Hidden</string> </value>
</item>
<item>
<key> <string>transitions</string> </key>
<value>
<tuple>
<string>publish</string>
<string>publish_action</string>
</tuple>
</value>
</item>
<item>
<key> <string>type_list</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>Access contents information</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>Add portal content</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>Delete objects</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>Modify portal content</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>View</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -30,8 +30,10 @@ ...@@ -30,8 +30,10 @@
<tuple> <tuple>
<string>close</string> <string>close</string>
<string>close_action</string> <string>close_action</string>
<string>sticky</string> <string>hide</string>
<string>sticky_action</string> <string>hide_action</string>
<string>stick</string>
<string>stick_action</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -46,10 +48,7 @@ ...@@ -46,10 +48,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="PersistentMapping" module="Persistence.mapping"/>
<global name="PersistentMapping" module="Persistence.mapping"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -14,6 +14,12 @@ ...@@ -14,6 +14,12 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>sticky</string> </value> <value> <string>sticky</string> </value>
</item> </item>
<item>
<key> <string>permission_roles</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Sticky</string> </value> <value> <string>Sticky</string> </value>
...@@ -24,8 +30,8 @@ ...@@ -24,8 +30,8 @@
<tuple> <tuple>
<string>close</string> <string>close</string>
<string>close_action</string> <string>close_action</string>
<string>unsticky</string> <string>unstick</string>
<string>unsticky_action</string> <string>unstick_action</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -38,4 +44,76 @@ ...@@ -38,4 +44,76 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>Access contents information</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>Add portal content</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>Delete objects</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>Modify portal content</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>View</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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></string> </value> <value> <string></string> </value>
...@@ -38,7 +42,7 @@ ...@@ -38,7 +42,7 @@
</item> </item>
<item> <item>
<key> <string>new_state_id</string> </key> <key> <string>new_state_id</string> </key>
<value> <string>cancel</string> </value> <value> <string>cancelled</string> </value>
</item> </item>
<item> <item>
<key> <string>script_name</string> </key> <key> <string>script_name</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,9 +10,13 @@ ...@@ -10,9 +10,13 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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>Cancelled</string> </value> <value> <string>Cancel</string> </value>
</item> </item>
<item> <item>
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
...@@ -24,7 +28,7 @@ ...@@ -24,7 +28,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Cancel action.</string> </value> <value> <string>Cancels a thread</string> </value>
</item> </item>
<item> <item>
<key> <string>guard</string> </key> <key> <string>guard</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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></string> </value> <value> <string></string> </value>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,9 +10,13 @@ ...@@ -10,9 +10,13 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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>Closed</string> </value> <value> <string>Close</string> </value>
</item> </item>
<item> <item>
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
...@@ -24,7 +28,7 @@ ...@@ -24,7 +28,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Close the thread.</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>guard</string> </key> <key> <string>guard</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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></string> </value> <value> <string></string> </value>
...@@ -34,11 +38,11 @@ ...@@ -34,11 +38,11 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>unsticky</string> </value> <value> <string>hide</string> </value>
</item> </item>
<item> <item>
<key> <string>new_state_id</string> </key> <key> <string>new_state_id</string> </key>
<value> <string></string> </value> <value> <string>hidden</string> </value>
</item> </item>
<item> <item>
<key> <string>script_name</string> </key> <key> <string>script_name</string> </key>
...@@ -46,7 +50,7 @@ ...@@ -46,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Unsticky</string> </value> <value> <string>Hide</string> </value>
</item> </item>
<item> <item>
<key> <string>trigger_type</string> </key> <key> <string>trigger_type</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,21 +10,25 @@ ...@@ -10,21 +10,25 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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>Unsticky</string> </value> <value> <string>Hide </string> </value>
</item> </item>
<item> <item>
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
<value> <string>%(content_url)s/Base_viewWorkflowActionDialog?workflow_action=unsticky_action</string> </value> <value> <string>%(content_url)s/Base_viewWorkflowActionDialog?workflow_action=hide_action</string> </value>
</item> </item>
<item> <item>
<key> <string>after_script_name</string> </key> <key> <string>after_script_name</string> </key>
<value> <string></string> </value> <value> <string>hide</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Unsticky the thread.</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>guard</string> </key> <key> <string>guard</string> </key>
...@@ -34,7 +38,7 @@ ...@@ -34,7 +38,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>unsticky_action</string> </value> <value> <string>hide_action</string> </value>
</item> </item>
<item> <item>
<key> <string>new_state_id</string> </key> <key> <string>new_state_id</string> </key>
...@@ -46,7 +50,7 @@ ...@@ -46,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Unsticky Action</string> </value> <value> <string>Hide Action</string> </value>
</item> </item>
<item> <item>
<key> <string>trigger_type</string> </key> <key> <string>trigger_type</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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></string> </value> <value> <string></string> </value>
...@@ -29,7 +33,7 @@ ...@@ -29,7 +33,7 @@
<item> <item>
<key> <string>guard</string> </key> <key> <string>guard</string> </key>
<value> <value>
<none/> <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value> </value>
</item> </item>
<item> <item>
...@@ -55,4 +59,21 @@ ...@@ -55,4 +59,21 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>roles</string> </key>
<value>
<tuple>
<string>Owner</string>
</tuple>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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>Publish</string> </value> <value> <string>Publish</string> </value>
...@@ -24,7 +28,7 @@ ...@@ -24,7 +28,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Publish a thread.</string> </value> <value> <string>Publish a thread in the forum</string> </value>
</item> </item>
<item> <item>
<key> <string>guard</string> </key> <key> <string>guard</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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,7 +69,7 @@ ...@@ -68,7 +69,7 @@
<key> <string>roles</string> </key> <key> <string>roles</string> </key>
<value> <value>
<tuple> <tuple>
<string>Assignor</string> <string>Owner</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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></string> </value> <value> <string></string> </value>
...@@ -34,7 +38,7 @@ ...@@ -34,7 +38,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>sticky</string> </value> <value> <string>stick</string> </value>
</item> </item>
<item> <item>
<key> <string>new_state_id</string> </key> <key> <string>new_state_id</string> </key>
...@@ -46,7 +50,7 @@ ...@@ -46,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Sticky</string> </value> <value> <string>Stick</string> </value>
</item> </item>
<item> <item>
<key> <string>trigger_type</string> </key> <key> <string>trigger_type</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,21 +10,25 @@ ...@@ -10,21 +10,25 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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>Sticky</string> </value> <value> <string>Stick </string> </value>
</item> </item>
<item> <item>
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
<value> <string>%(content_url)s/Base_viewWorkflowActionDialog?workflow_action=sticky_action</string> </value> <value> <string>%(content_url)s/Base_viewWorkflowActionDialog?workflow_action=stick_action</string> </value>
</item> </item>
<item> <item>
<key> <string>after_script_name</string> </key> <key> <string>after_script_name</string> </key>
<value> <string>sticky</string> </value> <value> <string>stick</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Sticky the thread.</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>guard</string> </key> <key> <string>guard</string> </key>
...@@ -34,7 +38,7 @@ ...@@ -34,7 +38,7 @@
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>sticky_action</string> </value> <value> <string>stick_action</string> </value>
</item> </item>
<item> <item>
<key> <string>new_state_id</string> </key> <key> <string>new_state_id</string> </key>
...@@ -46,7 +50,7 @@ ...@@ -46,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Sticky Action</string> </value> <value> <string>Stick Action</string> </value>
</item> </item>
<item> <item>
<key> <string>trigger_type</string> </key> <key> <string>trigger_type</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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></string> </value> <value> <string></string> </value>
...@@ -38,7 +42,7 @@ ...@@ -38,7 +42,7 @@
</item> </item>
<item> <item>
<key> <string>new_state_id</string> </key> <key> <string>new_state_id</string> </key>
<value> <string></string> </value> <value> <string>public</string> </value>
</item> </item>
<item> <item>
<key> <string>script_name</string> </key> <key> <string>script_name</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
...@@ -10,9 +10,13 @@ ...@@ -10,9 +10,13 @@
<key> <string>actbox_category</string> </key> <key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value> <value> <string>workflow</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>Unclosed</string> </value> <value> <string>Unclose</string> </value>
</item> </item>
<item> <item>
<key> <string>actbox_url</string> </key> <key> <string>actbox_url</string> </key>
...@@ -20,11 +24,11 @@ ...@@ -20,11 +24,11 @@
</item> </item>
<item> <item>
<key> <string>after_script_name</string> </key> <key> <string>after_script_name</string> </key>
<value> <string></string> </value> <value> <string>unclose</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Unclose the thread.</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>guard</string> </key> <key> <string>guard</string> </key>
...@@ -38,7 +42,7 @@ ...@@ -38,7 +42,7 @@
</item> </item>
<item> <item>
<key> <string>new_state_id</string> </key> <key> <string>new_state_id</string> </key>
<value> <string>draft</string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>script_name</string> </key> <key> <string>script_name</string> </key>
...@@ -57,10 +61,7 @@ ...@@ -57,10 +61,7 @@
</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>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_url</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>after_script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>guard</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>unhide</string> </value>
</item>
<item>
<key> <string>new_state_id</string> </key>
<value> <string>public</string> </value>
</item>
<item>
<key> <string>script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Unhide</string> </value>
</item>
<item>
<key> <string>trigger_type</string> </key>
<value> <int>2</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>roles</string> </key>
<value>
<tuple>
<string>Assignor</string>
</tuple>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string>Unhide</string> </value>
</item>
<item>
<key> <string>actbox_url</string> </key>
<value> <string>%(content_url)s/Base_viewWorkflowActionDialog?workflow_action=unhide_action</string> </value>
</item>
<item>
<key> <string>after_script_name</string> </key>
<value> <string>unhide</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>guard</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>unhide_action</string> </value>
</item>
<item>
<key> <string>new_state_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Unhide Action</string> </value>
</item>
<item>
<key> <string>trigger_type</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>roles</string> </key>
<value>
<tuple>
<string>Assignor</string>
</tuple>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_url</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>after_script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>guard</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>unstick</string> </value>
</item>
<item>
<key> <string>new_state_id</string> </key>
<value> <string>public</string> </value>
</item>
<item>
<key> <string>script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Unstick</string> </value>
</item>
<item>
<key> <string>trigger_type</string> </key>
<value> <int>2</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>roles</string> </key>
<value>
<tuple>
<string>Assignor</string>
</tuple>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="TransitionDefinition" module="Products.DCWorkflow.Transitions"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>actbox_category</string> </key>
<value> <string>workflow</string> </value>
</item>
<item>
<key> <string>actbox_icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>actbox_name</string> </key>
<value> <string>Unstick</string> </value>
</item>
<item>
<key> <string>actbox_url</string> </key>
<value> <string>%(content_url)s/Base_viewWorkflowActionDialog?workflow_action=unstick_action</string> </value>
</item>
<item>
<key> <string>after_script_name</string> </key>
<value> <string>unstick</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>guard</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>unstick_action</string> </value>
</item>
<item>
<key> <string>new_state_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>script_name</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Unstick Action</string> </value>
</item>
<item>
<key> <string>trigger_type</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Guard" module="Products.DCWorkflow.Guard"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>roles</string> </key>
<value>
<tuple>
<string>Assignor</string>
</tuple>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>The last transition</string> </value> <value> <string>Transition id</string> </value>
</item> </item>
<item> <item>
<key> <string>for_catalog</string> </key> <key> <string>for_catalog</string> </key>
...@@ -47,10 +47,7 @@ ...@@ -47,10 +47,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="Expression" module="Products.CMFCore.Expression"/>
<global name="Expression" module="Products.CMFCore.Expression"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>The name of the user who performed the last transition</string> </value> <value> <string>Name of the user who performed transition</string> </value>
</item> </item>
<item> <item>
<key> <string>for_catalog</string> </key> <key> <string>for_catalog</string> </key>
...@@ -47,10 +47,7 @@ ...@@ -47,10 +47,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="Expression" module="Products.CMFCore.Expression"/>
<global name="Expression" module="Products.CMFCore.Expression"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Comments about the last transition</string> </value> <value> <string>Comment about transition</string> </value>
</item> </item>
<item> <item>
<key> <string>for_catalog</string> </key> <key> <string>for_catalog</string> </key>
...@@ -47,10 +47,7 @@ ...@@ -47,10 +47,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="Expression" module="Products.CMFCore.Expression"/>
<global name="Expression" module="Products.CMFCore.Expression"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -47,10 +47,7 @@ ...@@ -47,10 +47,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="Expression" module="Products.CMFCore.Expression"/>
<global name="Expression" module="Products.CMFCore.Expression"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>portal type (use as filter for worklists)</string> </value> <value> <string>Portal type (used as filter for worklists)</string> </value>
</item> </item>
<item> <item>
<key> <string>for_catalog</string> </key> <key> <string>for_catalog</string> </key>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Time of the last transition</string> </value> <value> <string>Transition timestamp</string> </value>
</item> </item>
<item> <item>
<key> <string>for_catalog</string> </key> <key> <string>for_catalog</string> </key>
...@@ -47,10 +47,7 @@ ...@@ -47,10 +47,7 @@
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <record id="2" aka="AAAAAAAAAAI=">
<pickle> <pickle>
<tuple> <global name="Expression" module="Products.CMFCore.Expression"/>
<global name="Expression" module="Products.CMFCore.Expression"/>
<tuple/>
</tuple>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
......
2013-09-09 arnaud.fontaine
* ZODB Components: Migrate bt5 test to Live Test.
2013-09-08 arnaud.fontaine
* ZODB Components: Revert 'Allow to execute runUnitTest for bt5 Test Components' to fix tests bootstrap.
2013-09-03 arnaud.fontaine
* ZODB Components: Workflow History must always be kept, so avoid an extra step for developers.
2013-08-28 arnaud.fontaine
* ZODB Components: Migrate Documents, Extensions and Tests.
2011-02-23 Minashe
* Initial release.
\ No newline at end of file
2011 © Nexedi SA
\ No newline at end of file
erp5_base,
erp5_web,
erp5_ingestion_mysql_innodb_catalog,
erp5_ingestion,
erp5_dms erp5_dms
\ No newline at end of file
This business template is a result of http://www.erp5.com/developer-Learning.Track.Forum tutorial. Forum creating using erp5
\ No newline at end of file \ No newline at end of file
GPL
\ No newline at end of file
Discussion Post | view Discussion Post | view
Discussion Thread Module | new_thread
Discussion Thread Module | view Discussion Thread Module | view
Discussion Thread | new_reply
Discussion Thread | view Discussion Thread | view
\ No newline at end of file
discussion_thread_module
person_module
\ No newline at end of file
Discussion Post | TextDocument Discussion Post | TextDocument
Discussion Thread | DiscussionThread Discussion Thread | Discussion Thread
\ No newline at end of file \ No newline at end of file
Discussion Post | edit_workflow
Discussion Thread | discussion_thread_workflow Discussion Thread | discussion_thread_workflow
Discussion Thread | edit_workflow Discussion Thread | edit_workflow
\ No newline at end of file
erp5_full_text_mroonga_catalog
erp5_base
erp5_web
erp5_ingestion_mysql_innodb_catalog
erp5_ingestion
\ No newline at end of file
1.0 1
\ No newline at end of file \ No newline at end of file
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