Source code for plone.app.event.browser.event_view
from Acquisition import aq_parent
from Products.Five.browser import BrowserView
from plone.event.interfaces import IEventAccessor
from plone.event.interfaces import IOccurrence
from plone.event.interfaces import IRecurrenceSupport
from zope.component import getMultiAdapter
from zope.contentprovider.interfaces import IContentProvider
[docs]def get_location(context):
"""Return the location.
This method can be used to be overwritten by external packages, for example
to provide a reference to a Location object as done by collective.venue.
"""
data = IEventAccessor(context)
return data.location
class EventView(BrowserView):
def __init__(self, context, request):
self.context = context
self.request = request
self.data = IEventAccessor(context)
@property
def get_location(self):
return get_location(self.context)
@property
def is_occurrence(self):
return IOccurrence.providedBy(self.context)
@property
def occurrence_parent_url(self):
if self.is_occurrence:
return aq_parent(self.context).absolute_url()
return None
def formatted_date(self, occ):
provider = getMultiAdapter(
(self.context, self.request, self),
IContentProvider, name='formatted_date'
)
return provider(occ)
@property
def next_occurrences(self):
"""Returns all occurrences for this context, except the start
occurrence.
The maximum defaults to 7 occurrences. If there are more occurrences
defined for this context, the result will contain the last item
of the occurrence list.
:returns: Dictionary with ``events`` and ``tail`` as keys.
:rtype: dict
"""
occ_dict = dict(events=[], tail=None)
context = self.context
adapter = IRecurrenceSupport(context, None)
if adapter is not None:
occurrences = adapter.occurrences()[1:] # don't include first
occ_dict['events'], occ_dict['tail'] = (
self._get_occurrences_helper(occurrences)
)
return occ_dict
def _get_occurrences_helper(self, occ_list, limit=7):
"""For many occurrences we limit the amount of occurrences to
display. That is, this method returns the first 6 (limit)
occurrences and the last occurrence in the list.
:param occ_list: The list of occurrences returned from
IRecurrenceSupport
:type occ_list: list
:param limit: optional, defaults to 7
:type limit: integer
:rtype: tuple of (list of events, last item of occ_list)
"""
events = []
tail = None
if occ_list:
events = occ_list[:limit]
many = len(occ_list) > limit
tail = events and occ_list.pop() or None
tail = tail if many else None
return (events, tail)