Events 3 has been a long, long time coming, but we're pleased to announce that it's finally here for Craft 5. It's taken us a while to actually ship this update, but it's packed full of features we've been wanting to include for years. Let's dive in!
​Sessions#
In hindsight, it was wishful thinking that an event would be comprised of a single start and end date. In reality, most events are more complicated than that, with multiple dates, times, recurrence (more on that in a moment), and more. It's not really an option to create multiple event elements for the same event, just to have multiple dates for things. This gets messy, and doesn't allow you to group events together.
With that in mind, Event elements have been repurposed. They are now the "container" for your Session elements and Ticket Type elements. Instead of defining your dates on the event, you can now create multiple sessions inside an event. Being elements, you've got the same ability to add custom fields to customise however you like.
​Ticket Types#
While Ticket Types existed in Events 2, they've been radically repurposed in Events 3. Rather than being a reusable type for the tickets you define in an event, they are the single place you define what types of tickets your event has. That means you define the same information you normally would (Adult ticket, $22, capacity of 50) — but unlike in Events 2, this isn't the actual ticket you add to your cart and purchase.
You can think of both Sessions and Ticket Types as the two bits of information we need to generate Tickets.
​All-new Tickets#
Tickets are now no longer something you define yourself in an event. Instead, they're now dynamically generated.
In Events 2, you might have had for example, an Adult ticket for $22, with a capacity of 50. You still define this content, but this is defined as a Ticket Type as described above.
In Events 3, we now generate tickets based on your Sessions and Ticket Types defined for an event. In this way, they're essentially dynamic purchasables (the thing you add to your cart), which helps to be compatible with recurring sessions.
Whenever you add or remove a Session or Ticket Type, you'll be shown a notification in your event that Tickets need to be regenerated. Changing any values in Sessions and Ticket Types won't require you to regenerate Tickets, as this content is dynamically resolved.
​Recurring Sessions#
Recurring events have been the number one feature on our list since the beginning of the plugin. When you create a Session, you now have the ability to select what sort of occurrence it is — Once, Daily, Weekly, Monthly (with developer events to add your own logic).
Once created, this actually creates a Session element for every occurrence as defined by your logic.
The reason for this approach, rather than a single Session containing the logic for recurrence is that you now have control over editing individual sessions. From our experience, there's always a need to add exceptions and tweaks to individual sessions in a recurring event.
For example, let's say you have an event starting this Friday at 6:00pm — 9:00pm, and it repeats every 2nd month for a year. You'll have 6 sessions created, one for each occurrence.
​Handling Updates#
Now, you might be thinking - what if I want to change a custom field value for all sessions, or what if the time is going to be changed to 7pm after a few months, and this should be applied to all remaining sessions? Changing sessions one-by-one would be a nightmare! That's where our unique handling of updating comes in.
When editing a recurring session, you have the option to apply any of your changes to:
- A single occurrence (the one you're editing)
- All occurrences
- The current and all future occurrences
- Custom range
One more added bonus of editing this way, is if you change date and time values, the change will offset the session dates it comes across.
For example, you might have the following sessions, which have been altered from their original 7pm time (which you can, due to each session being its own thing!)
- Monday @ 7pm
- Tuesday @ 8pm
- Wednesday @ 7:30pm
- Thursday @ 7pm
Now, if you edited the Monday session, selecting "Apply changes to All occurrences", and changed the time to 8pm, you wouldn't want all the other sessions to reset their time to 8pm. Instead, Events will look at the offset you've changed — which is adding 1 hour in this case — and modify other dates. The resulting changes would be:
- Monday @ 8pm
- Tuesday @ 9pm
- Wednesday @ 8:30pm
- Thursday @ 8pm
This example uses time, but the same applies for changing the dates, if you made the session 24 hours later for example.
With this unique way of editing content, you can either tweak sessions one-by-one, or bulk edit them.
​Purchased Tickets#
Purchased Tickets have been largely untouched, and the same process happens. Tickets, when added to that cart and that cart is complete, Purchased Tickets are created. These can be checked in by a user (via QR code), but should only be done at the event.
Previously, as soon as you visited the URL that the QR code was for, it checked in the ticket. While making the process incredibly speedy, this was also problematic for accidental check-ins who visited the URL before the event occurred.
Now, users will be prompted to check in, once visiting the page. As is already the case, you've got complete control over this template and content, so feel free to put your own spin on it.
​Extras#
Of course, there's plenty of smaller new features, changes and fixes as part of the release.
- GraphQL support
- Seats per Ticket, e.g. purchasing 1 ticket decrements the capacity by 4
- Min/max quantity, to enforce a minimum or maximum number of tickets required to be purchased
- Set a default time for sessions
- Now-optional events-level capacity as an override (previously required)
- More fine-grained user permissions
- Checking in a ticket now shows a prompt to check in, rather than automatically checking in a user
- Attach ticket PDFs to Commerce emails
- Set the timezone on start/end dates for sessions
- Dynamic titles for sessions, tickets and purchased tickets
​Wrapping up#
That's a wrap on our Craft 5 updates. It's taken a smidge longer than we planned, but Events 3 has gone through several iterations for these changes to get it just right. We're pretty stoked with the flexibility you have with creating events of all shapes, sizes and requirements.
Up next, we're finishing our Craft 4 to Craft 5 open-source plugin upgrade service. If there's any plugins you know of that need a new home, let us know!
We've also got 3 brand-new plugins on the horizon to look out for in the next few months.
Events 3 is available today for Craft 5 on the plugin store (opens new window).