[CMF-checkins] CVS: CMF/CMFSetup - actions.py:1.17.2.1

Yvo Schubbe y.2005- at wcm-solutions.de
Mon Jan 24 14:31:46 EST 2005


Update of /cvs-repository/CMF/CMFSetup
In directory cvs.zope.org:/tmp/cvs-serv30226/CMFSetup

Modified Files:
      Tag: yuppie-new_actions-branch
	actions.py 
Log Message:
- initial checkin of newstyle Actions


=== CMF/CMFSetup/actions.py 1.17 => 1.17.2.1 ===
--- CMF/CMFSetup/actions.py:1.17	Wed Jan 12 05:57:14 2005
+++ CMF/CMFSetup/actions.py	Mon Jan 24 14:31:16 2005
@@ -19,7 +19,6 @@
 from Globals import InitializeClass
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 
-from Products.CMFCore.ActionInformation import ActionInformation
 from Products.CMFCore.ActionProviderBase import IActionProvider
 from Products.CMFCore.utils import getToolByName
 
@@ -33,6 +32,7 @@
 #   Configurator entry points
 #
 _FILENAME = 'actions.xml'
+_SPECIAL_PROVIDERS = ('portal_actions', 'portal_types', 'portal_workflow')
 
 def importActionProviders( context ):
 
@@ -72,6 +72,9 @@
         for provider_id in actions_tool.listActionProviders():
             actions_tool.deleteActionProvider( provider_id )
 
+        for obj_id in actions_tool.objectIds():
+            actions_tool._delObject(obj_id)
+
     text = context.readDataFile( _FILENAME )
 
     if text is not None:
@@ -81,13 +84,53 @@
 
         for p_info in tool_info[ 'providers' ]:
 
-            if p_info[ 'id' ] not in actions_tool.listActionProviders():
+            if p_info[ 'id' ] in _SPECIAL_PROVIDERS and \
+                    p_info[ 'id' ] not in actions_tool.listActionProviders():
 
                 actions_tool.addActionProvider( p_info[ 'id' ] )
 
             provider = getToolByName( site, p_info[ 'id' ] )
-            provider._actions = [ ActionInformation(**a_info)
-                                  for a_info in p_info[ 'actions' ] ]
+            provider._actions = ()
+
+            if p_info['actions']:
+                for a_info in p_info['actions']:
+                    parent = actions_tool
+                    for category_id in a_info['category'].split('/'):
+                        if category_id not in parent.objectIds():
+                            o_info = {'id': str(category_id),
+                                      'meta_type': 'CMF Action Category',
+                                      'properties':(),
+                                      'objects': ()}
+                            apc.initObject(parent, o_info)
+                        parent = parent._getOb(category_id)
+                    if a_info['id'] not in parent.objectIds():
+                        o_info = {'id': str(a_info['id']),
+                                  'meta_type': 'CMF Action',
+                                  'properties':
+                                     ( {'id': 'title',
+                                        'value': a_info.get('title', ''),
+                                        'elements': ()}
+                                     , {'id': 'description',
+                                        'value': a_info.get('description', ''),
+                                        'elements': ()}
+                                     , {'id': 'url_expr',
+                                        'value': a_info.get('action', ''),
+                                        'elements': ()}
+                                     , {'id': 'available_expr',
+                                        'value': a_info.get('condition', ''),
+                                        'elements': ()}
+                                     , {'id': 'permissions',
+                                        'value': '',
+                                        'elements': a_info['permissions']}
+                                     , {'id': 'visible',
+                                        'value': a_info.get('visible', True),
+                                        'elements': ()}
+                                     ),
+                                  'objects': ()}
+                        apc.initObject(parent, o_info)
+
+    for sub_info in tool_info[ 'objects' ]:
+        apc.initObject( actions_tool, sub_info )
 
     return 'Action providers imported.'
 
@@ -149,7 +192,10 @@
             if not IActionProvider.isImplementedBy( provider ):
                 continue
 
-            actions = provider.listActions()
+            if provider_id == 'portal_actions':
+                actions = provider._actions
+            else:
+                actions = provider.listActions()
 
             if actions and isinstance(actions[0], dict):
                 continue
@@ -158,6 +204,13 @@
 
         return result
 
+    security.declareProtected(ManagePortal, 'listSubobjectInfos')
+    def listSubobjectInfos(self):
+        """ List info mappings for the objects stored inside the tool.
+        """
+        atool = getToolByName(self._site, 'portal_actions')
+        return [ self._extractObject(obj) for obj in atool.objectValues() ]
+
     def _getExportTemplate(self):
 
         return PageTemplateFile('apcExport.xml', _xmldir)
@@ -166,7 +219,8 @@
 
         return {
           'actions-tool':
-             { 'action-provider': {KEY: 'providers'} },
+             { 'action-provider': {KEY: 'providers'},
+               'object':          {KEY: 'objects', DEFAULT: ()} },
           'action-provider':
              { 'id':              {},
                'action':          {KEY: 'actions', DEFAULT: ()} },



More information about the CMF-checkins mailing list