← Modules

Module

Events

Event publishing, registration, payments, tickets, check-in, attendance, and event management.

About

Complete event management for DivisionDesk organizations, from public event listings and registration through attendee management, payments, tickets, QR check-in, attendance, cancellations, refunds, reminders, options, guests, and event reporting.

Features

  • Public event listings
  • Online event registration
  • Guests and registration options
  • Paid and offline registrations
  • QR tickets and check-in
  • Attendance management
  • Registration balances
  • Cancellations and refunds
  • Event confirmations and reminders
  • Event reporting

What's New in 1.1.28

Fix Core 4.6.58 update lifecycle contract: Update::update() is now the update entry point; preserves camp-scoped event permissions and prior installation fixes.

View full package changelog
# 1.1.26 QA

- Fix installation failure caused by `use PDO;` in the global-namespace event-scope migration.
- Preserve 1.1.25 Camp-scoped event authorization and migration behavior.

# Events 1.1.25

- Adds organization scope to events. Existing events converge to Division/default.
- Camp Commander and Camp Adjutant may create, edit, publish/archive, and delete only events owned by their own Camp.
- Camp-scoped authorization is enforced server-side for save, cancel/archive, and delete operations.
- Camp officers see only their Camp events in Events administration; Division event administrators retain Division-wide authority.
- Camp event saves use the module-owned scoped save action instead of the legacy global Core save endpoint.

# Events 1.1.24
- Registration Closes remains a configurable date/time.
- Leaving it blank now explicitly means registration closes when the event begins.
- Existing registration-enabled events with no close time are converged to their event start so Core's server-side registration endpoint rejects late/direct submissions.
- The module editor synchronizes Core and Events registration timing columns after each save.
- Public registration shows a closed/not-yet-open message instead of a form outside the allowed window.
- `Register Now` is not shown after registration closes.
- Verified public Events list/upcoming/featured queries already exclude occurrences once their start time has passed.
- No Core update required.

# Events 1.1.23
- FIX: The blank public `Events` title area is now suppressed using the actual DivisionDesk Builder heading markup (`cms-block--heading`) on event-detail pages.
- The previous 1.1.22 selector looked for a `cms-hero`, which is not what this page uses; therefore it could never hide the title shown in the test screenshot.
- The Events listing page remains unchanged.
- Retains 1.1.22 tab-scroll, registration UI, and Schedule editor toolbar fixes.
- No Core change.

# Events 1.1.22
- FIX: Public tab clicks no longer jump the browser back to the top of the event card; the native tab radio state is fixed to the viewport rather than positioned at the article top.
- FIX: Event-detail pages hide the generic CMS `Events` hero/blank title area. The Events listing page is unchanged.
- FIX: Schedule rich-text toolbar buttons have explicit contrasting backgrounds/text so formatting icons remain visible.
- FIX: `Register & Pay Online` is shown only when the installed Finance module exposes the supported Events checkout contract.
- Paid Events registrations work with Finance 1.2.9+; `Register — Pay Later` remains available independently.
- No Core changes.

# Events 1.1.21
- FIX: Public Overview / Schedule / Location / Registration tabs no longer depend on JavaScript. They use native radio/label state plus CSS, so exactly one panel is selected without a JS tab handler.
- FIX: Register Now switches directly to the Registration panel using that same native mechanism.
- FIX: Corrected an undefined `$eventId` reference in the generated registration JavaScript; the real event ID is now used.
- FIX: Standalone Registration Button widget no longer inherits tab-only hidden styling.
- No Core, Finance, or Membership Manager changes.

# Events 1.1.20
- Removed attendee type selection from the new public registration flow.
- Member number and Camp name/number are available on every registration and are optional except member number on explicitly members-only events.
- Additional Guests is built in and defaults to $0 additional registration fee.
- Event admins may explicitly apply the base registration fee to each additional guest.
- Add-on quantities are independent of primary registrant/guest count.
- Blank add-on quantity means zero.
- Quantity add-ons with per-item choices allow blank choices after a confirmation warning.
- Added a canonical Core rich-text Schedule editor and public Schedule rendering.
- Preserves historical attendee-type data for existing registrations.
- Requires Core 4.6.12+.

# Events 1.1.19

- Public event tabs are now genuinely mutually exclusive. Overview, Schedule, Location and Registration occupy the same content region; inactive panels are both hidden and `display:none`.
- `Register Now` activates the Registration panel instead of appending/scrolling to a second copy of event content.
- Attendee types may be removed from active configuration even when historical registrations reference them; in that case the type is archived and history is preserved.
- An active attendee type named `Guest` automatically creates an `Additional Guests` registration control using that Guest price. Selecting 2 guests creates exactly 2 required guest-name fields.
- Priced Select/Radio options with choices are normalized to `quantity_choice`, so a Banquet priced per person gets a quantity selector and one Beef/Chicken/etc. selector per purchased unit.
- Reducing a guest/option quantity removes excess DOM controls, so hidden stale names/choices are not submitted.
- Requires Core 4.6.11+ because Core owns authoritative server-side quantity normalization and pricing.

# Events 1.1.18
- Registration is now a true event tab instead of content appended below Overview.
- Primary attendee collects full name, address, phone and email; member-only registrations also require member number and Camp name/number.
- Logged-in members auto-fill from the Membership Manager provider when available.
- Adds Guest Names options: selecting quantity N creates exactly N guest-name fields.
- Adds Quantity + per-item choice options: quantity N creates exactly N choice selectors, e.g. Beef/Chicken for each meal.
- Reducing a quantity removes and clears excess guest/choice inputs immediately.
- Quantity pricing updates live and zero quantity means no charge.
- Hides legacy duplicate `Registration Fee` add-ons when attendee type pricing already provides the base registration price.
- Retains 1.1.17 pay-now/pay-later and duplicate-submit fixes.

# Events 1.1.17
- Fixes duplicate registrations caused by Core and Events both submitting the same form.
- Fixes Save/Publish redirecting to legacy Core Events admin.
- Adds Register & Pay Online / Register — Pay Later and a live registration/add-on/total breakdown.
- Finance completion marks the matching registration paid/confirmed.
- My Events matches member ID or email and is moved before the site footer.
- Retains 1.1.16 toggle persistence and 1.1.15 rich public detail restoration.

# Events 1.1.16

- Fixes the Events module editor Registration switch turning itself back off after Save.
- Core `registration_enabled` and Events `registration_mode` are now explicitly synchronized.
- The module's post-save integration action writes both fields, so public registration becomes available immediately after enabling it.
- Event reads treat Core's `registration_enabled` compatibility field as authoritative when an older/stale `registration_mode` disagrees.
- Waitlist state is also carried through the same module extras save.
- All 1.1.15 public detail/card/routing and 1.1.13 registration/check-in/refund functionality is retained.

# Events 1.1.15

- Rebuilt from the untouched Events 1.1.13 package, not from 1.1.14.
- Preserves the 1.1.13 rich registration, QR/check-in, cancellation/refund, My Events, attendee/options and Finance integration code.
- Adds only the missing `days()`, `daysUntil()` and `startingPrice()` helpers required by the existing public detail renderer.
- Upcoming/Next/Featured event cards are styled, clickable and show `Cost: Starting at $xx.xx` for paid events.
- `/events?event=ID` now hands the Events page into the existing full Event Detail / Registration renderer instead of looping to the same list card.
- Adds narrow duplicate-submit protection to the legacy and current event editors.

# Changelog

## 1.1.13

- Fixed the false Core "Check-in code is invalid" toast after a successful short confirmation-code check-in by removing the native form-submit path entirely. The Events check-in control now uses one explicit AJAX action for short codes and only calls Core directly for signed credentials.
- Quick Actions on the Events dashboard is now a working no-JavaScript dropdown with direct links to Check-in, Registrations, Attendees, Reports and Settings.
- Removed the duplicated Core module title/card from Events administration and expanded the Events application shell to the available admin width without modifying Core.
- Expanded My Events management: members can open registration details, add guests through Core Registration 2.0 (including required guest options/add-ons), add available zero-cost options, remove options only when cancellation/refund policy allows, and cancel the full registration when permitted.
- Paid option additions are intentionally blocked before mutation when Core/Finance has no safe incremental-charge contract; the module will not silently add an unpaid charge to an already-paid registration.
- Paid refundable option removal creates an itemized refund request for Finance review instead of silently changing historical payment data.

## 1.1.12
- Audited against DivisionDesk Core 4.4.4 without changing Core.
- Fixed camera flow so permission is requested before decoder capability checks; added native BarcodeDetector + jsQR fallback scanning.
- Check-in now accepts a full QR URL, signed token, or visible confirmation code such as `761A88ED8D`.
- Bypassed the Core subdirectory QR double-prefix issue in the Events public flow by generating a correct module-owned QR from the signed credential.
- Added SDK-based `/my-events` management/cancellation controls for signed-in members.
- Aligned runtime data access with Core Registration 2.0 (`first_name`/`last_name`, `confirmed`/`waitlisted`, `price_cents`, `event_registration_options`, `event_registration_answers`).
- Refund calculations now use Core paid totals and answer price snapshots when available.
- Prevented Events uninstall from dropping Core-owned event/registration tables.

## 1.1.11
- Added attendee self-cancellation using confirmation code + registration email, with per-event cancellation controls and cutoff date.
- Added event-level refund modes plus per-attendee-type and per-option refund policies (inherit/refundable/nonrefundable/manual).
- Paid cancellations create auditable itemized refund requests; Events never moves money directly and leaves actual refund processing to Core/Finance.
- Added optional automatic waitlist promotion when a confirmed registration cancels.
- Reworked confirmation URL normalization so the configured DivisionDesk base path is never prepended twice by Events.
- Expanded schema convergence and Diagnostics for cancellation/refund fields and refund-request storage.
- Documented that the QR image on Core's confirmation/badge page is Core-owned; Events Check-in safely extracts the signed token even if a scanned QR contains a URL.

## 1.1.9
- Prevented duplicate public registration submissions with a single raw same-origin request, submit locking, button disabling, and a short post-success lock.
- Public registration now explicitly renders every active option/add-on and labels each one Required or Optional; only required fields receive browser validation.
- Successful registration stays in the Events registration experience rather than automatically following Core legacy redirects.
- Confirmation URLs returned by Core are normalized to the configured DivisionDesk public base path for subdirectory installs.
- QR check-in accepts a raw signed credential or extracts token/credential/checkin_token/code values from a scanned QR URL.
- Removed the module link to undocumented `/events-badge.php`, which could produce a 404; registrations now link to the supported Check-in workspace.

## 1.1.8
- Removed duplicate Core/page heading presentation from Events module pages and widened the Events workspace.
- Published one-off events are now immediately discoverable by public Events widgets even if an occurrence row has not yet been materialized.
- Added an in-module public event preview so administrators can test the exact public event/registration experience before placing widgets.
- The Registration Button widget now resolves the selected/next published event and exposes a working registration flow instead of an orphan anchor.
- Event presentation fields (summary, featured image, city/state, timezone, all-day/featured flags) are persisted after the frozen Core save contract through an Events Smart Action.
- Public widget queries now fall back safely to base event dates when occurrence materialization is not available.

- Made event options/add-ons truly optional and removed invalid nested forms.
- Added multiple option/type creation controls and remove actions.
- Added cancel/archive and guarded permanent delete event actions.
- Kept successful saves inside the polished Events module editor.
- Expanded responsive layout to a centered wide workspace instead of a cramped Core column.

## 1.1.6
- Full runtime schema convergence for registration types, registration fields, and categories, including active/sort_order and every column referenced by current queries.
- Diagnostics/schema health now verifies those query-critical columns before reporting current.

# Changelog

## 1.1.6
- Fixed Dashboard/Events/Check-in compatibility with Core-created event rows that use `location` rather than `location_name`.
- Added Core 4.3.4 event-contract compatibility fields non-destructively and synchronized legacy display fields.
- Fixed partial output-buffer leakage so a caught page exception no longer duplicates the Events rail/layout.
- Event saves now return to the DivisionDesk Events module editor instead of the legacy Core `/events-admin.php` screen.
- Registration type/option saves stay inside the module UI instead of following Core legacy redirects.
- Removed negative-margin module layout behavior that could collide with the Core admin shell.
- Diagnostics now verifies both Core event-contract fields and Events display fields.

## 1.1.4
- Added request-time schema health checking and idempotent self-healing so Store replacements no longer depend on Install/Update lifecycle hooks.
- Schema repair directly converges missing Events/Registration 2.0 tables and columns without deleting existing event data.
- Diagnostics exposes automatic repair failures and retains the explicit Repair / Verify Events Schema Smart Action.
- Schema version is verified and recorded as 1.1.4 only after required objects are confirmed present.

## 1.1.2
- Stabilized Dashboard, Venues, Categories and Settings with defensive data access.
- Added module-owned exception handling so useful errors are visible instead of being swallowed by the Core page wrapper.
- Added Diagnostics page for database driver, schema version, required tables and Registration 2.0 columns.
- Added migration 003 to verify/repair required v1.1 schema columns and record schema version 1.1.2.
- Preserved the approved Events v1.1 admin visual system and Platform 1.1 API/SDK architecture.

# Events Changelog

## 1.1.0 — 2026-08-28
- Rebuilt administration around Developer Platform 1.1 module-owned admin pages and the approved Events dashboard visual language.
- Added Registration 2.0 attendee types, priced options/add-ons, capacities, waitlists and member-only flags.
- Added QR/manual check-in workspace and registration schema fields for signed check-in credentials, confirmation codes and check-in timestamps.
- Added Reports, Attendees, Waitlists, Venues, Settings and API workspaces.
- Added setup wizard, dashboard contribution, search provider, Smart Action, integration listeners and current SDK job registration.
- Added public Event Detail / Registration and Registration Button Builder widgets.
- Event mutations use Core Events / Registration 2.0 endpoints; payments/refunds remain owned by central Finance/Payments integration.
- Removed legacy standalone admin chrome from the primary experience.

## 1.0.0 — 2026-08-14
- Initial Events module baseline.

## 1.1.2
- Schema repair release: install/update now explicitly converges partial Events schemas.
- Creates missing categories, venues, settings, registration fields and registration types tables.
- Adds missing Registration 2.0 columns including registration_mode, amounts, confirmation and QR check-in fields.
- Adds Diagnostics Repair / Verify Events Schema action.
- Clarifies recurring-event generation horizon setting.

Release History

1.1.28 development published
2026-10-01T22:43:29+00:00

Fix Core 4.6.58 update lifecycle contract: Update::update() is now the update entry point; preserves camp-scoped event permissions and prior installation fixes.

1.1.27 development published
2026-10-01T22:36:30+00:00

Adds the required Events Lifecycle::update() hook for Cubicle updates while preserving the 1.1.26 strict-PHP migration fix and Camp Commander/Adjutant scoped event authorization.

1.1.26 development published
2026-10-01T22:33:43+00:00

Fixes Events 1.1.25 installation on strict DivisionDesk error handling by removing the redundant global PDO import from the event-scope migration. Preserves Camp Commander/Adjutant scoped event create, edit, publish, archive and delete authorization.

1.1.25 development published
2026-09-25T21:34:00+00:00

Adds registration timing enforcement: configurable close time; blank defaults to event start; existing enabled events are converged to that default; public registration closes at deadline/start. Public event listings continue to exclude started/past occurrences.

1.1.24 development published
2026-09-13T06:32:33+00:00

Adds registration timing enforcement: configurable close time; blank defaults to event start; existing enabled events are converged to that default; public registration closes at deadline/start. Public event listings continue to exclude started/past occurrences.