Bedework uses a single calendar model for public events. This model provides flexibility and power for Bedework deployers while simplifying the user interface for event administrators.
Filtered output: In the single calendar model, categories are the primary means of organizing events. Calendar suites can subscribe to the single calendar collection with a category filter or to predefined calendar aliases in the global calendar tree with filters already defined. This approach provides fine-grained control over what events are returned to the views. As chains of subscriptions get created, events are filtered by the union of all filters on output.
Tagged input: Subscriptions in a calendar suite may be marked as “Topical Areas” and assigned categories. Topical Areas appear in the add event form for the calendar suite and provide a means for event administrators to tag events by one or many categories. A subscription that is not marked as a topical area won't appear in the add event form for tagging and is, in essence, read-only; a subscription to an external holiday feed is a good example.
Event administrators add events within the context of a calendar suite and tag events with one or more Topical Areas defined for that suite. Each topical area may apply one or many categories to an event. This approach simplifies the event administrator's task substantially: he or she doesn't need to know what categories to select to make an event appear in a particular view or data feed; nor does a user need to know anything about the underlying calendar structure.
To summarize: subscriptions marked as topical areas are used to tag events on input, and subscriptions filter events on output based on the category filters applied to them. When a subscription points to an alias in the public tree, events are filtered by the union of all filters in the subscription and the public tree alias. Likewise, events are tagged by a union of all categories in the subscription and public tree alias. It is possible to create tagging and filtering chains by creating a chain of subscriptions.
The top-level structure of the /public calendar tree, as shipped with the Bedework quickstart, is divided into calendars, aliases, and an unbrowsable branch. In /public/cals we have only one calendar collection:
All events added to Bedework using the public events administration client are placed within the MainCal calendar collection.
Opening up the tree, we find calendar aliases that can be used by calendar suites for building subscriptions. The calendar aliases are centrally curated, pre-filtered subscriptions. The /public/aliases branch is also used to generate the listing of “suggested topical areas” for the public submissions web client. Event administrators refine these when they pick up the event for publication. The branch is likewise exposed to personal calendar users as a subscription source within the personal client.
Calendar aliases / subscriptions appear in CalDAV clients as if they were calendars.
The unbrowsable branch of the tree contains the calendar collection used to hold pending events from the submissions web client and can be used for other special purpose calendar collections.