Changelog
What's changed in each version
Version 1.0.14 Current
- Fixed: when updating from an older version, the copying of order billing names and emails onto existing bookings (used by the bookings search) no longer skips bookings if a database read or write fails. It stops at the booking that failed and carries on from there on a later page load, and the update is only marked complete once every booking has been filled in
Version 1.0.13
- Fixed: if the bookings already made can't be read when a time is checked (a database error), the time is no longer treated as free. Adding to the cart, rescheduling, staff changes and late payments are refused with a "please try again" message and nothing is booked or changed. A late payment is retried every hour instead of being restored or cancelled, and the booking calendar shows the error instead of free times
Version 1.0.12
- Fixed: changing or removing a calendar link while a calendar import is being saved no longer touches the import's busy times or status. The busy times of the old link are cleared once no import is running (retried every minute until then), and they stop blocking times as soon as the link is changed. An import that has to wait for another one no longer saves anything; the problem is emailed instead
Version 1.0.11
- Fixed: when a calendar import hits a database error while replacing busy times, or while saving which import is in use, no busy time is deleted while it may still be in use. Every busy time from the last complete import stays blocked, and the problem is shown in the admin and emailed. Removing or changing a calendar link now only clears its busy times once the new settings are saved
Version 1.0.10
- Fixed: availability checks read imported calendar busy times as one consistent snapshot. If a calendar is replaced while a booking is being checked, the check reads again instead of seeing the old or new busy times only in part, so a time both calendars mark busy can never be booked during the replacement. If the busy times can't be read consistently, the time is treated as busy
Version 1.0.9
- Fixed: calendar imports can no longer overlap. One import saves at a time, so two imports of the same calendar can't leave a mixture of their busy times. Each import now checks that the previous busy times were fully replaced; if they can't be removed, the import is reported as failed and the last complete import stays in force. Only the busy times of the last complete import are ever used
Version 1.0.8
- Fixed: a payment is now decided and saved under the booking lock on the booking as it is at that moment. If its pay deadline has passed, it only gets its time back through the availability check; if another customer has taken the time, or the booking was cancelled meanwhile, it stays cancelled and the shop is told to rebook or refund
- Fixed: the admin calendar shows day and night bookings on their last date across the spring clock change (for example a single night on 28 March in the UK)
- Fixed: the admin calendar shows long bookings (more than 62 days) on every date they cover, in the month, week and day views
- Fixed: searching the bookings list by the customer's name or email now finds bookings made through the classic and block checkouts, for guests and customers with accounts, with HPOS on or off. Bookings keep a copy of their order's billing name and email, kept up to date when the order changes and removed when WooCommerce erases the order's personal data; existing bookings are filled in automatically. Search by booking number accepts #123
Version 1.0.7
- Fixed: calendar files (confirmation email attachments, My Account .ics downloads and private calendar feeds) no longer need PHP's mbstring extension. Long lines are folded at 75 bytes without splitting accented letters, other scripts or emoji
Version 1.0.6
- Fixed: an imported calendar whose timezone PHP doesn't know by name (such as Outlook's "Eastern Standard Time" or a custom name) is no longer read in the shop's timezone. Its times are converted using the calendar's own timezone definition or the matching Windows timezone. If the timezone still can't be worked out, the import fails with a warning naming it, and the busy times from the last complete import stay blocked
Version 1.0.5
- Fixed: a calendar with more busy times than can be stored (5,000 in the next two years) is no longer imported in part. The import fails with a warning in the admin and by email, the busy times from the last complete import stay blocked, and the next complete calendar imports as normal
- Fixed: the price shown on the booking form includes the staff member or resource the booking will get when it is assigned automatically or the customer chooses "Any available", and the form names who it is. If that staff member is taken before the booking is added to the cart, the cart says who it is now with and the new price
- Fixed: when a customer moves a booking from My Account, the month calendar no longer counts the booking's own time against it, so a move that overlaps the current time (09:00-11:00 to 10:00-12:00) can be chosen. Other customers still see the time as taken
Version 1.0.4
- Fixed: when a booking's cart hold runs out before it can be linked to its order, or an On hold order's pay deadline has passed, the order check and the hourly job only give it its time back through the locked availability check, with its new status and pay deadline saved in the same write. If another customer has booked the time meanwhile, the booking is cancelled instead of blocking the time again, and the shop and the customer are emailed
- Fixed: balance invoices are taxed the way the cart taxes the booking: the customer's location, the product's tax class, tax-exempt customers, and prices entered with or without tax. The deposit and the balance always add up to the full booking charge, tax included
- Fixed: bookings added in the admin with an order are taxed the same way, using the customer's saved address
- Fixed: a calendar with an event, alarm or timezone that is opened but never closed is no longer imported, even if it has no complete events at all. The busy times from the last complete import are kept and the warning is shown. A valid calendar with no events still clears the old busy times
Version 1.0.3
- Fixed: on the Pay for order page, payment only goes ahead once each booking's renewed pay deadline has been saved and read back unchanged. If the save fails, or another request changed the booking in between, the customer is asked to try again and is not charged, and the booking lock is always released
- Fixed: a calendar that can't be read in full (a repeat rule that isn't supported, a page that isn't a calendar, a calendar cut off part way, or an event with no readable start) is no longer imported. The busy times from the last complete import stay blocked, and the warning is shown in the admin and emailed
- Fixed: capacity counts the most places in use at the same moment, so bookings that follow one another (09:00-10:00, then 10:00-11:00) share a place instead of being added together. Buffers are included. This applies to product capacity, per-person capacity and shared staff and resources
- Fixed: removing or replacing a product's or staff member's calendar link stops its busy times straight away and deletes them. A calendar that temporarily can't be downloaded still keeps its last busy times
- Fixed: if a booking can't be linked to its order, moved from In cart to Unpaid, or given its pay deadline, the order is flagged and retried hourly instead of the booking being left to run out. A payment for a booking whose cart hold ran out takes the time back through the locked check first, so it can never be marked paid on top of another customer's booking
- Fixed: removing a cart item, or re-checking an expired cart hold, only deletes the booking while it is still an unpaid cart hold, never one that another request has just checked out
- Fixed: every place that takes the booking lock releases it even if an error is thrown part way
- Fixed: a customer's reschedule only applies to the booking as it was checked (time and staff member). The booking edit form never overwrites notes added while it was open, and booking notes are added in one statement so none are lost
- Fixed: if the server cuts a product or staff form short (more fields than PHP's max_input_vars allows), the booking settings are kept and the admin is told, instead of part of them being saved
- Fixed: bookings still show people of a type the shop has since removed, and their group size if group bookings are turned off. A deleted staff member or product is shown as "#ID (deleted)" instead of a blank
- Added: a warning when a product or staff member with upcoming bookings is trashed or deleted, with a link to those bookings
Version 1.0.2
- Fixed: the public calendar and time-slot requests check the booking length and group size against the product's limits (and reject impossible dates) before any availability work, so an oversized request can't make the server loop through a huge length
- Fixed: "Resend confirmation" and adding a booking with no order no longer stop with a PHP error. The confirmation is saved with the booking and sent through the email queue, so it is retried if sending fails; sending the Add booking form twice opens the booking it already made instead of creating a second one
- Fixed: changing a booking's staff member / resource, or setting a cancelled booking back to an active status (also with the Confirm, Mark paid and Complete actions), is checked under the booking lock against what is free now. Conflicts and failed saves are reported; "Allow double booking" saves it on purpose and notes it on the booking
- Fixed: staff and resources shared between products count each booking by the places it uses (one per booking, or one per person for products that count by person), stored with the booking, so every product's calendar sees the same space left. Existing bookings are updated automatically
- Fixed: repeating events in imported calendars (daily, weekly, monthly and yearly rules, with exceptions and moved or cancelled occurrences) now block every occurrence for the next two years. A calendar that can't be read in full, or can't be downloaded, shows a warning in the admin and is emailed to the shop once; the last good import is kept
- Fixed: if the booking can't be updated when a balance invoice is paid, it is handled like a first payment: the order is flagged and noted, staff are emailed, and the hourly retry or the "Re-check bookings" order action marks it paid
- Fixed: the hourly "Re-check bookings" retry now finds flagged orders on stores that don't use High-Performance Order Storage
- Fixed: My Account > Bookings lists upcoming and past bookings separately with pages, so a long history can never hide current bookings or their Pay now and Cancel links
- Fixed: restoring a trashed Pending payment, On hold or approval order gives its bookings back their status if their time is still free. If the time was taken meanwhile, the booking stays cancelled and the shop is told by order note and email
- Changed: "Email the customer a confirmation" unticked on Add booking now also keeps WooCommerce's own order emails to the customer quiet
- Fixed: refunding or cancelling a deposit order, or cancelling a deposit booking any other way, also cancels its unpaid balance invoice. The pay page refuses a balance for a cancelled booking, and a balance paid anyway is flagged to the shop by order note and email
- Fixed: on staff and resources shared between products, the longer buffer of the two bookings applies, so every product's calendar gives the same answer. Buffers are limited to 1440 minutes or 30 days
- Fixed: extras are stored by id, so removing or reordering a product's extras never changes what an existing booking shows or is charged for. Bookings made before 1.0.2 keep their extras
- Fixed: if a booking can't be saved when it is added to the cart, the customer is told and nothing goes into the cart
- Fixed: deleting a booking cancels it first (without emailing the customer), so its unpaid order and balance invoice can no longer be paid. The pay page also refuses an order whose booking no longer exists
- Fixed: setting a cancelled booking back to Confirmed, Paid or Deposit paid emails the customer, admin and staff a confirmation
- Added: hold limits, so one visitor can't reserve a whole calendar: at most 10 bookings in one cart and 20 new holds an hour from one connection, plus a site-wide cap of 50 live holds by visitors who aren't logged in, since an IP address can be faked (filters ybk_max_cart_bookings, ybk_holds_per_hour and ybk_guest_holds). Staff and logged-in customers are not held to the guest cap; staff are not limited at all
- Fixed: calendar feed links are never signed with an empty secret if the secret is missing. Added "Make new feed links" under Bookings > Settings, for a link shared by mistake
- Fixed: if a booking can't be cancelled when its order is cancelled, refunded or released for non-payment, the order is flagged and it is retried, instead of the booking holding its time with no deadline
- Fixed: a busy or failing database while the cart is re-checked keeps the booking in the cart with a "please refresh" notice, instead of removing it as taken
- Fixed: Approve, and the customer's Cancel booking button, report a failed save instead of saying it worked
- Added: personal data export and erase for bookings (Tools > Export / Erase Personal Data), including guest bookings found by their order's email, and suggested privacy policy text. Bookings still to come are kept and listed
- Fixed: "Delete all bookings and settings" on uninstall also removes the plugin's working options, transients, scheduled jobs and order flags
- Fixed: calendar invites carry a SEQUENCE number, and cancellation emails attach a cancelled event, so calendar apps update or remove the booking
- Fixed: Add booking searches all customers instead of listing the first 500; product and staff lists show all of them. The admin calendar and the calendar feed return every booking instead of stopping at 2,000, and the admin calendar loads customer names in one query
- Fixed: approval requests not answered before their start time are declined automatically, freeing the time, and the customer is told
- Fixed: a booking request checkout no longer also sends WooCommerce's "order on hold" email
- Fixed: guest customers are no longer sent "View or manage your booking" links to My Account, which they can't use; their emails say how to make changes
- Added: staff are emailed when a booking is moved to them or away from them (Edit, or a reschedule to another staff member)
Version 1.0.1
- Fixed: a payment that arrives after an unpaid booking's pay deadline, before the hourly release has run, now takes the time back through the locked availability check. If another customer has taken the time since, the booking is not marked paid, and the shop is told by order note and email to rebook or refund
- Fixed: if a paid order's booking can't be updated (the database is busy or returns an error), it is no longer treated as done or as "time taken". The order is flagged and noted, the shop is emailed once, it is retried every hour, and a "Re-check bookings" order action and an admin notice let staff fix it straight away
- Fixed: an email queued by one request while another request is sending a booking's emails is no longer lost or overwritten
- Fixed: a cart hold that runs out while the cart is being checked is never revived after another customer has taken the time
- Fixed: if saving the link to a new balance order fails, the hourly recovery links that order instead of creating a second invoice, and it now works through every booking even behind ones that keep failing
- Fixed: removing a booking's line from an order cancels the booking and frees its time
- Fixed: when a retried checkout re-creates the lines of a pending order, the booking follows the new line, so a later release and late payment still restore it
- Removed: the WPBakery elements, which had not been tested with WPBakery. The shortcodes can still be added in any page builder's shortcode or text element
- Changed: the minimum versions are now WordPress 6.5, WooCommerce 9.0 and PHP 8.0, the oldest versions the full test suite has been run on
Version 1.0.0
Initial release.
Need Help?
If you have questions or need assistance, check out our Troubleshooting Guide or FAQ, or contact us through the item's support tab.