def initialize(context): contentTypes, constructors, ftis = process_types( listTypes(PROJECTNAME), PROJECTNAME) ContentInit( PROJECTNAME + ' Content', content_types = contentTypes, permission = DEFAULT_ADD_CONTENT_PERMISSION, extra_constructors = constructors, fti = ftis, ).initialize(context) for i in range(0, len(contentTypes)): klassname = contentTypes[i].__name__ if not klassname in ADD_CONTENT_PERMISSIONS: continue context.registerClass( meta_type = ftis[i]['meta_type'], constructors = (constructors[i],), permission = ADD_CONTENT_PERMISSIONS[klassname] ) # register custom indexers for relateditems fields from zope.component import provideAdapter from plone.indexer.decorator import indexer from marsapp.content.interfaces import IMarsObject from marsapp.content.schemata import vocabularies from Products.Archetypes.interfaces.field import IReferenceField from Products.CMFCore.utils import getToolByName # allow us to index all related fields on title & desc for ct in contentTypes: for key in ct.schema.keys(): field = ct.schema[key] if (IReferenceField.providedBy(field) and not key in vocabularies.REFERENCEFIELDS_INDEXES): vocabularies.REFERENCEFIELDS_INDEXES[key] = [] if (not field.accessor in vocabularies.REFERENCEFIELDS_INDEXES[ key]): vocabularies.REFERENCEFIELDS_INDEXES[ key].append( field.accessor ) def make_reindex_related(index_name): iname = index_name def reindex_related(obj, *args, **kwargs): catalog = getToolByName(obj, 'reference_catalog') inamee = iname if not inamee in obj.schema.keys(): return field = obj.getField(iname) items = field.getRaw(obj) indexed = [] res = '' if bool(items): if isinstance(items, list): indexed.extend(items) else: indexed.append(items) for sitem in indexed: item = catalog.lookupObject(sitem) if isinstance(item, MarsCategory): try: res += ' / '.join(item.cats_path()) except: pass else: try: res += ' %s' % item.Title() except: pass try: res += ' %s' % item.Description() except: pass try: res += ' %s' % item.description except: pass if not res: res = None return res return reindex_related for field in vocabularies.REFERENCEFIELDS_INDEXES: frn = indexer(IMarsObject)(make_reindex_related(field)) for accessor in vocabularies.REFERENCEFIELDS_INDEXES[field]: provideAdapter(frn, name=accessor)
""" Index revisit dates to portal_catalog """ import Missing from Products.ATContentTypes.interface import IATContentType def _index_revisit(obj, portal=None, vars=vars, **kwargs): """ A silly method for indexing things in a meaningless way """ if hasattr(obj, "getField"): reindexField = obj.getField("revisitDate") if reindexField is not None: date = reindexField.get(obj) return date return Missing.Value try: from plone.indexer.decorator import indexer except: index_revisit = _index_revisit else: index_revisit = indexer(IATContentType)(_index_revisit)