def getInstancePropertyAndBaseCategoryList(self): """Return all the properties and base categories of the portal type. """ # PropertHolder._properties doesn't contain 'content' properties. ob = self.constructTempInstance(self, self.getId()) property_list = list(getattr(ob.__class__, '_properties', [])) self.updatePropertySheetDefinitionDict({'_properties': property_list}) for property_sheet in getClassPropertyList(ob.__class__): property_list += getattr(property_sheet, '_properties', () ) return_set = set() for property in property_list: if property['type'] == 'content': for suffix in property['acquired_property_id']: return_set.add(property['id'] + '_' + suffix) else: return_set.add(property['id']) for category in ob.getBaseCategoryList(): return_set.add(category) return_set.add(category + '_free_text') # XXX Can't return set to restricted code in Zope 2.8. return list(return_set)
def createAllAccessorHolderList(site, portal_type_name, portal_type, type_class): """ Create the accessor holder list with the given ZODB Property Sheets """ from erp5 import accessor_holder as accessor_holder_module property_sheet_name_set = set() accessor_holder_list = [] # Get the accessor holders of the Portal Type if portal_type is not None: accessor_holder_list.extend(portal_type.getAccessorHolderList()) portal_type_property_sheet_name_set = { accessor_holder.__name__ for accessor_holder in accessor_holder_list } else: portal_type_property_sheet_name_set = set() # XXX: Only kept for backward-compatibility as Preference and System # Preference have Preference Type as portal type, which define # getTypePropertySheetList properly and, likewise, Preference Tool # has Preference Tool Type as its portal type if portal_type_name in ("Preference Tool", "Preference", "System Preference"): if portal_type is None or \ not portal_type.getPortalType().startswith(portal_type_name): # The Property Sheet Tool may be None if the code is updated but # the BT has not been upgraded yet with portal_property_sheets try: zodb_property_sheet_name_set = set( site.portal_property_sheets.objectIds()) except AttributeError: if not getattr(site, '_v_bootstrapping', False): LOG( "ERP5Type.dynamic", WARNING, "Property Sheet Tool was not found. Please update erp5_core " "Business Template") else: for property_sheet in zodb_property_sheet_name_set: if property_sheet.endswith('Preference'): property_sheet_name_set.add(property_sheet) # XXX a hook to add per-portal type accessor holders maybe? if portal_type_name == "Preference Tool": from Products.ERP5Form.Document.PreferenceToolType import \ _generatePreferenceToolAccessorHolder accessor_holder_class = _generatePreferenceToolAccessorHolder( portal_type_name, accessor_holder_list) accessor_holder_list.insert(0, accessor_holder_class) # Get the Property Sheets defined on the document and its bases # recursively for property_sheet in getClassPropertyList(type_class): # If the Property Sheet is a string, then this is a ZODB # Property Sheet # # NOTE: The Property Sheets of a document should be given as a # string from now on if not isinstance(property_sheet, basestring): property_sheet = property_sheet.__name__ property_sheet_name_set.add(property_sheet) property_sheet_name_set = property_sheet_name_set - \ portal_type_property_sheet_name_set document_accessor_holder_list = \ getAccessorHolderList(site, portal_type_name, getPropertySheetValueList(site, property_sheet_name_set)) accessor_holder_list.extend(document_accessor_holder_list) # useless if Base Category is not yet here or if we're # currently generating accessors for Base Categories accessor_holder_class = _generateBaseAccessorHolder(site) if accessor_holder_class is not None: accessor_holder_list.append(accessor_holder_class) return accessor_holder_list
def createAllAccessorHolderList(site, portal_type_name, portal_type, type_class): """ Create the accessor holder list with the given ZODB Property Sheets """ from erp5 import accessor_holder as accessor_holder_module property_sheet_name_set = set() accessor_holder_list = [] # Get the accessor holders of the Portal Type if portal_type is not None: accessor_holder_list.extend(portal_type.getAccessorHolderList()) portal_type_property_sheet_name_set = { accessor_holder.__name__ for accessor_holder in accessor_holder_list} else: portal_type_property_sheet_name_set = set() # XXX: Only kept for backward-compatibility as Preference and System # Preference have Preference Type as portal type, which define # getTypePropertySheetList properly and, likewise, Preference Tool # has Preference Tool Type as its portal type if portal_type_name in ("Preference Tool", "Preference", "System Preference"): if portal_type is None or \ not portal_type.getPortalType().startswith(portal_type_name): # The Property Sheet Tool may be None if the code is updated but # the BT has not been upgraded yet with portal_property_sheets try: zodb_property_sheet_name_set = set(site.portal_property_sheets.objectIds()) except AttributeError: if not getattr(site, '_v_bootstrapping', False): LOG("ERP5Type.dynamic", WARNING, "Property Sheet Tool was not found. Please update erp5_core " "Business Template") else: for property_sheet in zodb_property_sheet_name_set: if property_sheet.endswith('Preference'): property_sheet_name_set.add(property_sheet) # XXX a hook to add per-portal type accessor holders maybe? if portal_type_name == "Preference Tool": from Products.ERP5Form.Document.PreferenceToolType import \ _generatePreferenceToolAccessorHolder accessor_holder_class = _generatePreferenceToolAccessorHolder( portal_type_name, accessor_holder_list) accessor_holder_list.insert(0, accessor_holder_class) # Get the Property Sheets defined on the document and its bases # recursively for property_sheet in getClassPropertyList(type_class): # If the Property Sheet is a string, then this is a ZODB # Property Sheet # # NOTE: The Property Sheets of a document should be given as a # string from now on if not isinstance(property_sheet, basestring): property_sheet = property_sheet.__name__ property_sheet_name_set.add(property_sheet) property_sheet_name_set = property_sheet_name_set - \ portal_type_property_sheet_name_set document_accessor_holder_list = \ getAccessorHolderList(site, portal_type_name, getPropertySheetValueList(site, property_sheet_name_set)) accessor_holder_list.extend(document_accessor_holder_list) # useless if Base Category is not yet here or if we're # currently generating accessors for Base Categories accessor_holder_class = _generateBaseAccessorHolder(site) if accessor_holder_class is not None: accessor_holder_list.append(accessor_holder_class) return accessor_holder_list