diff --git a/product/ERP5/Tool/CategoryTool.py b/product/ERP5/Tool/CategoryTool.py index 02f8b3bfb5a6ba4960b52b5088e95d190ad1a6f7..0587cd49fc1669ac879dccd8ab316b78d297c9e5 100755 --- a/product/ERP5/Tool/CategoryTool.py +++ b/product/ERP5/Tool/CategoryTool.py @@ -39,6 +39,8 @@ from OFS.Folder import Folder as OFS_Folder from Products.ERP5Type import Permissions from Products.CMFCore.PortalFolder import PortalFolder from Products.ERP5Type.CopySupport import CopyContainer +from Products.CMFCore.utils import getToolByName +from Products.ERP5Type.Document import newTempBase from zLOG import LOG @@ -119,7 +121,26 @@ class CategoryTool(CopyContainer, CMFCategoryTool, BaseTool): security.declareProtected(Permissions.AccessContentsInformation, 'getUids') getUids = getCategoryParentUidList + def updateRelatedContent(self, context, previous_category_url, new_category_url): + """ + TODO: make this method resist to very large updates (ie. long transaction) + """ + CMFCategoryTool.updateRelatedContent(self,context,previous_category_url,new_category_url) + + # We also need to udpate all predicates membership + domain_tool = getToolByName(context,'portal_domains') + portal_catalog = getToolByName(context,'portal_catalog') + kw = {} + kw['predicate_category.category_uid'] = context.getUid() + object_list = portal_catalog(**kw) + for predicate in [x.getObject() for x in object_list]: + membership_list = [] + for category in predicate.getMembershipCriterionCategoryList(): + new_category = self.updateRelatedCategory(category, previous_category_url, new_category_url) + membership_list.append(new_category) + predicate.setMembershipCriterionCategoryList(membership_list) + # We do not need to to things recursively since updateRelatedContent is already + # recursive. + InitializeClass( CategoryTool ) -#from Products.ERP5Type.Utils import monkeyPatch -#monkeyPatch(CMFCategoryTool,CategoryTool,exclude_list=['__init__'])