Skip to main content

RSVP System Guide

The RSVP System project has evolved from loose site-building documentation into a comprehensive Drupal Recipe Project. It now boasts a dedicated repository for both code and documentation.

You can review the demonstration site at

Below are  older planning notes compiled by on over the last few years. This documentation will be reviewd, updated and moved over to   

"We like keeping documentation under Version Control, it keeps things honest."

See & Do
Home Office

Calendar Components
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) Lead Time Validation (lead_time_validation)
Provide an optional required "Lead Times" on the RSVP  intake form. 

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


Screenshots: ECA Reservation Validation Model  (Example Flow)

Overlap Flow

3) 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.  

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

5) 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 

-- field_location (entity reference) 
 -- field_assigned_user_id Account Contact Email  
 -- field_location  Author's Assigned Site / Location (Entity Reference)
 -- field_public_location  Public Calendar Display Site / Location 
 -- field_boolean_terms Submission Agreement Terms 
 -- field_destruct_date Data Retention Policy 

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
Trimmed To Role
Content Access Control
Reservation Example


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.  

- ECA 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. 

Screenshot: Views Query Schema for Conflict Validation
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 

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