Conflict check counts self-authored bookings, blocking subsequent bookings to the same group event
Plugin: Fluent Booking Pro 2.0.05 (with Fluent Booking 2.0.05)
Setup: Group event (Mysore class, max 20 attendees), Google Calendar 2-way sync enabled with that calendar as the βconflict checkβ calendar.
Whatβs happening
- User A books the group event at 06:30.
- Fluent Bookingβs GCal sync writes a corresponding event onto my host calendar (e.g., βBooking: Mysore β Tuesday, Apr 28β).
- User B tries to book the same group event at 06:30.
- The conflict check runs GoogleHelper::getRemoteBookedSlots() on my host calendar, finds the event Fluent Booking just wrote there, and treats it as a host-busy conflict.
- User B is blocked β even though there are 19 spots remaining on the same event.
So the conflict checker is fighting its own sync. After the first booking, every subsequent booking to the same group event sees a βhost busyβ event that the booking system itself just created.
Why I think this is a bug
The events fluent-booking writes to GCal carry a clear marker (the booking id, plus your sync metadata). The conflict checker doesnβt filter those out β it treats them like any other busy block on the hostβs calendar. Result: group events that are explicitly designed to allow N concurrent bookings get gated as if they were 1-on-1 sessions.
For 1-on-1 events this isnβt visible because max-per-slot is 1 anyway. The bug only surfaces on group events (event_type=group_event, max_book_per_slot > 1), which is exactly the scenario youβd want concurrent bookings to work cleanly.
Reproduction - Create a group event with max_book_per_slot = 20.
- Connect hostβs Google Calendar with 2-way sync, mark that calendar as a conflict-check calendar.
- Have user A complete a booking.
- Confirm a βBooking: β¦β event lands on host GCal.
- Have user B attempt to book the same slot β theyβre blocked, even though remaining = 19.
Workaround
Empty conflict_check_ids on the hostβs _google_user_token meta (wp_fcal_meta). This disables conflict checking site-wide, so external host events stop blocking bookings β but internal Fluent Booking conflicts still work, which keeps 1-on-1 protection intact. Acceptable temporary fix; not great as a permanent state because the host loses real-conflict protection from their actual personal calendar.
Suggested fix
When GoogleHelper::getRemoteBookedSlots() enumerates events on a check calendar, filter out events that originated from Fluent Booking. The extendedProperties already carry a private.fluent_booking_id (or similar) on events the plugin writes β skip any event whose extendedProperties match the running site. Same fix applies to Outlook / Apple / Nextcloud conflict checkers, which share the pattern.
Happy to share the relevant settings or test on my install if useful.
Hey, thanks for sharing such a detailed breakdown - that really helps!
Iβve just tested this scenario on my end using a similar setup (group event + Google Calendar 2-way sync + conflict check enabled), and I wasnβt able to reproduce the issue. In my case, multiple users were able to book the same time slot until the max capacity was reached, even though the events were being synced to Google Calendar.
Because of that, it doesnβt look like a general bug with group events or the conflict checker itself. Itβs more likely something specific to the configuration.
A couple of things you might want to double-check:
-
If there are any additional custom solutions applied, that marks the host as busy for the full slot
-
Minimum Notice is causing the timeslot to be displayed; try setting it to 0 initially.
If you can, maybe try testing with:
- A fresh group event
- A new calendar (or a different one for conflict check)
That might help isolate whether itβs a setup-specific issue.
Curious to see if others can reproduce this as well π