Commit 8e57ca29 authored by Jean-Paul Smets's avatar Jean-Paul Smets

Implemented dynamic selection of preference property sheets. It is no longe...

Implemented dynamic selection of preference property sheets. It is no longe necessary to put all propertysheet definitions in ERP5/PropertySheet

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11803 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 0c66f8ec
...@@ -37,11 +37,15 @@ class Priority: ...@@ -37,11 +37,15 @@ class Priority:
SITE = 1 SITE = 1
GROUP = 2 GROUP = 2
USER = 3 USER = 3
class Preference( Folder ): class Preference( Folder ):
""" An user preference
""" """
A system or user preference
TODO:
- migrate to ERP5Type the whole preference system
"""
# CMF Type Definition # CMF Type Definition
meta_type = 'ERP5 Preference' meta_type = 'ERP5 Preference'
portal_type = 'Preference' portal_type = 'Preference'
...@@ -50,14 +54,10 @@ class Preference( Folder ): ...@@ -50,14 +54,10 @@ class Preference( Folder ):
isRADContent = 1 isRADContent = 1
# Declarative properties # Declarative properties
property_sheets = ( PropertySheet.Base property_sheets = \
( PropertySheet.Base
, PropertySheet.XMLObject , PropertySheet.XMLObject
, PropertySheet.DublinCore , PropertySheet.DublinCore
, PropertySheet.Preference
, PropertySheet.AccountingPreference
, PropertySheet.SubversionPreference
, PropertySheet.HtmlStylePreference
, PropertySheet.DMSPreference
) )
# Declarative security # Declarative security
......
...@@ -33,8 +33,9 @@ from zLOG import LOG, INFO, PROBLEM ...@@ -33,8 +33,9 @@ from zLOG import LOG, INFO, PROBLEM
from Products.CMFCore.utils import getToolByName from Products.CMFCore.utils import getToolByName
from Products.ERP5Type.Tool.BaseTool import BaseTool from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5Type.Cache import CachingMethod from Products.ERP5Type.Cache import CachingMethod
from Products.ERP5Type.Base import Base
from Products.ERP5Type.Utils import convertToUpperCase from Products.ERP5Type.Utils import convertToUpperCase
from Products.ERP5Type.Accessor.TypeDefinition import list_types from Products.ERP5Type.Accessor.TypeDefinition import list_types
from Products.ERP5Form.Document.Preference import Preference from Products.ERP5Form.Document.Preference import Preference
...@@ -45,8 +46,13 @@ from Products.ERP5Form.Document.Preference import Priority ...@@ -45,8 +46,13 @@ from Products.ERP5Form.Document.Preference import Priority
class func_code: pass class func_code: pass
def createPreferenceMethods(portal) : def createPreferenceMethods(portal) :
"""Initialize all Preference methods on the preference tool. """
This method must be called on startup. Initialize all Preference methods on the preference tool.
This method must be called on startup.
This tool is capable of updating the list of Preference
property sheets by looking at all registered property sheets
and considering those which name ends with 'Preference'
""" """
attr_list = [] attr_list = []
typestool = getToolByName(portal, 'portal_types') typestool = getToolByName(portal, 'portal_types')
...@@ -65,9 +71,19 @@ def createPreferenceMethods(portal) : ...@@ -65,9 +71,19 @@ def createPreferenceMethods(portal) :
'unable to import Property Sheet %s' % property_sheet, e) 'unable to import Property Sheet %s' % property_sheet, e)
# 'Static' property sheets defined on the class # 'Static' property sheets defined on the class
class_property_sheet_list = Preference.property_sheets class_property_sheet_list = Preference.property_sheets
# Time to lookup for preferences defined on other modules
property_sheets = list(class_property_sheet_list)
for id in dir(PropertySheet):
if id.endswith('Preference'):
ps = getattr(PropertySheet, id)
if ps not in property_sheets:
property_sheets.append(ps)
class_property_sheet_list = tuple(property_sheets)
Preference.property_sheets = class_property_sheet_list
# We can now merge
for property_sheet in ( tuple(zmi_property_sheet_list) + for property_sheet in ( tuple(zmi_property_sheet_list) +
class_property_sheet_list ) : class_property_sheet_list ) :
# then generate common method names # then generate common method names
for prop in property_sheet._properties : for prop in property_sheet._properties :
if not prop.get('preference', 0) : if not prop.get('preference', 0) :
# only properties marked as preference are used # only properties marked as preference are used
...@@ -79,7 +95,7 @@ def createPreferenceMethods(portal) : ...@@ -79,7 +95,7 @@ def createPreferenceMethods(portal) :
for attribute_name in attr_list: for attribute_name in attr_list:
method = PreferenceMethod(attribute_name) method = PreferenceMethod(attribute_name)
setattr(PreferenceTool, attribute_name, method) setattr(PreferenceTool, attribute_name, method)
class PreferenceMethod(Method) : class PreferenceMethod(Method) :
""" A method object that lookup the attribute on preferences. """ """ A method object that lookup the attribute on preferences. """
# This is required to call the method form the Web # This is required to call the method form the Web
......
...@@ -376,6 +376,7 @@ class Base( CopyContainer, ...@@ -376,6 +376,7 @@ class Base( CopyContainer,
isIndexable = 1 # If set to 0, reindexing will not happen (useful for optimization) isIndexable = 1 # If set to 0, reindexing will not happen (useful for optimization)
isPredicate = 0 # isPredicate = 0 #
isTemplate = 0 # isTemplate = 0 #
isDocument = 0 #
# Dynamic method acquisition system (code generation) # Dynamic method acquisition system (code generation)
aq_method_generated = {} aq_method_generated = {}
...@@ -500,16 +501,20 @@ class Base( CopyContainer, ...@@ -500,16 +501,20 @@ class Base( CopyContainer,
Base.aq_related_generated = 1 Base.aq_related_generated = 1
# Generate preference methods (since side effect is to reset Preference accessors)
if not Base.aq_preference_generated: if not Base.aq_preference_generated:
try : try :
from Products.ERP5Form.PreferenceTool import createPreferenceMethods from Products.ERP5Form.PreferenceTool import createPreferenceMethods
from Products.ERP5Form.Document.Preference import Preference
createPreferenceMethods(self.getPortalObject()) createPreferenceMethods(self.getPortalObject())
# Force update of Preference accessors
initializePortalTypeDynamicProperties(self, Preference, Preference.portal_type)
except ImportError, e : except ImportError, e :
LOG('Base._aq_dynamic', WARNING, LOG('Base._aq_dynamic', WARNING,
'unable to create methods for PreferenceTool', e) 'unable to create methods for PreferenceTool', e)
raise raise
Base.aq_preference_generated = 1 Base.aq_preference_generated = 1
# Always try to return something after generation # Always try to return something after generation
if generated: if generated:
# We suppose that if we reach this point # We suppose that if we reach this point
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment