#10886: plone.app.event - new eventtype for plone
+---
Reporter: thet| Owner: thet
Type: PLIP| Status: new
Priority: minor | Milestone: 4.1
Component: Infrastructure |Keywords: event, recurring, date
+---
Old description:
'''Proposer:''' Johannes Raggam[[BR]]
'''Seconder:''' None as yet[[BR]]
[[BR]]
Please note: this PLIP is an update of
http://dev.plone.org/plone/ticket/9302
[[BR]]
== Motivation ==
The current event type is in need of a major overhaul. The datetime
widgets are hard to use, and makes it hard to enter such things as all
day events. Recurrence is a recurring feature request, that has been
solved many times.
== Proposal Implementation ==
At the cathedral sprint in cologne a new package was created named
plone.app.event [1]. It is based on the work from vs.event [2].
The intention of plone.app.event is to provide an improved event type for
plone. It should be a replacement of ATEvent. All event specific code is
peeled out of ATContentTypes and refactored into plone.app.event, as it
was done with plone's folder implementation (plone.folder and
plone.app.folder). Benefits of separating the most complex ATContentType
from ATCT could be:
* Easier maintaining of the event content type
* Easier to reuse generic calendaring tools (Generalizing them
eventually in plone.event)
* Possibility to use plone.app.event also as a basis for a dexterity
event type implementation
Features of plone.app.event:
* drop-in replacement for ATEvent
* new calendar widget with full internationalization and localization
support (collective.calendarwidget [3])
* support for whole day events
* support for events without end dates
* proper export of whole day events to iCal
* recurrence
plone.app.event provides an ATEvent content type which implements
IATEvent. IATEvent should be based on a more generic IEvent interface.
This should then also be the basis for eventtype implementations based on
dexterity.
The implementation of the recurrence support started at the cathedral
sprint could be done as follows:
Products.DateRecurringIndex is a drop-in replacement for the standard
DateIndex. When the event type is being indexed, it should calculate
every occurrence for the start-date and the end-date based on recurrence
definition rules and write it to the start- respectively the end-index.
The original version has support for recurrence rules based on time-
deltas. The improved version of Products.DateRecurringIndex [4] has
additional support for dateutil's recurrence rules. Dateutils[5] rrule is
a complete and fast implementation of the recurrence rules defined in the
iCalendar RFC [6].
The event type should make use of a recurrence field and a recurrence
widget, possibly based on archetypes.recurringdate [7]. In combination
with dateutil, the power of the recurrence support is more or less just a
question of the recurrence widget.
The pytz library for timezone conversation related things should be used
where possible and appropriate.
Some architectural decisions aspects need still to be discussed.
== Deliverables ==
* Products.ATContentTypes branch without it's event related code
* collective.calendarwidget for a date selecting widget
* plone.app.event for the content type and all event related code
remaining
* tests, documentation, localization of course
For recurrence support:
* Products.DateRecurringIndex with dateutil support
* An updated Calendar portlet that uses the recurrence index (best
place for it: plone.app.event).
* Updated content views.
* archetypes.recurringdate for a recurrence field which stores
recurrence definitions or datetuils.rrule instances itself and widget
which provides fields to define the recurrence definitions
* a migration step to re-index all events, using
Products.DateRecurringIndex
== Risks ==
* plone.app.event and Products.ATContentTypes must be synchronized
sometime
* Event related code must be removed from Products.ATContentTypes
sometime
* Third party packages which rely on ATCT internals may break
(although ATCT should still provide BBB imports from plone.app.event)
== Participants ==
* Johannes Raggam - Products.DateRecurringIndex, recurrence related
work
* Vincent Fretin - collective.calendarwidget
Unconfirmed, but cologne plone.app.event sprint participants:
* Andreas Jung - vs.event refactoring to plone.app.event
* Tom Gross, Rodrigo Ristow - plone.app.event,
Products.ATContentTypes
== Progress ==
* collective.calendarwidget: almost done
* plone.app.event: Half Way. Currently based on: