Ticket #9555 (closed PLIP: duplicate)

Opened 6 years ago

Last modified 6 years ago

Recurring events

Reported by: dukebody Owned by:
Priority: minor Milestone: 4.0
Component: General Version:
Keywords: Cc:

Description

 http://plone.org/products/plone/roadmap/158

Make it possible to add an event that is recurring, meaning that it occurs more than once. This is currently not possible in Plone - the only way to do it is to duplicate the event by a copy-paste operation. We propose to implement recurring events within Plone.

Proposed by

Steve Haddox / Lennart Regebro

Seconded by

Nate Aune

Proposal type

User interface, Architecture

State

being-discussed

Definitions

  • Recurring Event: An event that occurs more than once with the same details, time, location, etc and a consistent date (weekly, bi-weekly, monthly, annually).
  • Recurring Event Object / Event Recur Portal Type: A single object within the portal that holds the information for the recurring event including possible end date, whether or not the event is infinite, and which dates the event has exceptions to its general metadata.
  • Weekly: An event that occurs on the same day of each week
  • Bi-Weekly: An event that occurs on the same day every other week
  • Monthly: An event that occurs on the same day of a specific week of the month (first - fourth or last)
  • Annually: An event that occurs once a year

Existing recurring events products:

  • Recurring Event by Pawel Marzec
  • Recurring Events by Steven Haddox
  • CalCMF by Lennart Regebro

Motivation

This proposal exists as there is no implementation of recurring events within Plone that support global object creation, infinite date ranges, or installation without modification of core Plone system files. This proposal seeks to extend the Plone ATEvent schema and support Plone 3.0, and if possible 2.5. Assumptions

User is willing to allow changes to logical code in default Plone calendar. Dependencies should rely only on the existing ATContentType for events and minimal Plone files should be modified.

Proposal

Requirements

  • Allow recurrence rules that support the iCalendar recurrence definition (except multiple times within one day).
  • Ability to convert existing events to recurring events without recreation.
  • The events recurrences must be indexed so they can be displayed in calendar views.
  • The event portlet and event search page must treat recurrences as normal events.

Implementation

Overview

  • Define a extension schema with archetypes.schemaextender that implements a recurrence schema.
  • Use p4a.subtyper to enable/disable this extension on a per event basis.
  • Calculate recurrences with dateutil.rrule.
  • Provide adapters for folders and collections that provide an API to get events and occurrences.
  • Index recurring dates as integers in a field index in portal_catalog.
  • Deprecate portal_calendar

Details

This product will assume that the user wants to do as little as possible to add recurring events to their default Plone installation It will provide an easily installable product that extends the existing event schemata on a per event-basis.

To get the extra fields needed for recurrence archetypes.schemaextender will define an extension schema with recurrence, that can extend any archetypes content type that provides event data. Status:

The product p4a.ploneevent has an implementation of this that is about 90% complete.

Any content type that implements basic event info (startdate and enddate) should be extensible with the recurrence schema. This can be done using p4a.subtyper. Status:

The product p4a.ploneevent has this implemented.

There needs to be a way to get the calculated recurrence dates from a content type that has recurrence info. An adapter that provides that method for any content type that implements the above extension schema will be provided. Status:

Not finished.

The most difficult part of a single-object implementation will be to implement the logic of recurring events being displayed into the portlet calendar and possibly other calendars such as Plone4ArtistsCalendar and CalendarX. To do this adapters will be provided that provide methods to get all occurrences of all events within the displayed time frame. These adapters will in turn work by doing catalog queries for events. Recurrences of the events will be handled by querying an index that keeps track of all days the event will recur. Multiple recurrences within one day will not be supported. Status:

50%. Eventproviders for Folders and Topics exist in the Dateable projects branch of p4a.plonecalendar, but they don't support recurrent events yet.

To be able to find recurrences matched on days the recurrences needs to be indexed. The simplest way to implement this is to index the days that the event recurs in a separate index. Other, more complex options, is to implement a dedicated recurrence index that does not store the calculated recurrences, but instead checks based on the recurrence data. This is more work and possibly slower, but handles infinitely recurring events better. A last option is that the index isn't in portal_catalog, but that self-contained indexes, possibly in portal_calendar, is used for this. This proposal suggest using the first, simplest option. Status:

Not started.

Lastly, the plone portlet should be modified and possibly rewritten to use the eventproviders and thus support recurrence. plone_calendar should be deprecated. Status:Not started, although Martin Aspeli has begun some sort of rewrite of the portlet that may be useful.

Deliverables

All functionality will in the first step be delivered as add-on products for Plone 3.0. Only when this is functionally complete and stable will it be added as default to Plone.

Risks

Modifications to default portlet calendar may be lost if this product is not integrated as a pre-installed product for Plone.

Progress log

Participants

Lennart Regebro

Steven Haddox?

Change History

comment:1 Changed 6 years ago by davisagli

  • Status changed from new to closed
  • Resolution set to duplicate

An updated version of this PLIP was considered for Plone 4: #9302

comment:2 Changed 6 years ago by hannosch

  • Milestone changed from Future to 4.0

comment:3 Changed 4 years ago by davisagli

  • Component changed from Infrastructure to General
Note: See TracTickets for help on using tickets.