The RSVP System project has evolved from loose site-building documentation into a comprehensive Drupal Recipe Project. The project has repositories for code and documentation.
You can review the demonstration site here, demo.rsvp-system.org.
https://gitlab.com/rsvp-system/rsvp-system
https://gitlab.com/rsvp-system/rsvp-system-module
https://gitlab.com/rsvp-system/rsvp-recipes
--
Below are older planning notes compiled by on GlueBox.com over the last few years. This documentation will be reviewed, updated and moved over to https://gitlab.com/rsvp-system/rsvp-system.
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)
https://www.drupal.org/project/field_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)
Conflict Validation, Using ECA to ensure content requests do not collide.
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
startTime
endTime
-- field_location (entity reference)
https://schema.org/underName
-- 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
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
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
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