示例#1
0
    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)
示例#2
0
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
示例#3
0
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