[Erp5-report] r38131 seb - /erp5/trunk/products/ERP5Form/PreferenceTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Sep 2 23:13:08 CEST 2010


Author: seb
Date: Thu Sep  2 23:13:08 2010
New Revision: 38131

URL: http://svn.erp5.org?rev=38131&view=rev
Log:
store the result of _getSortedPreferenceList in a transactional
variable

Modified:
    erp5/trunk/products/ERP5Form/PreferenceTool.py

Modified: erp5/trunk/products/ERP5Form/PreferenceTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/PreferenceTool.py?rev=38131&r1=38130&r2=38131&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/PreferenceTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Form/PreferenceTool.py [utf8] Thu Sep  2 23:13:08 2010
@@ -41,6 +41,7 @@ from Products.ERP5Type import Permission
 from Products.ERP5Type.Cache import CachingMethod
 from Products.ERP5Type.Utils import convertToUpperCase
 from Products.ERP5Type.Accessor.TypeDefinition import list_types
+from Products.ERP5Type.TransactionalVariable import getTransactionalVariable
 from Products.ERP5Form import _dtmldir
 
 _marker = object()
@@ -225,29 +226,37 @@ class PreferenceTool(BaseTool):
     """ return the most appropriate preferences objects,
         sorted so that the first in the list should be applied first
     """
-    prefs = []
-    # XXX will also cause problems with Manager (too long)
-    # XXX For manager, create a manager specific preference
-    #                  or better solution
-    user = getToolByName(self, 'portal_membership').getAuthenticatedMember()
-    user_is_manager = 'Manager' in user.getRolesInContext(self)
-    for pref in self.searchFolder(portal_type='Preference', sql_catalog_id=sql_catalog_id):
-      pref = pref.getObject()
-      if pref is not None and pref.getProperty('preference_state',
-                                'broken') in ('enabled', 'global'):
-        # XXX quick workaround so that manager only see user preference
-        # they actually own.
-        if user_is_manager and pref.getPriority() == Priority.USER :
-          if pref.getOwnerTuple()[1] == user.getId():
+    tv = getTransactionalVariable(self)
+    tv_key = 'PreferenceTool._getSortedPreferenceList/%s' % sql_catalog_id
+    if tv.get(tv_key, None) is None:
+      prefs = []
+      # XXX will also cause problems with Manager (too long)
+      # XXX For manager, create a manager specific preference
+      #                  or better solution
+      user = getToolByName(self, 'portal_membership').getAuthenticatedMember()
+      user_is_manager = 'Manager' in user.getRolesInContext(self)
+      for pref in self.searchFolder(portal_type='Preference', sql_catalog_id=sql_catalog_id):
+        pref = pref.getObject()
+        if pref is not None and pref.getProperty('preference_state',
+                                  'broken') in ('enabled', 'global'):
+          # XXX quick workaround so that manager only see user preference
+          # they actually own.
+          if user_is_manager and pref.getPriority() == Priority.USER :
+            if pref.getOwnerTuple()[1] == user.getId():
+              prefs.append(pref)
+          else :
             prefs.append(pref)
-        else :
-          prefs.append(pref)
-    prefs.sort(key=lambda x: x.getPriority(), reverse=True)
-    # add system preferences before user preferences
-    sys_prefs = [x.getObject() for x in self.searchFolder(portal_type='System Preference', sql_catalog_id=sql_catalog_id) \
-                 if x.getObject().getProperty('preference_state', 'broken') in ('enabled', 'global')]
-    sys_prefs.sort(key=lambda x: x.getPriority(), reverse=True)
-    return sys_prefs + prefs
+      prefs.sort(key=lambda x: x.getPriority(), reverse=True)
+      # add system preferences before user preferences
+      sys_prefs = [x.getObject() for x in self.searchFolder(portal_type='System Preference', sql_catalog_id=sql_catalog_id) \
+                   if x.getObject().getProperty('preference_state', 'broken') in ('enabled', 'global')]
+      sys_prefs.sort(key=lambda x: x.getPriority(), reverse=True)
+      preference_list = sys_prefs + prefs
+      tv[tv_key] = [x.getRelativeUrl() for x in preference_list]
+    else:
+      portal = self.getPortalObject()
+      preference_list = [portal.restrictedTraverse(x) for x in tv[tv_key]]
+    return preference_list
 
   def _getActivePreferenceByPortalType(self, portal_type):
     enabled_prefs = self._getSortedPreferenceList()




More information about the Erp5-report mailing list