Details
Description
When two or more people click the register link from the Event Info page (civicrm/event/info?reset=1&id=X) at similar times CiviCRM doesn't stop them from registering, even if they will exceed the maximum participant setting for the event.
For example, consider an event with a maximum participant setting of 100. Let's say 1,000 people log on to the website at once and all click the register link at similar times over say a 5 minute period. Now let's say the profile and payment details take 10 minutes to fill in. All 1,000 registrants will be able to pay and register, get a confirmation email and be listed as registered participants for the event. Even though CiviEvent should have only allowed the first 100 to register.
I think this is because CiviEvent only checks whether max participants has been reached once in the registration process, the first time they hit the "civicrm/event/register?reset=1&id=X" page. Once that page has been loaded CiviEvent doesn't check max participant status again, even when going through the rest of the registration process.
This is an issue for large events that sell very quickly, they can easily over-sell by a large margin.
In my opinion a Gold standard solution would be to:
1) "quarantine" a timestamped registration place for the participant for a few minutes when they first hit the "civicrm/event/register?reset=1&id=X" page to allow them to fill in their details and proceed through payment.
2) when payment has been successful convert the "quarantined" place into a registered place
3) build a query in to the "civicrm/event/register?reset=1&id=X" page that checks the age of "quarantined" places and if they are older than 15 minutes delete them (or any reasonable period to allow completion of a registration)
4) show a generic notification that the event is close to capacity when registered PLUS "quarantined" places equals the maximum participant setting and encourage the registrant to check back in a few minutes time for an opening
5) show the user-set notification for a full event when "quarantined" places equals 0 and the maximum participants has been reached
However, that is not a quick fix. I think the quicker solution would be to just check on every page whether max-participants has been reached and if so arrest the process of registration. This option isn't perfect but it would reduce the potential to exceed max participants. To be included in the max participants count they should have completed the entire registration process.
Thoughts?
Thanks,
Matt