[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