WooCommerce rental bookings plugin for Solo stores and multi-vendor Marketplaces. Works standalone with WooCommerce (Solo Mode) or with Dokan for a full rental marketplace (Marketplace Mode). Availability calendars, flexible pricing rules, deposits, and security deposits.
For full documentation, visit
https://wahra.tn/plugins/?wahra-docs.
2.3.0
Form Builder, Coupons & Discounts, WYSIWYG form builder UI, and booking detail enhancements.
New Features:
- Form Builder � 13 field types (text, email, number, phone, date, textarea, select, checkbox, radio, heading, html, hidden, consent)
- Form Builder scope cascade: global > category > vendor (Marketplace only) > product
- Custom form fields displayed in product calendar booking form
- Form submission data stored in booking meta and shown in booking detail (vendor + admin)
- Coupons & Discounts � percentage and fixed-amount discount codes
- Coupon validation: date range, usage limits, per-user limits, min order, category/product restrictions
- Coupon input field in product calendar with real-time validation and discount preview
- Coupon usage tracking per booking with customer email association
- Visual WYSIWYG drag-and-drop form builder with SortableJS � 3-panel layout (palette, canvas, properties)
- Form builder available in admin Settings > Forms tab and as a new vendor Dokan dashboard page
- Live form preview, field reordering via drag-and-drop, context-sensitive property editor
- New admin settings tabs: Form Builder and Coupons with full configuration UI
- Booking detail � new Form Data tab showing submitted custom fields
- Booking detail � coupon info section in Payment tab
- REST API endpoints for form templates (admin/vendor/public CRUD)
-
REST API endpoints for coupons (admin/vendor CRUD, public validate/generate)
Improvements:
-
Solo vs Marketplace distinction enforced throughout Form Builder and Coupons (scope resolution, vendor endpoints, admin UI)
- Booking creation endpoint now processes form_data and coupon_code parameters
- 3 new database tables: form_templates, coupons, coupon_usage (DB version 1.2.0)
- Uninstall cleanup updated for all 15 tables and new settings options
-
Admin booking detail also shows form data and coupon info
Technical:
-
New classes: WAHRB_Form_Builder (singleton), WAHRB_Coupon_Manager (singleton)
- New REST controllers: WAHRB_Form_Builder_Controller, WAHRB_Coupon_Controller
-
New test suites: FormBuilderTests, CouponTests (field types, scopes, validation, file structure)
Bug Fixes:
-
Fixed class property $version not bumped to 2.3.0 (stale at 2.2.0)
- Fixed RESET ALL DATA handler only dropping 9 tables instead of all 15
- Fixed RESET handler missing wahrb_settings_form_builder and wahrb_settings_coupons from options cleanup
- Added consistency test suite to prevent version/table-count drift
2.2.0
Solo mode overhaul, booking lifecycle management, and admin UX improvements.
New Features:
- Full booking lifecycle management in solo mode (confirm, start, return, complete, cancel) – replaced basic bookings table with interactive vendor dashboard
- Early check-in blocking – prevents check-in before scheduled start date
- Vendor price adjustment at restitution – vendors can adjust total price when completing a booking
- Auto-confirm bookings setting in admin Settings > Bookings tab
- Notification email setting in admin Settings > Notifications tab
-
Visual customization page – dedicated submenu for brand colors and client-facing texts
Improvements:
-
Renamed solo mode main menu from "Rentals & Bookings" to "Rentals"
- Replaced "Fine-Tune" submenu with streamlined "Visual" submenu (colors + texts only)
- Moved notification email and auto-confirm settings from Fine-Tune into admin Settings tabs
- Solo mode settings sync – auto-confirm and notification email now sync between platform options and vendor user meta
- Hide "Add to cart" setting for rental products
- Admin menu consolidation in solo mode – single unified menu
- Fixed translation encoding issues across all 13 locale files (.po/.mo)
- Replaced hardcoded French strings in vendor JS with localized i18n strings
- All vendor-facing JS strings now use wahrbVendorConfig.i18n for proper translation support
-
URL helper centralization – all dashboard URLs use wahrb_get_dashboard_url()
Technical:
-
New template: templates/dokan/visual-settings.php – standalone visual settings for solo mode
- Bookings page in solo mode now loads vendor CSS/JS assets for full lifecycle UI
- 147 tests passing
2.1.0
- New: Initial Setup Wizard – guided first-run configuration for admins
- New: Automatic admin notice on first activation with link to setup wizard
- New: 4-step wizard: Welcome, Categories, Settings, Ready
- Improved: Setup Wizard visual redesign with full-screen admin experience and responsive layout
- New: Relaunch Setup Wizard action available from Settings -> Tools
- New: Dedicated Tools settings tab with system information summary
- Improved: Existing installs auto-skip wizard on upgrade
2.0.6
WordPress.org ranking optimisation and admin UX improvements.
New Features:
- Contextual support widget on plugin admin pages (links to docs and forums)
- Ethical review prompt after 5 completed bookings or 30 days of usage
- Environment compatibility checker (PHP, WordPress, WooCommerce version warnings)
-
SVN freshness reminder for developers (90-day update prompt)
Improvements:
-
Expanded readme.txt with comprehensive feature descriptions and 25+ FAQs
- Updated "Requires at least" to WordPress 6.6
- Added screenshot placeholders for WordPress.org listing
- All new admin classes are self-registering standalone files (zero changes to existing code)
2.0.5
Added solo vendor mode - the plugin now works with WooCommerce alone, without requiring Dokan.
New Features:
- Solo vendor mode: full WP admin integration (Rentals menu with Bookings, Wizard, Calendar, Analytics, Settings)
- WooCommerce product data tab for rental configuration (solo mode)
- WP Dashboard widget showing booking stats and revenue (solo mode)
- Auto-detection of Dokan presence at runtime - single plugin ZIP works in both modes
-
Mode-aware navigation: Dokan frontend dashboard URLs or WP admin URLs based on active mode
Bug Fixes:
-
Fixed duplicate rental product fields appearing in solo mode (Loader and Solo Integration both registered fields)
- Removed dead
wahrb_should_load_assets filter hook from Solo Integration
- Removed redundant asset enqueue in Solo Integration (already handled by Loader)
-
Fixed outdated inline comment referencing wrong function name in Solo Integration
Improvements:
-
Dokan is no longer required for activation - WooCommerce is the only hard dependency
- REST API vendor permission checks now support both Dokan sellers and WooCommerce shop managers
- Stripe detection in admin settings now checks both Dokan Stripe Connect and standard WC Stripe gateway
- All templates gracefully degrade when Dokan is absent (no fatal errors)
- Product editing hooks in Loader now conditional on Dokan mode (Solo Integration provides dedicated Rental tab)
- Added
Requires Plugins: woocommerce header for WordPress 6.5+ dependency management
2.0.4
UI/UX improvements for calendar, dashboard widget, admin analytics, and updated screenshots.
Bug Fixes:
- Fixed calendar event text invisible (white on light blue) due to FullCalendar 6 CSS specificity override
- Fixed dashboard widget CSS silently discarded due to dokan-style handle (already printed before template)
- Fixed dashboard widget missing closing div tag breaking DOM structure
-
Fixed admin analytics KPI values truncated at bottom (Arabic currency symbol clipped by overflow:hidden)
Improvements:
-
Redesigned vendor dashboard booking widget with 2x2 stat grid, color-coded numbers, revenue highlight row, icon buttons, and active bookings badge
- Calendar event status colors now properly override FullCalendar 6 defaults with increased CSS specificity
- Updated plugin screenshots to reflect current UI
2.0.3
Bug fixes for booking API, email notifications, payment processing, and test coverage.
Bug Fixes:
- Fixed cancellation email not sent to vendor when recipient set to both
- Fixed cancel action bypassing status update hooks, preventing notifications
- Fixed API refund endpoint returning incorrect response format
- Fixed booking list API allowing invalid orderby parameter
- Fixed invalid refunded status in API booking filters
- Fixed security deposit unconditionally captured regardless of settings
-
Fixed vendor booking API returning zero amounts for deposit and balance
Developer:
-
Added regression test suite covering all fixed issues (147 total tests)
2.0.2
Minor internal improvements and build configuration updates.
2.0.1
Bug fixes, calendar improvements, and vendor permissions update.
Improvements:
- Calendar: Added status filter dropdown (filter bookings by Pending, Confirmed, Active, Returned, Completed, Cancelled)
- Calendar: Added "Returned" (checked_out) status with distinct amber color in events, legend, and popup
- Calendar: Fixed event CSS class prefix mismatch (fc-event-* now matches stylesheet)
- Vendor Settings: Payment section now shows read-only summary cards (Deposit, Security, Balance) when vendor cannot edit
- Vendor Permissions: Default changed to allow vendors to manage deposit and security deposit settings
- Admin Settings: Per-tab save fix prevents cross-tab data corruption when saving settings
- Admin Settings: Stripe Connect message changed from error to informational notice
- Vendor Settings: Fixed "Client Display Texts" layout (inputs no longer constrained to 200px)
-
Platform Categories: Added auto-repair for corrupted all-disabled categories in database
Translations:
-
Added 10+ missing French translations for vendor settings and calendar strings
Bug Fixes:
-
Fixed vendor payment section showing only "managed by platform" message due to false permission defaults
- Fixed Flatpickr blocked dates integration in vendor manual booking modal
2.0.0
Major release with complete UI/UX overhaul, full booking lifecycle, and comprehensive currency/i18n fixes.
New Features:
- Full booking lifecycle: pending > confirmed > checked_in > checked_out > completed with automated cron transitions
- Vendor restitution validation workflow (condition review, damage amount, payment status updates)
- Manual vendor actions: check-in, check-out, complete, cancel with REST API endpoints
- Payment tracking with auto-timestamps (deposit_paid_at, balance_paid_at, security_captured_at, security_released_at)
- Vendor analytics dashboard redesigned with 3-tab layout (Overview, Charts, Products and Categories)
- KPI summary cards (Total Bookings, Revenue, Conversion Rate, Upcoming) always visible above tabs
- Status breakdown donut chart and category breakdown donut chart in Overview tab
- Monthly bookings and revenue bar charts in Charts tab
- Top rented products and category stats tables in Products and Categories tab
- Admin analytics dashboard with active vendor count and platform-wide statistics
- Per-category payment settings (deposit, security, balance configured per platform category)
- Per-category vendor permissions (overrides resolved per category instead of globally)
- Visual Customization color picker redesigned with native color swatches (72x72px circular inputs in CSS grid)
-
Stats cache invalidation on booking creation and status change
Security Fixes:
-
Fix: CRITICAL - Stored XSS vulnerability in booking detail modals via unescaped user data
- Fix: HIGH - Security deposit release/refund marked as successful even when WooCommerce refund failed
- Fix: HIGH - Hold race condition allowed two users to hold the same dates when updating existing hold
- Fix: HIGH - Wizard publish called apply_wizard_data_to_product() twice, potentially overriding Dokan hook changes
-
Fix: HIGH - Timezone mismatch in availability check (strtotime vs gmdate comparison)
Critical Fixes:
-
Fix: CRITICAL - Soft-deleted blackout dates were still blocking availability in daily sync
- Fix: CRITICAL - Cron draft cleanup never ran due to method name mismatch
- Fix: CRITICAL - Booking reminder emails silently failed due to missing method in emailer
- Fix: CRITICAL - Statistics revenue calculation used non-existent column - corrected to pricing_snapshot JSON
- Fix: CRITICAL - Booking payment schedule now resolves deposit/security from product's platform category
- Fix: CRITICAL - Wizard REST endpoint returns per-category payment map instead of flat payment keys
- Fix: CRITICAL - Dokan vendor settings returns payment_by_category and permissions_by_category structures
- Fix: Currency symbol encoding - get_woocommerce_currency_symbol() HTML entities now decoded for all JS/JSON contexts (13 files fixed)
- Fix: wp_add_inline_style handle changed from dokan-style to wahrb-vendor-styles (CSS was silently discarded)
- Fix: Settings page tabs not working - all content collapsed onto Payment tab due to CSS handle bug
- Fix: Analytics page styles missing - same dokan-style handle root cause
-
Fix: Bookings list PHP parse error - missing closing tag before HTML comment
UI/UX Improvements:
-
Email config radio cards improved with stronger borders, shadows, and visual feedback
- Day abbreviations standardized: M to Mo, W to We, F to Fr across wizard steps 3 and 4
- Wizard step interactions fixed (offer type selection, pricing toggles, payment toggles, publish)
- Replaced all broken wp_add_inline_script calls with properly enqueued JS files
- Product page booking card enhanced with shadow, borders, z-index
- Wizard Create new product error handling with snackbar notifications
- Eye button (booking detail) on vendor bookings list fixed
-
Phone validation relaxed to 8-digit minimum for valid Tunisian numbers
Internationalization:
-
Removed all hardcoded DT currency fallbacks from React components - currency always from WooCommerce config
- Completed React wizard internationalization - all French strings replaced with t() calls
- Added French translations for analytics page (status breakdown, category breakdown, tab labels, KPI labels)
- Calendar day abbreviations properly localized (Mo to Lu, We to Me, Fr to Ve for French)
- All hardcoded French strings in wahrb-calendar.js replaced with i18n references
-
Source strings in English per WordPress.org requirements
Architecture:
-
WAHRB_Platform_Categories helper methods: get_payment_settings(), get_product_payment_settings(), get_all_payment_settings(), get_vendor_permissions()
- Activator default payment settings restructured to per-category format for all 6 categories
- Platform Categories tab is now the default admin settings tab
- General tab renamed to Advanced and moved after Notifications
- Chart.js charts call resize() on tab switch to fix canvas rendering
-
Booking number generation with collision detection retry loop
Developer:
-
Expanded test suite from 6 to 105 tests (phone validation, email formatting, stats, i18n, per-category architecture)
- Added WordPress.DB.PreparedSQL.InterpolatedNotPrepared to 40 phpcs annotations
- Added PluginCheck.Security.DirectDB.UnescapedDBParameter to all 117 phpcs annotations
- Deactivator and uninstall.php cleared phantom cron hooks - corrected to actual hooks
- Added root index.php for directory listing protection
- All wizard JS uses vanilla JS (no jQuery dependency)
- PHP data passed to JS via wp_localize_script for WordPress.org compliance
1.0.2
- Fix: Renamed plugin prefix from DRB to WAHRB (4+ characters) for WordPress.org compliance
- Fix: Renamed main plugin file to wahra-rentals-bookings.php
- Fix: Removed load_plugin_textdomain (WordPress.org handles translations automatically)
- Fix: Moved all inline scripts to wp_add_inline_script()
- Fix: Improved input sanitization (wp_unslash, map_deep, sanitize_text_field on session data)
- Fix: Improved output escaping (wp_kses, wp_strip_all_tags on inline CSS)
- Fix: Added $wpdb->prepare() to all LIKE queries
- Fix: Added phpcs:ignore annotations to direct database queries
- Fix: Fixed mixed line endings in template files
- Fix: Removed unnecessary development files from distribution
- Fix: Added source code documentation in readme.txt
- Fix: Updated third-party libraries to latest versions
- Fix: Translated remaining hardcoded French strings
1.0.1
- Fix: Enhanced security with improved nonce verification and output escaping
- Fix: Standardized date handling for better timezone support
- Fix: Optimized SQL queries and database interactions
- Fix: Minor bug fixes and performance improvements
1.0.0
- Initial release
- Mobile-first vendor wizard
- Advanced pricing engine with rules
- Availability management system
- Security deposit handling
- Multi-step payment support
- Email notification system
- Dokan dashboard integration