Critical Update – 6.4.3 and 3.2.4
Posted on July 5, 2023
Yesterday (< 12 hours ago), we updated Events Manager 6.4.2 and Pro 3.2.4 and soon discovered that in some specific instances, your site may run into a fatal error. We’ve released these updates to specifically address that issue, and apologize for the inconvenience caused to those affected.
Who is affected
If you’re running anything less than PHP 8.1, this the issues introduced in the previous update will not affect you, you may notice some warnings if you’re running PHP 8.x but these will not negatively impact the way things work. We still recommend updating though.
If you are running PHP 8.1 and also have an older version of EM Pro (3.2.2 or earlier), then updating to Events Manager 6.4.3 without updating to Pro 3.2.3 (or vice versa) will cause an error.
What to do if you’re affected
If you do have errors on your site, there’s a few ways you can fix this:
What happened: Technical summary
The issue that arose here is that we introduced an extra parameter into the EM_Booking::set_status() PHP function, which allows us to select what specific emails should get sent. We’re using this in our new cancellation functionality so that we can cancel a booking and email only the attendee.
The consequence of this action is that in PHP 8.1 onwards, all other classes that extend EM_Booking and override the set_status() function must match the same arguments in the parent class. Previous versions would raise a warning/notice, 8.1 onwards throws a critical error.
Pro extends EM_Booking in two situations, if Waitlists or Multiple Bookings Mode is enabled.
We did update Events Manager Pro 3.2.3 to account for this, but as we test on various versions of PHP (plus, one of those two features must be activated) this was not flagged initially as a critical error. So, if you upgraded to both plugin versions at once, this would also go unnoticed, the issue arose if you had a specific set of server and EM settings enabled.
Given that this is a breaking feature for anyone with older versions of Pro (due to expired licenses or not wanting to upgrade), we felt it necessary to make a backwards-compatible workaround for this, the end result being that we now make use of func_get_args() to allow for additional parameters passed to set_status(), and keep the same argument list as in 6.4.1 and earlier.
This content was originally published here.