[Erp5-report] r24533 - /erp5/trunk/products/ERP5/Tool/CategoryTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Nov 7 18:44:46 CET 2008


Author: kazuhiko
Date: Fri Nov  7 18:44:45 2008
New Revision: 24533

URL: http://svn.erp5.org?rev=24533&view=rev
Log:
add a '%(path)s_updateRelatedContent' tag in activities invoked by
updateRelatedContent().

Modified:
    erp5/trunk/products/ERP5/Tool/CategoryTool.py

Modified: erp5/trunk/products/ERP5/Tool/CategoryTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/CategoryTool.py?rev=24533&r1=24532&r2=24533&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/CategoryTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Tool/CategoryTool.py [utf8] Fri Nov  7 18:44:45 2008
@@ -141,28 +141,42 @@
 
     def updateRelatedContent(self, context,
                              previous_category_url, new_category_url):
-      """See CMFCategory.CategoryTool.updateRelatedContent
+      """Updates categories of related objects and predicate membership.
+          o context: the moved object
+          o previous_category_url: the related url of this object before
+            the move
+          o new_category_url: the related url of the object after the move
 
-      This method also update all predicates membership
+      TODO: make this method resist to very large updates (ie. long transaction)
       """
-      CMFCategoryTool.updateRelatedContent(self,
-                                           context,previous_category_url,
-                                           new_category_url)
+      portal_catalog = getToolByName(context, 'portal_catalog')
+      activate_kw = {'tag':'%s_updateRelatedContent' % context.getPath()}
 
-      # 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]:
+      # udpate category related objects
+      kw = {'category.category_uid':context.getUid()}
+      for related_object in portal_catalog(**kw):
+        related_object = related_object.getObject()
+        category_list = []
+        for category in related_object.getCategoryList():
+          new_category = self.updateRelatedCategory(category,
+                                                    previous_category_url,
+                                                    new_category_url)
+          category_list.append(new_category)
+        related_object.edit(categories=category_list,
+                            activate_kw=activate_kw)
+
+      # udpate all predicates membership
+      kw = {'predicate_category.category_uid':context.getUid()}
+      for predicate in portal_catalog(**kw):
+        predicate = predicate.getObject()
         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)
+        predicate.edit(membership_criterion_category_list=membership_list,
+                       activate_kw=activate_kw)
       # We do not need to to things recursively since
       # updateRelatedContent is already recursive.
 




More information about the Erp5-report mailing list