Skip to main content

RSVP Reservation System Guide

An outline of notes for building RSVP Reservation Calendar Systems using Drupal CMS.

Application design concepts include:

  • Content Schema 
  • Access Model (Roles, Rosters, Subscriptions)
  • Request Intake
  • Moderation
  • Event Workflows
  • Reporting


     
Client & Application Requirements:

The Drupal CMS platform is ideal for building flexible "RSVP Systems".  Drupal has been proven to meet unique client needs while running Enterprise workloads.

Accessible, Fair, Easy, Reliable.
RSVP Locations are available based on Role membership.
Conflict checking prevents time overlap.
Moderation process manages with team and group Roles.
Data Management tools for importing/exporting and reporting on data
Modern Content Displays: Calendars dashboard pages, Email notifications, Mobile CSS, print and PDF reporting.
 


ECA (Event Condition Action) Workflow Models

We leverage a few Drupal contributed modules within the RSVP system. The ECA module does the bulk of the lifting, providing a business logic workflow solution. ECA provides much of the functionality that was formerly provided by the Drupal Rules module. ECA can be used to help replace the need for small custom "one-off" modules. Resource Conflict, used for date overlap validation, was a key Drupal 7 module that we are replacing with the help of ECA.

Key Workflow Models :

1) RSVP Validation (reservation_validation) 
Performs conflict checking using the location and time data.  

Screenshot: ECA Reservation Validation Model  (Example Flow)
Image
Workflow_Example
Image
Overlap Flow

 


2) RSVP Assign Public Location (reservation_assignment)
For new Requests. Copies the Author's the "Assigned Location" value into the "Public Location" display field.  This step pins the RSVP to a Location's affiliated site calendar. 

3) RSVP New Request Notification  (reservation _notification)  - Submission alerts for Site Teams

4) RSVP Moderation State Change  (reservation_moderation)  - Site Manager Dashboard Updates / Approval Queue
 
Content Types:

Location (location) This content type uses "Per-Node" security to limit  requester access during the request process.  A requester's Location selection access is governed using Role subscriptions. This content type is used later as an Entity Reference on RSVP Request.       

URL Content Pattern = {home_site}/location/location_name

Reservation (reservation_request)   
Description RSVP Reservation Request  
 * Content Revisions Enabled
url  {home_site}/reservation_request/{user_id}_MM-DD-YYY-HH-MM}
underName Borrower / Requester - Entity Reference  {user_id}
Booking Time bookingTime
startTime
endTime

-- field_location (entity reference)    
https://schema.org/underName
 -- field_assigned_user_id Account Contact Email 
 -- field_assigned_location  Author's Assigned Site / Location
 -- field_public_location  Public Calendar Display Site / Location
 -- field_boolean_terms Submission Agreement Terms
 

Image
Form Flow



Views (Data Queries) :

Location Lookup (Entity Reference); a security trimmed list of available locations.    
Used as an "Entity Reference" for RSVP Reservation Requests.

Screenshot: Content Access Control set "per-instance"  for Locations
Image
Trimmed To Role
Image
Content Access Control


Limitations of this Conflict Validation Process:
It is likely more efficient to perform conflict validation in a custom module, where the SQL Query could be highly optimized. Our ECA model brings in all events from the Views Query, then processes them in a loop. There are a few steps that can help limit performance issues. 

- Conflict Validation only runs against future Reservations

- The Views Query has a contextual filter passed in from the ECA workflow. Ideally the query would filter on both Date and Location.  Reservable spaces with lots of future reservations could slow the validation process. YMMV
 

Screenshot: Views Query Schema for Conflict Validation
Image
Content Validation View

Calendar Displays;  Monthly, Print Listings, QR Room Sheets 


Advance Setup and Requirements:

The Content Access module controls which locations are displayed on the RSVP request form.

Our Tamper module has been patched to add Timezone display formatting. (Work in Progress, expected ready 5/23.
https://www.drupal.org/files/issues/2023-04-06/0001-Issue-3268276-Reworking-timezones.patch
 

Screenshot: RSVP Create Request - Security Trimmed Location Look-up
Image
Reservation Request