コード例 #1
0
ファイル: __init__.py プロジェクト: rockfruit/mars
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)
コード例 #2
0
"""

    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)