Calendar Package

part of the ArsDigita Community System by W. Scott Meeks

The big picture

Stuff happens, a lot of it at particlar times on particular days. People need to keep track of this stuff. Hence, calendars in general, and online calendars in particular.

However, there are calendars all over the place: PC calendars, PDA calendars, Yahoo, Excite, you name it. So the question is, why an ACS calendar?

The answer, of course, is that it's integrated with all the other features of the ACS. In particular, it can take advantage of the ACS model of groups and thus it becomes very easy to support a model where both individuals and groups have calendars, and items from the group calendars appear on the individual calendars of group members.

On a related note, an increasing number of clients are requesting calendars or calendar-like features. By having both a very complete and solid data model and an basic UI that is easily customizable, we can fairly easily support a lot of what clients are asking for in a calendar.

For example, the calendar package is a key component of the education solution that has been implemented for the Sloan School of Management, ArsDigita University, and MIT's 6.916 course calendar.

The medium picture

I believe the new calendar to have a very complete data model. We've looked at various calendars including the Palm and other web calendars and I believe I can support everything they support. I've also added support for various ACS features, both current and proposed for ACS 4.0, and for various user preferences and customizations. The data model doesn't support the full range of the vCalendar/iCalendar proposed standards (as I suspect just understanding the three RFCs would be a full time job) but it is one of my goals to support a reasonable subset of the resulting standard.

At its heart, the new calendar module UI provides an individual calendar with multiple views of calendar items. The initial model of a calendar item is very simple: a title, a start time, an end time (alternately specified as a duration), and a long description. This model will be extended as time goes on.

The different views include a day view, week view, and month view. There is also a year view, but it is primarily useful for navigation. As time goes on, these views will be enhanced and some user customization supported.

The new calendar also supports various list views. In particular, for any given day, you can view the items that would be coming up on that day or the next few days. You can also view a list of the items that have been added in the last few days.

One of the key UI features of the new calendar is the navigation mini calendar which appears in the upper left corner. This is similar to the mini calendar seen on Yahoo or Excite and provides a quick and convenient mechanism for navigating to different dates and between the various views.

The first key ACS integration feature is automatic group calendars. Any group can have a calendar associated with it. For any group that a user is a member of with a calendar, a link to that group's calendar will appear on the user's calendar, and, by default, any items in the group's calendar will also appear on the user's calendar. There is a simple toggle provided to turn off displaying the group items for a particular group.

It is hoped that the new calendar module wll provide an infrastructure for time related features in general that can be integrated with other modules in the ACS. So it could provide support, for example, for a meeting planning system or a workflow system. It has already been integrated with the intranet/absences sub-module and with the reservations module.

The calendar package has also been used to replace and augment the old calendar module. It provides basically the same UI as currently and will be upgraded as time permits.

Another goal is to eventually support synchronization with other calendaring systems, particularly the Palm. There is currently a Palm/ACS synchronization initiative which we will piggy-back on.

User Model

Individuals create calendar items. Depending on whether an individual calendar or a group calendar is being viewed, newly created items will be associated with the individual calendar or the group calendar.

Individuals are presented with a list of group to which they belong and which have calendars. Items in group calendars can be selectively viewed on the individual's calendar.

The calendar supports user preferences which can be used to customize an individual's calendar. Some preferences are set automatically such as the default view. Some preferences, such as the range for upcoming items, can be set directly in the UI. Some preferences have to be set from a separate page.

Item Model

A basic calendar item has a title, a start date and an end date. There can be additional data associated with an item (not all of these are supported yet):

Items can be set up to repeat on a regular basis. Repetition can be done based on an interval of some arbitrary number of days, weeks, months or years. For repetition on a weekly basis, the specific days of the week can be specified, e.g. every other week on Tuesday and Thursday. For repetition on a monthly basis, either the day of the month or a particular day of a particular week of the month can be specified, e.g. every 3rd month on the 21st, or the third Thursday of the month, or the last Friday of the month.

Items can have files or urls attached to them. When viewing the details of an item, a link is presented to add attachments, and any existing attachments are listed.


smeeks@arsdigita.com