4.6 Gatherings
Gatherings are tenant-local events. Core owns event identity, dates and location, host branch/type, publication and cancellation state, staff, activities, schedules, attendance, public pages, and calendar output. Plugins may attach feature data through associations, cells, and workflow providers.
Main model
GatheringsTable uses timestamps, footprint auditing, soft deletion, and public IDs. Its principal associations are:
BranchesandGatheringTypesCreatorsandPublishedByMemberGatheringActivitiesthrough the join tableGatheringStaffGatheringScheduledActivitiesGatheringAttendances
Use public IDs for public-facing URLs. Internal numeric IDs remain tenant-local and must not be treated as globally unique.
Lifecycle
GatheringsController supports draft creation/editing, publication, cancellation/uncancellation, soft deletion, cloning, staff and activity management, schedules, attendance, public views, calendar views, feeds, and mobile calendar data. Policy methods cover domain actions such as publish, cancel, calendar, attendance, and steward access in addition to CRUD.
Controllers coordinate requests; reusable mutations live in:
GatheringCloneServiceGatheringActivityServiceGatheringScheduleServiceICalendarService
Do not reproduce these mutations in plugin controllers.
Public and authenticated views
Public landing and calendar endpoints expose only publishable event data selected by their controller queries. Authenticated index/grid/export endpoints must apply GatheringsTablePolicy scope. A public ID does not make an unpublished gathering public.
Extension points
Plugins should attach gathering features without modifying core templates:
- register a view cell for gathering detail tabs;
- add plugin-owned associations and tables inside the plugin;
- contribute workflow actions/conditions through the workflow registries;
- use gathering public IDs only at HTTP boundaries and persisted foreign keys internally.
The Awards plugin links bestowals and gathering activities; Activities supplies configurable activity definitions; Waivers derives required collection behavior from gathering activities.
Multi-tenant rules
All related rows, cached calendar results, documents, and workflow instances belong to the active tenant. Public endpoints still pass through host-based tenant resolution. Background reminders or workflow schedules must bind the tenant before querying dates or sending mail.