Changelog - Simple Bike Rental Pro
All major changes listed in reverse chronological order.
[1.5.2] – 2026-05-06
Added
- Added support for the
layout="centered"attribute in the[simpbire_bike_rental]shortcode to provide an alternative centered frontend booking form layout.
Improvements
- Improved the default Split Layout design by making the left column more compact and visually balanced.
- Improved responsiveness and spacing of the centered booking form layout across mobile and tablet devices.
[1.5.1] – 2026-04-16
Added
- Added support for creating bicycles via REST API.
- Added support for deleting bicycles via REST API (aligned with existing plugin rules).
[1.5.0] – 2026-04-16
Added
- Introduced REST API endpoints to support the official Android mobile app.
- Added support for managing bookings directly from the mobile app (create, update, delete, and view).
- Added support for payment-related fields in bookings:
- total amount
- paid amount
- due amount
- payment status
- payment mode
Improvements
- Improved payment handling by centralizing calculation logic across all booking flows.
- Improved support for partial payments (percentage and fixed) in all booking contexts.
- Improved admin booking experience with automatic prefill of paid amount based on settings.
- Improved booking data consistency between frontend, admin panel, and mobile app.
Fixed
- Fixed issues with payment data not being correctly stored when creating bookings manually from admin.
- Fixed cases where booking total was not calculated correctly in manual entries.
[1.4.2] – 2026-03-31
Added
- Added optional "Terms and Conditions" checkbox to the booking form.
- Added admin setting to enable/disable the terms checkbox.
- Added customizable checkbox label and terms page URL.
- Added backend validation to require acceptance when enabled.
- Added storage of terms acceptance in reservations.
- Added support for {terms_accepted} placeholder in email notifications.
- Added visibility of terms acceptance in admin booking details.
Improvements
- Improved booking flow reliability with server-side validation for terms acceptance.
- Improved flexibility by allowing full control of terms content via a dedicated page.
[1.4.1] – 2026-03-26
Added
- Added new shortcode [simpbire_bike_rental_split] with a 2-column layout for improved booking UX.
- Left column: rental type, date selection, and customer details form.
- Right column: dynamic bike grid with real-time availability and pricing.
- Added initial bike catalog view before date selection (browse mode).
- Added support for bike detail links (details_url) in catalog view.
- Added intelligent card behavior: opens bike details before date selection, and switches to selection mode after availability filtering.
- Added automatic reset when changing rental type or dates.
- Added safe handling and validation for bike detail URLs.
Improvements
- Improved booking experience for businesses with large bike inventories.
- Reused existing rendering logic for consistency across layouts.
- Improved frontend structure with scoped CSS classes for better maintainability and responsiveness.
- Improved internal code structure for better maintainability and stability
- Updated and expanded translations
[1.4.0] – 2026-03-24
Added
- Added partial payment support (percentage or fixed amount) for online bookings.
- Added payment status tracking (unpaid, deposit_paid, paid) for each reservation.
- Added new payment fields: total amount, paid amount, and remaining balance.
- Added optional minimum rental duration for hourly bookings (configurable in admin settings).
- Added detailed booking modal in admin table view for better reservation insights.
- When a reservation is pending, a button will now appear in the table view that will allow you to manually change the status from “Pending” to “Approved.”
Improvements
- Improved payment page UI to clearly display:
- total rental amount,
- amount to pay now,
- remaining balance.
- Improved email notifications to include payment breakdown (total, paid, due).
- Improved admin reservations table layout by merging start/end dates into a single “Date” column.
- Improved actions column layout to prevent button wrapping and enhance usability.
- Improved overall booking management clarity with better separation between booking status and payment status.
[1.3.9] – 2026-03-05
Added
- Added an optional “Additional notes” field to the booking form so customers can include pickup details or special requests.
Fixed
- Fixed a booking confirmation issue caused by an unnecessary nonce in the email confirmation link, which could prevent confirmation from some mobile email apps.
Improvements
- Improved booking email notifications to optionally include customer notes.
- General internal code cleanup and comment improvements.
- Update CSV export to include customer notes
[1.3.8] – 2026-02-03
Added
- Added an option to choose the currency symbol position (before or after the amount).
Improved
- Improved price display flexibility to better support international currency formats (e.g. 100 zł).
- Performed general code cleanup and documentation consistency improvements.
- Updated translations and language files.
Breaking Changes
- None.
[1.3.7] – 2026-01-05
Added
- Added a configurable booking confirmation time (in minutes) in the admin settings for non-payment bookings.
Improvements
- Improved token handling to respect the configured confirmation window.
- Improved hourly booking date/time selection by automatically suggesting an end time (+1 hour) and opening the end picker on the selected start date.
- Improved admin asset loading by whitelisting plugin pages only.
- Prevented unnecessary Flatpickr loading on the bookings calendar page.
[1.3.6] – 2025-12-22
Fixed
- Fixed background color rendering for labels of completed (past) reservations in the admin calendar view
Added
- Added backdrop click handling so the admin calendar booking modal closes when clicking outside the modal content.
Maintenance
- Updated FullCalendar to 6.1.19
- Improved asset versioning for scripts and styles by using plugin version-based cache busting (replacing timestamp-based versioning)
[1.3.5] – 2025-12-15
New
- Added
[simpbire_bike_grid]shortcode to display bicycles in a responsive grid with configurable columns and optional type filtering - Added
[simpbire_bike]shortcode to display a single bicycle with booking form and optional availability calendars - Introduced an alternative booking flow: grid → single bike page → availability & booking
- Added support for
details_urlto link each bicycle to its dedicated page
Improvements
- Improved cache handling with version-based invalidation for bicycle data
Fixed
- Fixed an issue in the admin FullCalendar view where past multiday reservations were not displaying correct labels and colors
Maintenance
- Internal code cleanup to improve maintainability and compliance with WordPress coding standards
[1.3.4] - 2025-12-09
Security
- Added capability and nonce verification to the admin calendar bookings AJAX endpoint, ensuring requests include a valid nonce and proper permissions.
[1.3.3] – 2025-12-02
Improved
- Multi-day discount management for individual bicycles
- The "Discount applies from day" field in the individual bicycle settings can now be left blank and will be saved as NULL, inheriting the global threshold.
- Updated the schema and migrated the database to consistently support the NULL value.
- Improved the booking form on the frontend
- In multi-day search results, the bicycle listings now show the original price crossed out before the discounted price.
- The frontend price summary for multi-day rentals has been updated to display accessory totals based on the number of rental days.
- Updated the booking confirmation email (used when online payments are disabled) to feature a stylish confirmation button, while still retaining the original link as a fallback.
- Alignment of conflicting logic between backend and frontend
- Backend reservation creation now applies the minimum buffer only to hourly reservations, not daily ones.
- Daily and multi-day reservations created by the administration follow the same logic as the frontend, ensuring complete consistency.
- Fixed a bug that incorrectly applied the minimum interval to manually entered full-day reservations.
Fixed
- Fixed bugs related to overlap checks that affected daily reservations created by the backend.
- Fixed the normalization of discount_min_days when left blank, preventing unwanted default values.
Hardening and Code Quality
- Enhanced input sanitization for $_GET and $_POST.
- Improved the use of nonces in critical functions (admin, AJAX, REST).
- Replaced wp_redirect() with wp_safe_redirect() where appropriate.
- Added escaping checks (e.g., esc_html()) where they were missing.
- Reviewed and documented all $wpdb->prepare() queries, clarifying when interpolation of table names based on $wpdb->prefix is safe.
- Annotated and addressed PHPCS/Plugin Check false positives, improving code readability and maintainability.
[1.3.2] – 2025-11-23
Added
-
New Multi-Day rental mode: Introduced full support for multi-day bookings, alongside the already existing hourly and daily rentals.
-
Flexible rate rules for each bicycle: Each bike can now have its own Multi-Day rules:
- enable/disable multi-day
- discount percentage
- minimum number of days required
- rounding mode (standard / up / down)
- decimal precision
- New global option: "Apply the discount to accessories as well": It is possible to decide whether the Multi-Day percentage discount should apply only to the bicycle or also to accessories.
- Enabled: bike + accessories are discounted
- Disabled: only the bike receives the discount
- New "Bicycle Rules" table Created the
simpbire_bicycle_rulestable with automatic population of default values during the update. - Visible and clearer prices in search results: The bicycle tabs in the frontend results now show the rental price more completely and transparently, including:
- the total multi-day price when selecting a range of several days
- a savings message indicating how much the user is saving thanks to the Multi-Day discount, for example: "You save € 63.00 (30%) with the multi-day discount"
- the savings message appears only when a discount is actually applied
- the actual updated total follows, e.g.: "Total: € 147.00" - In this way, the user can immediately understand the economic advantage of booking over several days.
- Improved payment templates: The Stripe pre-payment summary pages and the post-payment success page have been redesigned for greater clarity, eliminating the old blocks based on
<p>, replaced with a more coherent information list, improving readability. - CSV Export: Multi-day bookings are now correctly included in filters and exported data.
[1.3.1] – 2025-11-18
Added
- Added support for Stripe BLIK and Stripe Przelewy24 (P24) as additional payment methods. These can now be enabled from the plugin settings and are automatically included in Stripe Checkout when available for the selected currency.
- New settings checkboxes for enabling/disabling BLIK and P24 under the Stripe configuration section.
Improved
- Refactored the Stripe Checkout session creation to dynamically build payment_method_types based on enabled payment methods.
Breaking Changes
- None.
[1.3.0] - 2025-10-22
Added
- Added Danish Krone (DKK) currency to Stripe settings.
- Minor fixes and code improvements.
Breaking Changes
- None.
[1.2.9] - 2025-09-19
Added
- Accessory management in admin: new hidden submenu
modifica_accessori_prenotazioneaccessible via button “Manage accessories” in the booking table and edit form. - Dedicated screen with reservation summary and full list of accessories.
- Admin can now add and remove accessories after a booking is created.
- Availability check excludes the current reservation to prevent false stock conflicts.
- Clear warnings when accessories are disabled in settings or when no stock is available.
- Reminder note shown if the reservation was already paid online (manual Stripe refunds may be required).
Improved
- Internal utility
simpbire_get_disponibilita_accessori_per_prenotazione()introduced to calculate accessory stock, ignoring the current booking. - Consistent use of nonces and capability checks for accessory actions.
- Minor UI adjustments in accessory list display for clarity.
Breaking Changes
- None.
[1.2.8] - 2025-08-29
Added
- Mini Availability Calendar shortcode:
[simpbire_mini_calendar] - Attributes:
bike_id(required),months(default: 1),start(YYYY-MM-01, defaults to current month),legend(1|0). - Past days are auto-muted (grayscale) for a clearer glance.
- Tooltips: shows booked time ranges on partial days and No availability on full days.
- Fully translatable month/day labels via
wp_localize_script(respects WordPress “week starts on” setting). - Public REST endpoint for lightweight availability:
GET /wp-json/simpbire/v1/availability?bike_id=ID&start=YYYY-MM-01&months=N[&with_busy=1]- Returns day states (
free|partial|full) and, withwith_busy=1, compact busy ranges for tooltips. - Smart cache invalidation for the mini-calendar:
- Auto-clears month caches on create/update/delete of reservations, on blackout changes, and when a bike’s quantity/type changes.
Improved
- Admin FullCalendar blackout rendering: inclusive end-of-day (last blackout day is now properly highlighted).
- Frontend assets cache-busting: stylesheet and script versions now use
filemtime()for reliable updates. - Accessibility: past days receive
aria-disabled; tooltip text mirrored toaria-label. - Visual polish: consistent dot size/position for full vs partial markers; matching legend dots.
Fixed
- REST param validation for
bike_id(avoidsis_numeric()multi-arg error). - Several edge cases around time buffers when building availability.
Developer Notes
- Internal helpers:
simpbire_invalidate_availability_cache( $bike_id, DateTimeInterface $from, DateTimeInterface $to )- Efficient slot occupancy calculation with difference-array approach.
- Endpoint args now include
with_busy(optional int0|1). - The mini-cal CSS/JS are enqueued by the shortcode with localized i18n payload (
SBRMiniCalI18n).
Breaking Changes
- None.
[1.2.7] - 2025-08-24
Added
- Secure user area My Licenses with license details and download link.
- Ability to deactivate licenses directly from the plugin settings.
- Safe download system for the latest plugin version (with access control).
- New menu integration (My Licenses / Logout) for subscribers.
Improved
- License validation and activation logic (more reliable and user-friendly).
- Responsive tables for licenses and downloads in the user area.
- General code improvements and cleanup.
[1.2.6] - 2025-08-13
Added
- Blackout dates: ability to block specific dates from being booked.
Improved
- Calendar handling and booking logic made more robust.
- Minor bug fixes in the admin area.
- General code cleanup and stability improvements.
[1.2.5] - 2025-08-13
Added
- Support for rental accessories, with selection in the booking form and management in the admin area.
- Accessories list now included in customer and admin email notifications when booking is made via the frontend.
- Accessories are now displayed in the booking details modal of the admin calendar.
Fixed
- Email Content-Type filter now uses a named callback to ensure proper removal after sending, preventing potential issues with HTML email formatting.
[1.2.4] - 2025-08-07
Added
- Added CSV export feature to download reservations filtered by status, rental type, and date range.
[1.2.3] - 2025-08-01
Changed
- Confirmation emails are now sent in HTML format instead of plain text, providing improved formatting and clickable links.
Added
- Added filters
simpbire_email_subjectandsimpbire_email_messageto allow developers to customize the subject and content of confirmation emails.
Fixed
- Minor formatting adjustments in email content to prevent multi-line link display in some email clients.
[1.2.2] - 2025-07-13
Changed
- Unified AJAX action names and nonces with the free version for better consistency and security.
- Added
simpbire_prefix to all actions, filters, and AJAX calls to prevent conflicts with other plugins. - Removed redundant inline scripts for nonce assignment in admin pages.
- Streamlined reservation saving and editing logic between frontend and backend.
Added
- automatic deletion of stale reservations with status Pending and Waiting for payment after 15 minutes. This prevents unconfirmed or abandoned bookings from blocking availability.
- Normalized DATETIME values in availability queries to prevent MySQL errors in specific configurations.
Fixed
- Fixed bike availability check in Edit Reservation form (admin) where bikes were not loading dynamically.
- Resolved frontend reservation error caused by mismatched nonces.
- Verified compatibility with WordPress Plugin Check and PHPCS standards.
- Ensured all admin-post actions and AJAX calls include proper capability checks and nonce validation.
[1.1] - 2025-06-03
Added
- Unified functions for bike deletion, editing, and addition between free and Pro versions.
- Implemented secure deletion of bikes using
admin-post.phpwith proper permission checks. - New action hook
admin_post_simpbire_elimina_bicicletta_adminto manage deletions safely. - Webhook now logs Stripe events with detailed information and supports notification dispatch after checkout.
Fixed
- Replaced deprecated constant
SIMPLE_BIKE_RENTAL_PRO_PATHwith the correctSIMPBIRE_PLUGIN_PATHin webhook logic. - Stripe webhook endpoint updated to match plugin name (
simpbire_webhook_stripe), resolvingHTTP 400and500errors. - Ensured Stripe webhook returns HTTP 200 on success to prevent retries.
- Confirmed correct reservation status update (
attiva) after successful payment.
[1.0] - 2025-05-28
Initial Stable Release
- Complete admin interface for managing bikes and reservations.
- Frontend booking form with hourly and daily options.
- FullCalendar integration with AJAX loading.
- Stripe integration with checkout session creation and webhook.
- Admin messages for confirmation and error handling.
- Dynamic bike availability based on selected dates.
- Customizable booking gap (cooldown) between reservations.
- Email notifications for both users and admin.
- Localization-ready strings for translations.