diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index 8029183b0d9338d739c4fd798a57b83bf4658398..8dae64b4693eac711d8395593d02a958d3c976b6 100644 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -1869,6 +1869,7 @@ class ToolTemplateItem(PathTemplateItem): def install(self, context, trashbin, **kw): """ When we install a tool that is a type provider not registered on types tool, register it into the type provider. + We also need to register the tool on the site manager """ PathTemplateItem.install(self, context, trashbin, **kw) portal = context.getPortalObject() @@ -1879,6 +1880,8 @@ class ToolTemplateItem(PathTemplateItem): type_container_id not in types_tool.type_provider_list): types_tool.type_provider_list = tuple(types_tool.type_provider_list) + \ (type_container_id,) + tool_id_list = list(set(self._objects.keys()) & set(portal._registry_tool_id_list)) + portal._registerTools(tool_id_list) def uninstall(self, context, **kw): """ When we uninstall a tool, unregister it from the type provider. """ diff --git a/product/ERP5/ERP5Site.py b/product/ERP5/ERP5Site.py index 725624a0dcefbb2d4936085da6923cb59faa7626..89e7a77ff35929ec9e793f645774f0ab19ab9188 100644 --- a/product/ERP5/ERP5Site.py +++ b/product/ERP5/ERP5Site.py @@ -351,27 +351,32 @@ class ERP5Site(ResponseHeaderGenerator, FolderMixIn, PortalObjectBase, CacheCook provided=ITranslationDomain, name=alias) + _registry_tool_id_list = 'caching_policy_manager', def _registerMissingTools(self): - from Products.CMFCore import interfaces, utils tool_id_list = ("portal_skins", "portal_types", "portal_membership", "portal_url", "portal_workflow") if (None in map(self.get, tool_id_list) or not TransactionalResource.registerOnce(__name__, 'site_manager', self.id)): return - sm = self._components - for tool_id in tool_id_list: - tool = self[tool_id] - tool_interface = utils._tool_interface_registry.get(tool_id) - if tool_interface is not None: - # Note: already registered tools will be either: - # - updated - # - registered again after being unregistered - sm.registerUtility(aq_base(tool), tool_interface) + self._registerTools(tool_id_list + self._registry_tool_id_list) def markRegistered(txn): global _missing_tools_registered _missing_tools_registered = self.id TransactionalResource(tpc_finish=markRegistered) + def _registerTools(self, tool_id_list): + from Products.CMFCore import interfaces, utils + sm = self._components + for tool_id in tool_id_list: + tool = self.get(tool_id, None) + if tool: + tool_interface = utils._tool_interface_registry.get(tool_id) + if tool_interface is not None: + # Note: already registered tools will be either: + # - updated + # - registered again after being unregistered + sm.registerUtility(aq_base(tool), tool_interface) + # backward compatibility auto-migration def getSiteManager(self): # NOTE: do not add a docstring! This method is private by virtue of