#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: > Products.ATContentTypes 2.0b10 > * Products.DateRecurringIndex: First working version done at > cathedral sprint [4]. Currently under refactoring [8] > * archetypes.recurringdate: Was started by "deo" at ploneconf2009. It > has to be refactored to fit into plone.app.event, > collective.calendarwidget and Products.DateRecurringIndex > > == Links == > [1] http://pypi.python.org/pypi/vs.event > > [2] https://svn.plone.org/svn/plone/plone.app.event > > [3] https://svn.plone.org/svn/collective/collective.calendarwidget > > [4] https://svn.plone.org/svn/collective/Product > s.DateRecurringIndex/branches/DateRecurringIndex2-dateutils > > [5] http://labix.org/python-dateutil > > [6] http://www.ietf.org/rfc/rfc2445.txt > > [7] > https://svn.plone.org/svn/archetypes/MoreFieldsAndWidgets/archetypes.recurringdate/ > > [8] http://github.com/thet/Products.DateRecurringIndex New description: '''Proposer:''' Johannes Raggam[[BR]] '''Seconder:''' None as yet[[BR]] [[BR]] PLIP ready for review. For an updated information what was done, please see: https://svn.plone.org/svn/plone/buildouts/plone- coredev/branches/4.1/plips/plip10886-event-improvements.txt 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: Products.ATContentTypes 2.0b10 * Products.DateRecurringIndex: First working version done at cathedral sprint [4]. Currently under refactoring [8] * archetypes.recurringdate: Was started by "deo" at ploneconf2009. It has to be refactored to fit into plone.app.event, collective.calendarwidget and Products.DateRecurringIndex == Links == [1] http://pypi.python.org/pypi/vs.event [2] https://svn.plone.org/svn/plone/plone.app.event [3] https://svn.plone.org/svn/collective/collective.calendarwidget [4] https://svn.plone.org/svn/collective/Product s.DateRecurringIndex/branches/DateRecurringIndex2-dateutils [5] http://labix.org/python-dateutil [6] http://www.ietf.org/rfc/rfc2445.txt [7] https://svn.plone.org/svn/archetypes/MoreFieldsAndWidgets/archetypes.recurringdate/ [8] http://github.com/thet/Products.DateRecurringIndex -- Comment(by thet): PLIP ready for review. For an updated information what was done, please see: https://svn.plone.org/svn/plone/buildouts/plone- coredev/branches/4.1/plips/plip10886-event-improvements.txt -- Ticket URL: <http://dev.plone.org/plone/ticket/10886#comment:19> Plone <http://plone.org> Plone Content Management System _______________________________________________ PLIP-Advisories mailing list plip-advisor...@lists.plone.org http://lists.plone.org/mailman/listinfo/plip-advisories