This document covers the design and modifications needed to support events related use cases in Sunbird.
Below use cases have been considered when creating the spec
A single event listed (eg: a ask me anything session)
A collection of events (eg: a multi-day conference with one event each for the specific sessions)
Recurring events (eg: a 4 month course being taught on Mondays & Fridays)
A collection with an event within (eg: a content collection with training material, leading up to a live session)
Event Attributes
"name", "code", //identifier "description", "status", // [live, draft, retired, cancelled] "posterImage", //main image to show on the UI "thumbnail", //small image to show for listing "moreDetailsLink", //link to more details of the event "language", "ageGroup", "topics", "participationMethod", //[by invitation link, by registration, by scope {<org>, <group>}] "startDate", "endDate", "startTime", "endTime", "bookingStartDate", "bookingEndDate", "totalSeats", "availableSeats", "eventType", //[online, offline, online_and_offline] "onlineProvider", //should this be an edge instead, as there would be a known set of providers ? "onlineProviderConfig", //meeting id, password or direct links can be captured here "venue", //venue of physical location in case of offline meeting. Should this be an edge instead? "recordingLink", "recordingLinkPassword", "dialcodes", "createdOn", "createdBy", "updatedOn", "updatedBy", "flagReasons", "flags", "flaggedBy", "lastFlaggedOn"
Event Relations
eventSet hasSequenceMember event collection hasSequenceMember event event associatedTo collection //link to all the content shared as part of event
EventSet Attributes
EventSet will be a collection of Event objects. Below are the additional attributes that EventSet will have apart from Event, barring a few which will be stored at event level (startTime, endTime, recordingLink, flagReasons, flags, flaggedBy, lastFlaggedOne)
"scheduleType", //[recurring, non-recurring] "schedule", //recurring template -> { repeatEvery:<N>, repeatEveryType:<days|weeks|months|years>, //if weeks selected: repeatOnDays:[<day of week1>,..], //e.g. every Monday and Friday //if month selected: repeatOnWeek:<N>, repeatOnWeekday:<day of the week>, //e.g. Every Second Thursday of the month startTime: <startTime>, endTime: <endTime> } //non-recurring template [{date:<date>,startTime:<startTime>,endTime:<endTime>}]
EventSet Relations
eventSet hasSequenceMember event collection hasSequenceMember eventSet
Updated Enrollment table design
TBD
Telemetry and tracking - Online Events
When an online event is launched, the browser will redirect to the respective event platform, so telemetry events cannot be produced, since Sunbird is not in control of those platforms. However most platforms offer APIs to request attendee data, or webhooks to receive participant data.
For each user who enrolled to the event, we need to be able to store
Did they join the event or not
How much time did they join for
Based on this the “attendance” will be marked.
The current user enrollment table does not have these, so a revised design of the enrollment table is necessary.
Venues & Configuration for online events
Offline events can be mapped to venues. For online events, we can use the various providers as venues. Each instance of the provider config will be a venue. This allows doing checks to ensure there is only one event at a time happening at a venue.
Online Events Interface
The online events will be implemented using an interface that allows integrating multiple providers like Zoom, Gotomeeting, Google Meet, Jitsi etc. Proposed interface methods
createEvent()
addParticipant()
getParticipantJoinLink()
getHostJoinLink()
getRecording()
getAttendance()
UI Components - Consumption
Each component will be configured via the form API. All decisions in the UI should be configured. This will give flexibility to the implementation to show / hide things.
List of Events
<sb-event-list listconfig="[listConfig]"></sb-event-list>
<sb-event-calendar listconfig="[listConfig]"></sb-event-calendar>
<sb-event-grid listconfig="[listConfig]"></sb-event-grid>
Event Details
Event Details (with variations for upcoming, ongoing & complete stages, list of related content eg: recordings)
<sb-event-details identifier="[identifier]"></sb-event-details>
List of Attendees
For Event manager, screen to view attendees and download attendance data
<sb-event-attendees identifier="[identifier]"></sb-event-attendees>
Also needed is a shared service to connect with the events API
UI Components - Creation
For creation, the new hierarchy editor will be used. A plugin will be created for adding support to create events within this editor.
Additional Roles Needed
Event Creator
Can create / edit / publish events
Can view and download the attendee list for a event
API Endpoints (Work In Progress)
Create Event
Edit Event
Publish Event
Create Participation
Delete Participation
Get attendees list
Get attendees CSV export
Get join link