def gather_events(self, start=None, stop=None, **kw):
     from Products.CMFCore import utils as cmfutils
     from Products.CMFCore.utils import getToolByName
     from p4a.calendar import interfaces
     from p4a.plonecalendar.eventprovider import _make_zcatalog_query
     
     
     catalog = cmfutils.getToolByName(self.context, 'portal_catalog')
     path = '/'.join(self.context.getPhysicalPath())
     kw = _make_zcatalog_query(start, stop, kw)
     if self.context.portal_type != 'MemberSpace':
         event_brains = catalog(portal_type='Event', path=path, **kw)
     else:
         memberid = self.context.getId()
         portal = self.context.portal_url.getPortalObject()
         if portal <> None:
             path = "/".join(portal.getPhysicalPath())
             
         event_brains = catalog(portal_type='Event', path=path,modifiers = memberid, **kw)
         
     return (interfaces.IEvent(x) for x in event_brains)
Ejemplo n.º 2
0
    def gather_events(self, start=None, stop=None, **kw):
        from Products.CMFCore import utils as cmfutils
        from Products.CMFCore.utils import getToolByName
        from p4a.calendar import interfaces
        from p4a.plonecalendar.eventprovider import _make_zcatalog_query

        catalog = cmfutils.getToolByName(self.context, 'portal_catalog')
        path = '/'.join(self.context.getPhysicalPath())
        kw = _make_zcatalog_query(start, stop, kw)
        if self.context.portal_type != 'MemberSpace':
            event_brains = catalog(portal_type='Event', path=path, **kw)
        else:
            memberid = self.context.getId()
            portal = self.context.portal_url.getPortalObject()
            if portal <> None:
                path = "/".join(portal.getPhysicalPath())

            event_brains = catalog(portal_type='Event',
                                   path=path,
                                   modifiers=memberid,
                                   **kw)

        return (interfaces.IEvent(x) for x in event_brains)
Ejemplo n.º 3
0
    def gather_events(self, start=None, stop=None, **kw):
        catalog = cmfutils.getToolByName(self.context, 'portal_catalog')

        # search in the navigation root of the currently selected language
        # and in the canonical root path with Language = preferredLanguage or
        # neutral
        pstate = getMultiAdapter((self.context, self.context.request),
                        name=u'plone_portal_state')

        nav_root_path = pstate.navigation_root_path()
        paths = [nav_root_path]

        nav_root = pstate.portal().restrictedTraverse(nav_root_path)
        try:
            canonical_path = '/'.join(
                nav_root.getCanonical().getPhysicalPath())
        except AttributeError:
            pass
        else:
            if canonical_path not in paths:
                paths.append(canonical_path)

        portal_languages = getToolByName(self.context, 'portal_languages')
        preflang = portal_languages.getPreferredLanguage()

        # If we are in the root (i. e. not inside a subsite), restrict
        # to the current folder. This restores the p4a.calendar's behaviour of
        # gather_events, since that also returns only events from the current
        # calendar.
        oshaview = getMultiAdapter((self.context, self.context.request),
                    name=u'oshaview')
        subsite = oshaview.getCurrentSubsite()

        if subsite is None:
            paths = ['/'.join(self.context.getPhysicalPath())]

        query = And(
            Eq('portal_type', 'Event'),
            In('path', paths),
            In('Language', ['', preflang]),
            )

        # Not sure where this key comes from, but it is not an index...
        for bad in ['-C', 'set_language']:
            if bad in kw:
                del kw[bad]

        kw = _make_zcatalog_query(start, stop, kw)
        # apparently arbitrary keys can be inserted and if they are not named like a cat index, advanced query will shout
        indexes = catalog.indexes()
        for key in kw.keys():
            if key not in indexes:
                del kw[key]
        
        for key, value in kw.items():
            if key in ['start', 'end']:
                if value['range'] == 'max':
                    query = And(query, Le(key, value['query']))
                else:
                    query = And(query, Ge(key, value['query']))
            else:
                query = And(query, Eq(key, value))

        if hasattr(catalog, 'getZCatalog'):
            catalog = catalog.getZCatalog()
        event_brains = catalog.evalAdvancedQuery(query, (('Date', 'desc'),))
        return (OSHBrainEvent(x) for x in event_brains)