Commit 06911fc0 authored by Boris Kocherov's avatar Boris Kocherov Committed by Romain Courteaud

ERP5ish portal_actions and actions in portal_actions

add ActionProviderBase for share code between ActionsTool and DynamicType
remove monkey patch ActionsTool
adapt BusinesTemplates import/export for ERP5portal_actions
change bootstrap erp5: create ERP5portal_action instead of CMFportal_actions
transparently migrate
erp5_core and erp5_promise: convert CMFaction to ERP5Action
parent 0b0b5fa5
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>1.6</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>check_site_consistency</string> </value> <value> <string>action_check_site_consistency</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>check_site_consistency</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.6</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
portal_actions | check_site_consistency
\ No newline at end of file
portal_actions/action_check_site_consistency
portal_alarms/promise_certificate_autority_tool portal_alarms/promise_certificate_autority_tool
portal_alarms/promise_conversion_server portal_alarms/promise_conversion_server
portal_alarms/promise_install_bt5 portal_alarms/promise_install_bt5
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
import fnmatch, gc, glob, imp, os, re, shutil, sys, time, tarfile import fnmatch, gc, glob, imp, os, re, shutil, sys, time, tarfile
from collections import defaultdict from collections import defaultdict
from Products.CMFCore.interfaces import IActionsTool
from Shared.DC.ZRDB import Aqueduct from Shared.DC.ZRDB import Aqueduct
from Shared.DC.ZRDB.Connection import Connection as RDBConnection from Shared.DC.ZRDB.Connection import Connection as RDBConnection
from Products.ERP5Type.DiffUtils import DiffFile from Products.ERP5Type.DiffUtils import DiffFile
...@@ -2916,7 +2917,8 @@ class ActionTemplateItem(ObjectTemplateItem): ...@@ -2916,7 +2917,8 @@ class ActionTemplateItem(ObjectTemplateItem):
Gets action copy from action provider given the action id or reference Gets action copy from action provider given the action id or reference
""" """
# Several tools still use CMF actions # Several tools still use CMF actions
if interfaces.ITypeProvider.providedBy(obj.getParentValue()): if interfaces.ITypeProvider.providedBy(obj.getParentValue()) \
or IActionsTool.providedBy(obj):
return self._getPortalTypeActionCopy(obj, value) return self._getPortalTypeActionCopy(obj, value)
else: else:
return self._getPortalToolActionCopy(obj, context, value) return self._getPortalToolActionCopy(obj, context, value)
...@@ -2962,7 +2964,8 @@ class ActionTemplateItem(ObjectTemplateItem): ...@@ -2962,7 +2964,8 @@ class ActionTemplateItem(ObjectTemplateItem):
path, id = id.rsplit('/', 1) path, id = id.rsplit('/', 1)
container = p.unrestrictedTraverse(path) container = p.unrestrictedTraverse(path)
if interfaces.ITypeProvider.providedBy(aq_parent(aq_inner(container))): if interfaces.ITypeProvider.providedBy(aq_parent(aq_inner(container)))\
or IActionsTool.providedBy(container):
# XXX future BT should use 'reference' instead of 'id' # XXX future BT should use 'reference' instead of 'id'
reference = getattr(obj, 'reference', None) or obj.id reference = getattr(obj, 'reference', None) or obj.id
portal_type_dict.setdefault(path, {})[reference] = obj portal_type_dict.setdefault(path, {})[reference] = obj
...@@ -3040,7 +3043,8 @@ class ActionTemplateItem(ObjectTemplateItem): ...@@ -3040,7 +3043,8 @@ class ActionTemplateItem(ObjectTemplateItem):
obj = p.unrestrictedTraverse(relative_url, None) obj = p.unrestrictedTraverse(relative_url, None)
# Several tools still use CMF actions # Several tools still use CMF actions
if obj is not None: if obj is not None:
is_new_action = interfaces.ITypeProvider.providedBy(obj.getParentValue()) is_new_action = interfaces.ITypeProvider.providedBy(obj.getParentValue()) or \
IActionsTool.providedBy(obj)
key = is_new_action and 'reference' or 'id' key = is_new_action and 'reference' or 'id'
else: else:
relative_url, key, value = self._splitPath(id) relative_url, key, value = self._splitPath(id)
......
...@@ -1632,6 +1632,7 @@ class ERP5Site(FolderMixIn, CMFSite, CacheCookieMixin): ...@@ -1632,6 +1632,7 @@ class ERP5Site(FolderMixIn, CMFSite, CacheCookieMixin):
if tool_id in ('portal_categories', ): if tool_id in ('portal_categories', ):
tool = tool.activate() tool = tool.activate()
tool.migrateToPortalTypeClass(tool_id not in ( tool.migrateToPortalTypeClass(tool_id not in (
'portal_actions',
'portal_activities', 'portal_simulation', 'portal_templates', 'portal_activities', 'portal_simulation', 'portal_templates',
'portal_trash')) 'portal_trash'))
if tool_id in ('portal_trash',): if tool_id in ('portal_trash',):
...@@ -1671,7 +1672,6 @@ class PortalGenerator: ...@@ -1671,7 +1672,6 @@ class PortalGenerator:
"""Set up initial tools""" """Set up initial tools"""
addCMFCoreTool = p.manage_addProduct['CMFCore'].manage_addTool addCMFCoreTool = p.manage_addProduct['CMFCore'].manage_addTool
addCMFCoreTool('CMF Actions Tool', None)
addCMFCoreTool('CMF Catalog', None) addCMFCoreTool('CMF Catalog', None)
addCMFCoreTool('CMF Member Data Tool', None) addCMFCoreTool('CMF Member Data Tool', None)
addCMFCoreTool('CMF Skins Tool', None) addCMFCoreTool('CMF Skins Tool', None)
...@@ -1849,7 +1849,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1849,7 +1849,7 @@ class ERP5Generator(PortalGenerator):
""" """
Set up initial tools. Set up initial tools.
""" """
if not 'portal_actions' in p.objectIds(): if not 'portal_skins' in p.objectIds():
PortalGenerator.setupTools(self, p) PortalGenerator.setupTools(self, p)
# It is better to remove portal_catalog # It is better to remove portal_catalog
...@@ -1883,6 +1883,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1883,6 +1883,7 @@ class ERP5Generator(PortalGenerator):
addERP5Tool(p, 'portal_password', 'Password Tool') addERP5Tool(p, 'portal_password', 'Password Tool')
addERP5Tool(p, 'portal_introspections', 'Introspection Tool') addERP5Tool(p, 'portal_introspections', 'Introspection Tool')
addERP5Tool(p, 'portal_acknowledgements', 'Acknowledgement Tool') addERP5Tool(p, 'portal_acknowledgements', 'Acknowledgement Tool')
addERP5Tool(p, 'portal_actions', 'Actions Tool')
# Add ERP5Type Tool # Add ERP5Type Tool
addERP5Tool(p, 'portal_caches', 'Cache Tool') addERP5Tool(p, 'portal_caches', 'Cache Tool')
...@@ -1984,8 +1985,6 @@ class ERP5Generator(PortalGenerator): ...@@ -1984,8 +1985,6 @@ class ERP5Generator(PortalGenerator):
removeActionsFromTool(p.portal_membership, removeActionsFromTool(p.portal_membership,
('addFavorite', 'mystuff', 'favorites', 'logged_in', ('addFavorite', 'mystuff', 'favorites', 'logged_in',
'manage_members')) 'manage_members'))
# actions tool
removeActionsFromTool(p.portal_actions, ('folderContents',))
# properties tool # properties tool
removeActionsFromTool(p.portal_properties, ('configPortal',)) removeActionsFromTool(p.portal_properties, ('configPortal',))
# remove unused action providers # remove unused action providers
......
<?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_view</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_view</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>view</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</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>View</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}/BaseType_viewAction</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>1.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>bt_tool</string> </value> <value> <string>action_bt_tool</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>bt_tool</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>2.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>category_tool</string> </value> <value> <string>action_category_tool</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>category_tool</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>2.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>3.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>component_tool</string> </value> <value> <string>action_component_tool</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>component_tool</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>3.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>3.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>create_module</string> </value> <value> <string>action_create_module</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>create_module</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>3.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>object_view</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>99.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>history</string> </value> <value> <string>action_history</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>history</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>99.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>object_ui</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/object_ui</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>list_ui</string> </value> <value> <string>action_list_ui</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>list_ui</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>user</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/user</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string>Click here to Login</string> </value> <value> <string>Click here to Login</string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>2.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>login</string> </value> <value> <string>action_login</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>login</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>2.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>user</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/user</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string>Click here to logout</string> </value> <value> <string>Click here to logout</string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>2.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>logout</string> </value> <value> <string>action_logout</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>logout</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>2.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>object_action</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_action</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>101.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>make_template</string> </value> <value> <string>action_make_template</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>make_template</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>101.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>workflow</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/workflow</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>mass_workflow</string> </value> <value> <string>action_mass_workflow</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>mass_workflow</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>object_view</string> </value> <value>
<tuple>
<string>Manage properties</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>metadata</string> </value> <value> <string>action_metadata</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>metadata</string> </value>
<tuple>
<string>Manage properties</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>object_view</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>module_view</string> </value> <value> <string>action_module_view</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>module_view</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>6.5</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>portal_alarms_action</string> </value> <value> <string>action_portal_alarms_action</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>portal_alarms_action</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>6.5</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>user</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/user</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string>Change your user preferences</string> </value> <value> <string>Change your user preferences</string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>1.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>preferences</string> </value> <value> <string>action_preferences</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>preferences</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>1.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>5.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>property_sheet_tool</string> </value> <value> <string>action_property_sheet_tool</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>property_sheet_tool</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>5.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>object_search</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/object_search</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>search</string> </value> <value> <string>action_search</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>search</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>object_sort</string> </value> <value>
<tuple>
<string>View</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/object_sort</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>sort_on</string> </value> <value> <string>action_sort_on</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>sort_on</string> </value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>100.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,36 +13,36 @@ ...@@ -13,36 +13,36 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>categories</string> </key>
<value> <string></string> </value> <value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>4.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>types_tool</string> </value> <value> <string>action_types_tool</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>types_tool</string> </value>
<tuple>
<string>Manage portal</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>4.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/> <global name="Action Information" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -13,8 +13,20 @@ ...@@ -13,8 +13,20 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>category</string> </key> <key> <string>action_permission</string> </key>
<value> <string>global</string> </value> <value>
<tuple>
<string>List undoable changes</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item> </item>
<item> <item>
<key> <string>condition</string> </key> <key> <string>condition</string> </key>
...@@ -27,24 +39,16 @@ ...@@ -27,24 +39,16 @@
<value> <string></string> </value> <value> <string></string> </value>
</item> </item>
<item> <item>
<key> <string>icon</string> </key> <key> <string>float_index</string> </key>
<value> <string></string> </value> <value> <float>10.0</float> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>undo</string> </value> <value> <string>action_undo</string> </value>
</item> </item>
<item> <item>
<key> <string>permissions</string> </key> <key> <string>reference</string> </key>
<value> <value> <string>undo</string> </value>
<tuple>
<string>List undoable changes</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>10.0</float> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Category" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/global</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>global</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>global</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Category" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/user</string>
<string>action_type/object_ui</string>
<string>action_type/object_sort</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>object_sort</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>object_sort</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Category" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/user</string>
<string>action_type/object_ui</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>object_ui</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>object_ui</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Category" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/user</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>user</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>user</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Category" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/user</string>
<string>action_type/object_ui</string>
<string>action_type/object_sort</string>
<string>action_type/workflow</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>workflow</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>workflow</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<allowed_content_type_list> <allowed_content_type_list>
<portal_type id="Actions Tool">
<item>Action Information</item>
</portal_type>
<portal_type id="Activity Tool"> <portal_type id="Activity Tool">
<item>Active Process</item> <item>Active Process</item>
</portal_type> </portal_type>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Base Type" module="erp5.portal_type"/>
</pickle>
<pickle>
<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>
<key> <string>acquire_local_roles</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>content_icon</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_meta_type</string> </key>
<value> <string>ERP5 Types Tool</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>The Types Tool centralises all portal type definitions.</string> </value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addFolder</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>
<tuple/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Actions Tool</string> </value>
</item>
<item>
<key> <string>init_script</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>permission</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>ActionsTool</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_ui</string> </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>
<global name="TranslationInformation" module="Products.ERP5Type.TranslationProviderBase"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>domain_name</string> </key>
<value> <string>erp5_ui</string> </value>
</item>
<item>
<key> <string>property_name</string> </key>
<value> <string>title</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
Acquired Property | view Acquired Property | view
Action Information | view Action Information | view
Actions Tool | view
Active Process | view Active Process | view
Activity Tool | view Activity Tool | view
Activity Tool | watch_report Activity Tool | watch_report
...@@ -132,22 +133,3 @@ Trash Folder | view ...@@ -132,22 +133,3 @@ Trash Folder | view
Trash Tool | view Trash Tool | view
Types Tool | view Types Tool | view
ZODB Continuous Increasing Id Generator | view ZODB Continuous Increasing Id Generator | view
portal_actions | bt_tool
portal_actions | category_tool
portal_actions | component_tool
portal_actions | create_module
portal_actions | history
portal_actions | list_ui
portal_actions | make_template
portal_actions | mass_workflow
portal_actions | metadata
portal_actions | module_view
portal_actions | portal_alarms_action
portal_actions | property_sheet_tool
portal_actions | search
portal_actions | sort_on
portal_actions | types_tool
portal_membership | login
portal_membership | logout
portal_membership | preferences
portal_undo | undo
\ No newline at end of file
portal_actions/action_bt_tool
portal_actions/action_category_tool
portal_actions/action_component_tool
portal_actions/action_create_module
portal_actions/action_history
portal_actions/action_list_ui
portal_actions/action_login
portal_actions/action_logout
portal_actions/action_make_template
portal_actions/action_mass_workflow
portal_actions/action_metadata
portal_actions/action_module_view
portal_actions/action_portal_alarms_action
portal_actions/action_preferences
portal_actions/action_property_sheet_tool
portal_actions/action_search
portal_actions/action_sort_on
portal_actions/action_types_tool
portal_actions/action_undo
portal_alarms/expired_password_alarm portal_alarms/expired_password_alarm
portal_caches/erp5_content_long portal_caches/erp5_content_long
portal_caches/erp5_content_long/default_ram_cache portal_caches/erp5_content_long/default_ram_cache
......
Actions Tool | Action Information
Activity Tool | Active Process Activity Tool | Active Process
Alarm Tool | Alarm Alarm Tool | Alarm
Applied Rule | Simulation Movement Applied Rule | Simulation Movement
......
Acknowledgement Tool Acknowledgement Tool
Acquired Property Acquired Property
Action Information Action Information
Actions Tool
Active Process Active Process
Activity Tool Activity Tool
Alarm Alarm
......
##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved.
# 2006 Nexedi
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################
from Products.ERP5Type.Cache import CachingMethod
from Products.ERP5Type.Globals import InitializeClass
from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Utils import deprecated
from Products.ERP5Type import Permissions
class ActionProviderBase(object):
"""
Provide Translation Tabs and management methods for PropertyTranslationDomain
"""
security = ClassSecurityInfo()
security.declarePrivate('getCacheableActionList')
def getCacheableActionList(self):
"""Return a cacheable list of enabled actions"""
return [action.getCacheableAction()
for action in self.getActionInformationList()
if action.isVisible()]
def _getActionList(self):
action_list = self.getCacheableActionList()
# This sort is a duplicate of calculation with what is done
# on portal_actions.listFilteredActionsFor . But getDefaultViewFor
# needs the sort here. This needs to be reviewed, because it is possible
# to define in portal_actions some actions that will have higher
# priorities than actions defined on portal types
action_list.sort(key=lambda x:x['priority'])
return action_list
_getActionList = CachingMethod(_getActionList,
id='getActionList',
cache_factory='erp5_content_long',
cache_id_generator=lambda method_id, *args: method_id)
security.declarePrivate('getActionList')
def getActionList(self):
"""Return the list of enabled actions from cache, sorted by priority"""
return self._getActionList(self, scope=self.id)
security.declareProtected(Permissions.ModifyPortalContent,
'clearGetActionListCache')
def clearGetActionListCache(self):
"""Clear a cache of _getRawActionInformationList."""
self._getActionList.delete(scope=self.id)
security.declareProtected(Permissions.AccessContentsInformation,
'getActionInformationList')
def getActionInformationList(self):
"""Return all Action Information objects stored on this portal type"""
return self.objectValues(meta_type='ERP5 Action Information')
#
# XXX CMF compatibility
#
def _importOldAction(self, old_action):
"""Convert a CMF action to an ERP5 action
This is used to update an existing site or to import a BT.
"""
import erp5.portal_type
ActionInformation = getattr(erp5.portal_type, 'Action Information')
old_action = old_action.__getstate__()
action_type = old_action.pop('category', None)
action_id = "action_%s" % old_action['id']
action = ActionInformation(action_id)
for k, v in old_action.iteritems():
if k in ('action', 'condition', 'icon'):
if not v:
continue
v = v.__class__(v.text)
setattr(action, {'id': 'reference',
'priority': 'float_index',
'permissions': 'action_permission',
}.get(k, k), v)
action.uid = None
action = self[self._setObject(action.id, action, set_owner=0)]
#action = self[_eventLessSetObject(self)(action.id, action, set_owner=0)]
if action_type:
action._setCategoryMembership('action_type', action_type)
return action
def _exportOldAction(self, action):
"""Convert an ERP5 action to a CMF action
This is used to export a BT.
"""
from Products.CMFCore.ActionInformation import ActionInformation
old_action = ActionInformation(action.reference,
category=action.getActionType(),
priority=action.getFloatIndex(),
permissions=tuple(action.getActionPermissionList()))
for k, v in action.__dict__.iteritems():
if k in ('action', 'condition', 'icon'):
if not v:
continue
v = v.__class__(v.text)
elif k in ('id', 'float_index', 'action_permission', 'reference'):
continue
setattr(old_action, k, v)
return old_action
security.declareProtected(Permissions.AddPortalContent, 'addAction')
@deprecated
def addAction(self, id, name, action, condition, permission, category,
icon=None, visible=1, priority=1.0, REQUEST=None,
description=None):
"""
Not used
"""
if isinstance(permission, basestring):
permission = permission,
self.newContent("action_%s" % (id,),
portal_type='Action Information',
reference=id,
title=name,
action=action,
condition=condition,
permission_list=permission,
action_type=category,
icon=icon,
visible=visible,
float_index=priority,
description=description)
security.declareProtected(Permissions.ModifyPortalContent, 'deleteActions')
@deprecated
def deleteActions(self, selections=(), REQUEST=None):
action_list = self.listActions()
self.manage_delObjects([action_list[x].id for x in selections])
security.declarePrivate('listActions')
@deprecated
def listActions(self, info=None, object=None):
""" List all the actions defined by a provider."""
return sorted(self.getActionInformationList(),
key=lambda x: (x.getFloatIndex(), x.getId()))
InitializeClass(ActionProviderBase)
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
# FOR A PARTICULAR PURPOSE # FOR A PARTICULAR PURPOSE
# #
############################################################################## ##############################################################################
from Products.ERP5Type.ActionProviderBase import ActionProviderBase
import zope.interface import zope.interface
from Products.ERP5Type.Globals import InitializeClass from Products.ERP5Type.Globals import InitializeClass
...@@ -35,7 +36,6 @@ from Products.ERP5Type.Base import getClassPropertyList ...@@ -35,7 +36,6 @@ from Products.ERP5Type.Base import getClassPropertyList
from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod
from Products.ERP5Type.Utils import deprecated, createExpressionContext from Products.ERP5Type.Utils import deprecated, createExpressionContext
from Products.ERP5Type.XMLObject import XMLObject from Products.ERP5Type.XMLObject import XMLObject
from Products.ERP5Type.Cache import CachingMethod
from Products.ERP5Type.dynamic.accessor_holder import getPropertySheetValueList, \ from Products.ERP5Type.dynamic.accessor_holder import getPropertySheetValueList, \
getAccessorHolderList getAccessorHolderList
from Products.ERP5Type.TransactionalVariable import getTransactionalVariable from Products.ERP5Type.TransactionalVariable import getTransactionalVariable
...@@ -210,6 +210,7 @@ class LocalRoleAssignorMixIn(object): ...@@ -210,6 +210,7 @@ class LocalRoleAssignorMixIn(object):
return self[self._setObject(role.id, role, set_owner=0)] return self[self._setObject(role.id, role, set_owner=0)]
class ERP5TypeInformation(XMLObject, class ERP5TypeInformation(XMLObject,
ActionProviderBase,
FactoryTypeInformation, FactoryTypeInformation,
LocalRoleAssignorMixIn, LocalRoleAssignorMixIn,
TranslationProviderBase): TranslationProviderBase):
...@@ -617,44 +618,6 @@ class ERP5TypeInformation(XMLObject, ...@@ -617,44 +618,6 @@ class ERP5TypeInformation(XMLObject,
__traceback_info__ = self.getId(), target __traceback_info__ = self.getId(), target
return ob.restrictedTraverse(target) return ob.restrictedTraverse(target)
security.declarePrivate('getCacheableActionList')
def getCacheableActionList(self):
"""Return a cacheable list of enabled actions"""
return [action.getCacheableAction()
for action in self.getActionInformationList()
if action.isVisible()]
def _getActionList(self):
action_list = self.getCacheableActionList()
# This sort is a duplicate of calculation with what is done
# on portal_actions.listFilteredActionsFor . But getDefaultViewFor
# needs the sort here. This needs to be reviewed, because it is possible
# to define in portal_actions some actions that will have higher
# priorities than actions defined on portal types
action_list.sort(key=lambda x:x['priority'])
return action_list
_getActionList = CachingMethod(_getActionList,
id='getActionList',
cache_factory='erp5_content_long',
cache_id_generator=lambda method_id, *args: method_id)
security.declarePrivate('getActionList')
def getActionList(self):
"""Return the list of enabled actions from cache, sorted by priority"""
return self._getActionList(self, scope=self.id)
security.declareProtected(Permissions.ModifyPortalContent,
'clearGetActionListCache')
def clearGetActionListCache(self):
"""Clear a cache of _getRawActionInformationList."""
self._getActionList.delete(scope=self.id)
security.declareProtected(Permissions.AccessContentsInformation,
'getActionInformationList')
def getActionInformationList(self):
"""Return all Action Information objects stored on this portal type"""
return self.objectValues(meta_type='ERP5 Action Information')
def getIcon(self): def getIcon(self):
try: try:
return self.getTypeIcon() return self.getTypeIcon()
...@@ -711,85 +674,4 @@ class ERP5TypeInformation(XMLObject, ...@@ -711,85 +674,4 @@ class ERP5TypeInformation(XMLObject,
def getHiddenContentTypeList(self): def getHiddenContentTypeList(self):
return self.getTypeHiddenContentTypeList(()) return self.getTypeHiddenContentTypeList(())
# Compatibitility code for actions
security.declareProtected(Permissions.AddPortalContent, 'addAction')
@deprecated
def addAction(self, id, name, action, condition, permission, category,
icon=None, visible=1, priority=1.0, REQUEST=None,
description=None):
if isinstance(permission, basestring):
permission = permission,
if isinstance(action, str) and action[:7] not in ('string:', 'python:'):
value = 'string:${object_url}/' + value
self.newContent(portal_type='Action Information',
reference=id,
title=name,
action=action,
condition=condition,
permission_list=permission,
action_type=category,
icon=icon,
visible=visible,
float_index=priority,
description=description)
security.declareProtected(Permissions.ModifyPortalContent, 'deleteActions')
@deprecated
def deleteActions(self, selections=(), REQUEST=None):
action_list = self.listActions()
self.manage_delObjects([action_list[x].id for x in selections])
security.declarePrivate('listActions')
@deprecated
def listActions(self, info=None, object=None):
""" List all the actions defined by a provider."""
return sorted(self.getActionInformationList(),
key=lambda x: (x.getFloatIndex(), x.getId()))
def _importOldAction(self, old_action):
"""Convert a CMF action to an ERP5 action
This is used to update an existing site or to import a BT.
"""
import erp5.portal_type
ActionInformation = getattr(erp5.portal_type, 'Action Information')
old_action = old_action.__getstate__()
action_type = old_action.pop('category', None)
action = ActionInformation(self.generateNewId())
for k, v in old_action.iteritems():
if k in ('action', 'condition', 'icon'):
if not v:
continue
v = v.__class__(v.text)
setattr(action, {'id': 'reference',
'priority': 'float_index',
'permissions': 'action_permission',
}.get(k, k), v)
action.uid = None
action = self[self._setObject(action.id, action, set_owner=0)]
if action_type:
action._setCategoryMembership('action_type', action_type)
return action
def _exportOldAction(self, action):
"""Convert an ERP5 action to a CMF action
This is used to export a BT.
"""
from Products.CMFCore.ActionInformation import ActionInformation
old_action = ActionInformation(action.reference,
category=action.getActionType(),
priority=action.getFloatIndex(),
permissions=tuple(action.getActionPermissionList()))
for k, v in action.__dict__.iteritems():
if k in ('action', 'condition', 'icon'):
if not v:
continue
v = v.__class__(v.text)
elif k in ('id', 'float_index', 'action_permission', 'reference'):
continue
setattr(old_action, k, v)
return old_action
InitializeClass( ERP5TypeInformation ) InitializeClass( ERP5TypeInformation )
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com>
# Julien Muchembled <jm@nexedi.com>
# Boris Kocherov <bk@raskon.ru>
#
# Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################
import logging
logger = logging.getLogger(__name__)
from Products.CMFCore.interfaces import IActionProvider, IActionsTool
import zope.interface
from AccessControl import ClassSecurityInfo
from Products.CMFCore import ActionsTool as CMFCore_ActionsToolModule
from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type.ActionProviderBase import ActionProviderBase
from Products.ERP5Type import Permissions
from zLOG import LOG, WARNING
CMFCore_ActionsTool = CMFCore_ActionsToolModule.ActionsTool
def _eventLessSetObject(container):
_setObject = container._setObject
return lambda *args, **kw: _setObject(suppress_events=True, *args, **kw)
def checkAndCreateActionToolBaseCategory(parent):
if not parent.portal_categories.hasObject('action_type'):
# Required to generate ActionInformation.getActionType accessor.
import erp5
action_type = getattr(erp5.portal_type, 'Base Category')('action_type')
action_type.uid = None
_eventLessSetObject(parent.portal_categories)(action_type.id, action_type)
class ActionsTool(BaseTool, ActionProviderBase, CMFCore_ActionsTool):
"""Provides a configurable registry of portal content types
"""
id = "portal_actions"
meta_type = 'ERP5 Actions Tool'
portal_type = 'Actions Tool'
allowed_types = ()
zope.interface.implements(IActionsTool)
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
def migrateNonProviders(self):
portal_actions_path = '/'.join(self.getPhysicalPath())
portal = self.getPortalObject()
action_providers = list(self.action_providers)
for provider_name in self.listActionProviders():
provider = getattr(portal, provider_name)
if (getattr(provider, '_actions', ()) and
getattr(provider, 'listActionInfos', None) is None ):
logger.info('migrating actions from %r to %r',
portal_actions_path, '/'.join(provider.getPhysicalPath()))
for old_action in provider._actions:
self._importOldAction(old_action)
del provider._actions
if (getattr(provider, 'listActionInfos', None) is None and
getattr(provider, 'getActionListFor', None) is None and
not (IActionProvider.providedBy(provider))):
action_providers.remove(provider_name)
self.action_providers = tuple(action_providers)
security.declarePrivate('getActionListFor')
def getActionListFor(self, ob=None):
"""Return all actions applicable to the object"""
old_actions = self._actions or ()
if old_actions:
LOG('OldActionsTool', WARNING, "Converting portal_actions...")
checkAndCreateActionToolBaseCategory(self)
for action_info in old_actions:
self._importOldAction(action_info)
LOG('OldActionsTool', WARNING, "... portal_actions converted.")
self._actions = ()
if ob is not None:
return (action.getCacheableAction() for action in self.objectValues())
return ()
def listFilteredActionsFor(self, object=None):
""" List all actions available to the user.
This patch removes inclusion of actions from the object itself.
It was never used and now, it breaks objects inside Types Tool.
It also checks for a new ERP5-only actions API (getActionListFor), but
this API should be moved to listActionInfos() of each tool so as not to
create duplicate code paths that are sources of bugs.
Finally, this patch detects tools that are no longer action providers and
invokes the migration of their actions to portal_actions
"""
actions = []
portal = self.getPortalObject()
# Include actions from specific tools.
for provider_name in self.listActionProviders():
provider = getattr(portal, provider_name)
if hasattr(provider, 'getActionListFor'):
from Products.ERP5Type.Utils import createExpressionContext
ec = createExpressionContext(object)
actions.extend(action.cook(ec)
for action in provider.getActionListFor(object)
if action.test(ec))
elif IActionProvider.providedBy(provider):
actions.extend(provider.listActionInfos(object=object))
else:
# This should only be triggered once
# We're in 2.12 and we need to migrate objects that are no longer
# IActionProviders:
self.migrateNonProviders()
# Recompute from beginning
return self.listFilteredActionsFor(object=object)
actions.sort(key=lambda x: x.get('priority', 0))
# Reorganize the actions by category.
filtered_actions = {'user': [],
'folder': [],
'object': [],
'global': [],
'workflow': [],
}
for action in actions:
filtered_actions.setdefault(action['category'], []).append(action)
return filtered_actions
# Change the CMFCore's ActionsTool to automatically migrate to ERP5Actions's
# ActionsTool
CMFCore_ActionsToolModule.ActionsTool = ActionsTool
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
import imp, sys, warnings import imp, sys, warnings
import inspect import inspect
from itertools import chain from itertools import chain
from Products.ERP5Type.Tool.ActionsTool import checkAndCreateActionToolBaseCategory
import zope.interface import zope.interface
from Acquisition import aq_base from Acquisition import aq_base
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
...@@ -367,12 +368,7 @@ class OldTypesTool(OFSFolder): ...@@ -367,12 +368,7 @@ class OldTypesTool(OFSFolder):
del parent.portal_types del parent.portal_types
_eventLessSetObject(parent)(TypesTool.id, types_tool, set_owner=0) _eventLessSetObject(parent)(TypesTool.id, types_tool, set_owner=0)
types_tool = types_tool.__of__(parent) types_tool = types_tool.__of__(parent)
if not parent.portal_categories.hasObject('action_type'): checkAndCreateActionToolBaseCategory(parent)
# Required to generate ActionInformation.getActionType accessor.
import erp5
action_type = getattr(erp5.portal_type, 'Base Category')('action_type')
action_type.uid = None
parent.portal_categories._setObject(action_type.id, action_type)
for type_info in self.objectValues(): for type_info in self.objectValues():
self._migratePortalType(types_tool, type_info) self._migratePortalType(types_tool, type_info)
types_tool.activate()._finalizeMigration() types_tool.activate()._finalizeMigration()
......
...@@ -43,7 +43,6 @@ from Products.ERP5Type.patches import States ...@@ -43,7 +43,6 @@ from Products.ERP5Type.patches import States
from Products.ERP5Type.patches import FSZSQLMethod from Products.ERP5Type.patches import FSZSQLMethod
from Products.ERP5Type.patches import ActionInformation from Products.ERP5Type.patches import ActionInformation
from Products.ERP5Type.patches import ActionProviderBase from Products.ERP5Type.patches import ActionProviderBase
from Products.ERP5Type.patches import ActionsTool
from Products.ERP5Type.patches import CookieCrumbler from Products.ERP5Type.patches import CookieCrumbler
from Products.ERP5Type.patches import PropertySheets from Products.ERP5Type.patches import PropertySheets
from Products.ERP5Type.patches import CMFCoreSkinnable from Products.ERP5Type.patches import CMFCoreSkinnable
......
...@@ -89,7 +89,7 @@ def initialize( context ): ...@@ -89,7 +89,7 @@ def initialize( context ):
# Import Product Components # Import Product Components
from Tool import (CacheTool, MemcachedTool, SessionTool, from Tool import (CacheTool, MemcachedTool, SessionTool,
TypesTool, WebServiceTool, PropertySheetTool, TypesTool, WebServiceTool, PropertySheetTool,
ComponentTool) ComponentTool, ActionsTool)
import Document import Document
from Base import Base from Base import Base
import XMLObject import XMLObject
...@@ -107,7 +107,8 @@ def initialize( context ): ...@@ -107,7 +107,8 @@ def initialize( context ):
TypesTool.TypesTool, TypesTool.TypesTool,
WebServiceTool.WebServiceTool, WebServiceTool.WebServiceTool,
PropertySheetTool.PropertySheetTool, PropertySheetTool.PropertySheetTool,
ComponentTool.ComponentTool ComponentTool.ComponentTool,
ActionsTool.ActionsTool,
) )
# Do initialization step # Do initialization step
initializeProduct(context, this_module, globals(), initializeProduct(context, this_module, globals(),
......
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
# Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
import logging
logger = logging.getLogger(__name__)
from Products.CMFCore.ActionsTool import ActionsTool
from Products.CMFCore.interfaces import IActionProvider
def migrateNonProviders(portal_actions):
portal_actions_path = '/'.join(portal_actions.getPhysicalPath())
portal = portal_actions.getPortalObject()
action_providers = list(portal_actions.action_providers)
for provider_name in portal_actions.listActionProviders():
provider = getattr(portal, provider_name)
if ( getattr(provider, '_actions', ()) and
getattr(provider, 'listActionInfos', None) is None ):
logger.info('migrating actions from %r to %r',
portal_actions_path, '/'.join(provider.getPhysicalPath()))
portal_actions._actions += provider._actions
del provider._actions
if (getattr(provider, 'listActionInfos', None) is None and
getattr(provider, 'getActionListFor', None) is None and
not(IActionProvider.providedBy(provider))):
action_providers.remove(provider_name)
portal_actions.action_providers = tuple(action_providers)
ActionsTool_listFilteredActionsFor = ActionsTool.listFilteredActionsFor
def listFilteredActionsFor(self, object=None):
""" List all actions available to the user.
This patch removes inclusion of actions from the object itself.
It was never used and now, it breaks objects inside Types Tool.
It also checks for a new ERP5-only actions API (getActionListFor), but
this API should be moved to listActionInfos() of each tool so as not to
create duplicate code paths that are sources of bugs.
Finally, this patch detects tools that are no longer action providers and
invokes the migration of their actions to portal_actions
"""
actions = []
# Include actions from specific tools.
for provider_name in self.listActionProviders():
provider = getattr(self, provider_name)
if hasattr(provider, 'getActionListFor'):
from Products.ERP5Type.Utils import createExpressionContext
ec = createExpressionContext(object)
actions.extend(action.cook(ec)
for action in provider.getActionListFor(object)
if action.test(ec))
elif IActionProvider.providedBy(provider):
actions.extend( provider.listActionInfos(object=object) )
else:
# This should only be triggered once
# We're in 2.12 and we need to migrate objects that are no longer
# IActionProviders:
migrateNonProviders(self)
# Recompute from beginning
return self.listFilteredActionsFor(object=object)
actions.sort(key=lambda x:x.get('priority', 0))
# Reorganize the actions by category.
filtered_actions={'user':[],
'folder':[],
'object':[],
'global':[],
'workflow':[],
}
for action in actions:
filtered_actions.setdefault(action['category'], []).append(action)
return filtered_actions
ActionsTool.listFilteredActionsFor = listFilteredActionsFor
def reorderActions(self, REQUEST=None):
"""Reorder actions according to their priorities."""
new_actions = self._cloneActions()
new_actions.sort(key=lambda x: x.getPriority())
self._actions = tuple( new_actions )
if REQUEST is not None:
return self.manage_editActionsForm(REQUEST,
manage_tabs_message='Actions reordered.')
ActionsTool.reorderActions = reorderActions
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