=== Resourcemanager ===
Contributors: mystryx
Tags: resource booking, room booking, booking calendar, equipment reservation, appointment scheduling
Donate link: https://www.paypal.com/paypalme/edvhacker/6
Requires at least: 6.5
Tested up to: 7.1
Stable tag: 3.0.14
Requires PHP: 7.4
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.txt

Professional, GDPR-compliant resource booking system for rooms, vehicles, equipment, and staff with intuitive month & week views.

== Description ==

**Resourcemanager** is a powerful, flexible, and 100% privacy-friendly booking and scheduling system for WordPress. Whether you need to manage meeting rooms, hot desks, company vehicle fleets, rental equipment, audio/video gear, or team schedules, Resourcemanager provides a clean, responsive, and interactive calendar interface that your team and clients will love.

Built from the ground up for performance and data privacy, Resourcemanager runs entirely on your local WordPress installation with **zero external tracking, zero third-party dependencies, and lightning-fast REST API communication**.

[Official Website](https://seo-hacker.de) | [Support the Project via PayPal](https://www.paypal.com/paypalme/edvhacker/6)

---

### Why Choose Resourcemanager?

* **100% Privacy & GDPR / DSGVO Compliant**: No tracking pixels, no external CDNs, and zero third-party telemetry. All booking records, user info, and custom field data remain strictly inside your own WordPress database.
* **High-Performance REST API Architecture**: Powered entirely by the native WordPress REST API (`resourcemanager/v1`) and `wp.apiFetch`. Experience instant calendar updates, fast modal dialogues, and zero sluggish page reloads.
* **Intuitive Month & Week Views**: Crystal-clear overview of all resources side-by-side with color-coded status badges (confirmed, pending, canceled).
* **Collision & Double-Booking Prevention**: Built-in interval-conflict detection ensures that unique resources are never accidentally double-booked.
* **Countable & Multi-Capacity Resources**: Define maximum quantities for inventory pools (e.g., 5 projectors, 10 rental laptops, 20 seminar desks) with automated remaining-capacity calculations.
* **Recurring Bookings Engine**: Effortlessly schedule repeating appointments (daily, weekly, monthly, or yearly) with automated conflict validation across the entire series.
* **Dual-Mode Custom Fields (Visual & JSON)**: Tailor your booking forms to your exact needs. Add text inputs, number fields (with min/max/step limits), and required constraints using an intuitive visual editor or direct JSON schema.
* **Role-Based Permission Control**: Easily grant view or management permissions to specific WordPress user roles (Administrators, Editors, Authors, or custom intranet roles).
* **Automated Email Notifications**: Keep everyone informed with automatic email alerts sent to resource owners and bookers upon submission, confirmation, or cancellation.
* **Remote ICS Holiday Synchronization**: Automatically import public or corporate holiday feeds via scheduled background tasks (WP-Cron) without ever exposing visitor IP addresses.
* **Modernized Admin Interface**: Streamline your daily management with instant Quick-Add toolbars, live real-time search filtering, 1-click shortcode copy badges, and spacious rich-text (TinyMCE) modal description editing.
* **Native 12-Language Support**: Fully translated into English, German, Spanish, French, Italian, Brazilian Portuguese, Dutch, Russian, Polish, Japanese, Turkish, Swedish, and Simplified Chinese using WordPress 6.5+ high-speed translation arrays.

---

### Common Use Cases

* **Meeting Rooms & Offices**: Conference rooms, meeting suites, video-conference cabins, desk sharing, and coworking spaces.
* **Vehicle Fleet Management**: Company pool cars, delivery vans, electric vehicles, trailers, and bikes.
* **Equipment & Device Rentals**: Cameras, lighting kits, lab apparatus, measuring tools, musical instruments, and beamers.
* **Schools, Universities & Research**: Computer laboratories, sports gyms, rehearsal halls, and workshop machinery.
* **Team & Facility Scheduling**: Consultation hours, shared workstations, therapy rooms, and shift rotas.

---

### Key Features at a Glance

* **Compact Month View**: Day-cell matrix showing resource availability, booking occupancy, and holiday highlights.
* **Hour-by-Hour Week View**: Detailed weekly timetable with customizable day boundaries (`day_start` and `day_end`).
* **Instant Booking Modal**: Smooth, responsive booking dialog with recurrence options and bespoke custom fields.
* **Visual Custom Fields Builder**: Add custom fields without writing a single line of code.
* **Real-Time Search & Quick-Add**: Quickly find and manage hundreds of items with instant keyboard filtering.
* **1-Click Shortcode Badges**: Copy embedding shortcodes directly to your clipboard with visual confirmation.
* **Modal Rich-Text Editor**: Provide detailed resource guidelines, rules of use, and specifications using the familiar WordPress editor.
* **Theme-Safe Styling**: Strictly scoped CSS styles protect your website against styling conflicts with third-party themes.

== Installation ==

1. Upload the `resourcemanager` directory to your `/wp-content/plugins/` directory, or install it directly via the WordPress Plugins dashboard.
2. Activate the plugin through the **Plugins** menu in WordPress.
3. In your WordPress admin menu, navigate to **Resourcemanager**:
   - Go to **Resources** to add your bookable assets (rooms, vehicles, equipment, etc.).
   - Go to **Calendars** to create a calendar view and assign the desired resources.
4. Copy the shortcode badge from the Calendars overview (e.g. `[resourcemanager cal_id="1"]`).
5. Paste the shortcode into any WordPress page, post, or widget block!

== Shortcodes & Configuration ==

Embed your resource calendar on any page using the simple shortcode:

`[resourcemanager cal_id="1"]`

#### Supported Attributes:

* `cal_id` *(integer, default: 0)*: The ID of the calendar view you want to display.
* `initial_view` *(string, default: "monthly")*: The view displayed on initial load. Accepted values: `"monthly"` or `"weekly"`.
* `day_start` *(string, default: "07:00:00")*: Earliest time shown in the weekly view timetable (`HH:MM:SS`).
* `day_end` *(string, default: "18:00:00")*: Latest time shown in the weekly view timetable (`HH:MM:SS`).
* `line_sectors` *(string, default: "0:10:90:100")*: Percentage distribution markers for visual column rendering.

#### Custom Example:
`[resourcemanager cal_id="2" initial_view="weekly" day_start="08:00:00" day_end="20:00:00"]`

== Frequently Asked Questions ==

= Is Resourcemanager compliant with the EU General Data Protection Regulation (GDPR / DSGVO)? =
Yes, absolutely! Resourcemanager is 100% self-hosted and privacy-respecting. All bookings, user details, and resource parameters are stored exclusively in your own local WordPress database. The plugin does not load external scripts or tracking beacons. External holiday ICS feeds are fetched server-to-server via background WP-Cron jobs so user and visitor IP addresses are never shared with third parties.

= Can multiple users book the same resource simultaneously? =
For unique resources (such as a specific conference room or vehicle), our conflict engine strictly prevents double bookings. For inventory items with multiple identical units (e.g., 10 laptops or 25 seminar seats), simply configure the capacity to the total count. The plugin tracks concurrent bookings and permits reservations until all available units are booked.

= How do custom booking fields work? =
Under the **Resources** management table, click the **Custom Fields** button for any resource. You can visually add text inputs, number fields (with optional min, max, and step validation), or toggle into the JSON schema view. These fields appear automatically in the front-end reservation modal and are saved with the booking.

= Can I restrict who can view or book resources? =
Yes. You can configure viewer roles and administrator roles independently for each calendar and each resource. You can choose to make a calendar public, restrict it to logged-in users, or limit access to specific WordPress roles (e.g., Administrator, Editor, Subscriber).

= Can I import national or regional public holidays? =
Yes. Under **Resourcemanager -> Settings**, enter the URL of any standard iCalendar (.ics) feed. Resourcemanager caches the holiday events in the background and visually highlights them in your calendars.

= What languages are available? =
Resourcemanager includes 100% complete translations for 12 languages:
* English
* German (Deutsch - `de_DE`)
* Spanish (Espanol - `es_ES`)
* French (Francais - `fr_FR`)
* Italian (Italiano - `it_IT`)
* Brazilian Portuguese (Portugues do Brasil - `pt_BR`)
* Dutch (Nederlands - `nl_NL`)
* Russian (Russian - `ru_RU`)
* Polish (Polski - `pl_PL`)
* Japanese (Japanese - `ja`)
* Turkish (Turkce - `tr_TR`)
* Swedish (Svenska - `sv_SE`)
* Simplified Chinese (Chinese Simplified - `zh_CN`)

== Screenshots ==

1. Monthly Calendar View: Compact, interactive month grid showing bookings, occupancy status, and holiday highlights.
2. Weekly Timetable View: Detailed weekly agenda showing exact hours and time slots.
3. Reservation Dialog: Intuitive booking popup with date pickers, recurrence settings, and custom field inputs.
4. Modern Admin Dashboard: Streamlined resource and calendar management with real-time live search and Quick-Add toolbars.

== Changelog ==

= 3.0.14 =
* Feature: Added dedicated one-click noreply symbol button (`.rm-btn-noreply-toggle`) in the Resources administration table to automatically insert `noreply@<domain>` and suppress email notifications for that resource without manual typing.
* Enhancement: Prominent red badge styling (`.rm-mail-pill.rm-mail-suppressed`) for all suppressed noreply email addresses with clear tooltip explanations on hover explaining that notifications are disabled.
* Enhancement: Added explanatory hover tooltip icon to the "owner mail" table column header.
* Fix: Enhanced en-dash (`–`) and em-dash (`—`) text handling during inline cell editing in the admin table.

= 3.0.13 =
* Fix: Ensure iCalendar (.ics) appointments are exclusively attached to notification emails addressed to the applicant (Antragsteller / booking user), preventing calendar attachments from being sent to resource owners or administrators on deletion notices (`owner_deleted`) and internal administrative alerts.
* Feature: Added `resourcemanager_send_ics_attachment` filter hook allowing developers to customize or conditionally toggle calendar attachments on outgoing emails.

= 3.0.12 =
* Fix: Automatically detect configured sender address and sender name from FluentSMTP (`fluentmail-settings`), WP Mail SMTP (`wp_mail_smtp`), and Post SMTP (`postman_options`), ensuring the iCalendar `ORGANIZER` matches the authenticated SMTP sender address (`From:`) to prevent Outlook and Microsoft 365 from displaying "im Auftrag von" ("on behalf of").
* Feature: Added `resourcemanager_ics_organizer` filter hook to allow custom organizer address and name overrides.

= 3.0.11 =
* Feature: Outgoing iCalendar (.ics) appointments now declare `TRANSP:TRANSPARENT`, `X-MICROSOFT-CDO-BUSYSTATUS:FREE`, and `X-MICROSOFT-CDO-INTENDEDSTATUS:FREE` so resource reservations show as "Frei" (Free / non-blocking) in Outlook, Google Calendar, Apple Calendar, and Exchange instead of blocking user availability as "Gebucht" (Busy).
* Feature: Calendar appointment titles (iCalendar `SUMMARY`) now explicitly state the booked resource (e.g. "Gebucht: Konferenzraum Süd" / "Cancelled: Konferenzraum Süd") with full translation support and new `resourcemanager_booking_ics_summary` filter hook.
* i18n: Added and synchronized translations for `Booked: %s` and `Cancelled: %s` across German (de_DE) and all 12 supported languages.

= 3.0.10 =
* Fix: Automatically initialize `ParseHolidays` singleton (`Config::$instances['parse_holidays']`) and fallback in REST API (`resourcemanager/v1/time`) and AJAX handlers so holiday data is always delivered to calendar views.
* Fix: Auto-refresh cached ICS feeds when configured URLs signature changes or when cached content is empty.
* UI Fix: Applied weekend background styling (`--freeTimeFreeDay`) and added holiday title tooltips on calendar date headers across monthly and weekly views when viewing public holidays (e.g. Hessen Feiertage).

= 3.0.9 =
* Fix: Resolved issue where Holiday ICS URLs were not persisting or rendering in backend settings after converting to multi-feed list.
* Fix: Automatically initialize `ICS_Cache_Manager` singleton on plugin bootstrap to ensure configured URLs, cache info, and holiday parsing are always active.
* Fix: Fall back directly to stored `get_option` values when rendering settings input rows, preventing configured URLs from ever disappearing from the form.
* Fix: Hooked both `add_option` and `update_option` for `holiday-ics` so cache updates and feed downloads trigger reliably on initial save.
* Fix: Hardened URL sanitization to preserve valid local file paths and internationalized URLs.

= 3.0.8 =
* Feature: Added customizable morning day start (day_start, default 07:00:00) and evening day end (day_end, default 18:00:00) settings in the WordPress admin backend, synchronizing frontend calendar view timetables and automatic all-day ICS export boundaries.
* UI Fix: Corrected vertical baseline alignment of Dashicons and text inside all backend buttons (inline-flex vertical centering, no text wrapping, perfectly centered remove icons).
* i18n: Updated and synchronized complete German translation catalog (de_DE) and all 12 language catalogs covering holiday feeds, day boundaries, settings, and notifications.

= 3.0.7 =
* Feature: Bookings covering standard day boundaries (default 07:00:00 to 18:00:00, or 00:00:00 to 23:59:59) are automatically exported and sent as RFC 5545 all-day calendar events (VALUE=DATE, X-MICROSOFT-CDO-ALLDAYEVENT:TRUE, exclusive DTEND), allowing clean all-day banner display across Outlook, Apple Calendar, and Google Calendar.
* Fix: Aligned iCalendar ORGANIZER with WordPress / WP Mail SMTP authenticated sender address (wp_mail_from / wp_mail_from_name), restoring Outlook's interactive Accept / Tentative / Decline RSVP buttons while preventing SMTP anti-spoofing rejections.

= 3.0.6 =
* Fix: Preserved WordPress / WP Mail SMTP authenticated `From:` sender address on notification emails, resolving "SMTP Error: data not accepted" caused by SMTP anti-spoofing / SPF / DMARC server rejections.
* Fix: Prevented booking user from being displayed as the email sender; booking user is now assigned to the `Reply-To:` header instead.
* Fix: Removed duplicate `Content-class` MIME header injection in PHPMailer hook.

= 3.0.5 =
* Feature: Support multiple holiday ICS feeds/calendars in backend settings with dynamic row management (add/remove feeds, bulk paste/import, per-feed validation and status badges).
* Feature: Added manual cache refresh action with real-time feedback in WordPress backend.
* Performance: Multi-calendar caching and aggregation engine merges VEVENT entries across all configured feeds into a unified RFC 5545 calendar.
* Fix: Holiday parser now supports RFC 5545 line unfolding, non-inclusive multi-day event expansion across all dates, and cross-feed event deduplication.

= 3.0.4 =
* Fix: Prevented organizer collision in Microsoft Outlook meeting invitations by dynamically assigning the booking user or system as ORGANIZER when sending notifications to resource owners/admins, ensuring the recipient is always an ATTENDEE and Outlook displays interactive Accept / Tentative / Decline RSVP buttons.
* Fix: Injected Microsoft Exchange / Outlook `Content-class: urn:content-classes:calendarmessage` and `X-MS-Has-Attach: yes` headers on all calendar notification emails.
* Fix: Explicitly aligned email `From:` header with the .ics `ORGANIZER` property to prevent sender mismatch flags in Outlook and Exchange.
* Fix: Added `CUTYPE=INDIVIDUAL` to all `ATTENDEE` lines in generated iCalendar data per RFC 5545 specifications.
* Fix: Normalized attachment paths, set attachment disposition to `inline`, and enforced `invite.ics` filename with explicit `text/calendar; charset=UTF-8; method=REQUEST` MIME typing in PHPMailer.

= 3.0.3 =
* Feature: Explicit resource owner email addresses now exclusively receive owner notifications (role members excluded when specific email is set).
* Feature: Added notification suppression for resource owners by entering "noreply" (or "none", "disabled") in the owner email field.
* UI: Added visual status badge and helper tooltips for suppressed owner notifications in resource admin table.

= 3.0.2 =
* Fix: Configured `PARTSTAT=NEEDS-ACTION` and `RSVP=TRUE` on iCalendar `METHOD:REQUEST` booking notifications per RFC 5545 / RFC 5546, enabling interactive "Accept / Tentative / Decline" action buttons in Microsoft Outlook.
* Fix: Ensured all notification email recipients are dynamically registered in the `.ics` `ATTENDEE` property list to guarantee Outlook mailbox address matching.
* Fix: Declared explicit `method=REQUEST` (and `method=CANCEL`) MIME type parameters on outgoing calendar attachments in PHPMailer.
* Feature: Added previous (`‹`), next (`›`), and today (`Heute`) navigation buttons to frontend calendar (month/week) and statistics views with full internationalization across all 12 languages.
* Tweak: Hardened date navigation controls and resolved attribute quoting in shortcode views.

= 3.0.1 =
* Feature: Added migration backup status panel to Backend Settings (`Resourcemanager -> Settings`) with one-click buttons to verify and permanently delete the RRULE migration backup table (`_bookings_bak_rrule`) or restore bookings from the backup copy.
* Database: Full MySQL 8.0+ Strict Mode (`NO_ZERO_DATE`, `STRICT_TRANS_TABLES`) compliance by replacing legacy `0000-00-00 00:00:00` datetime defaults with `1970-01-01 00:00:00`.
* Fix: Resolved booking history lookup in `DB::read_booking_from_db3()` so soft-deleted bookings immediately return empty when `$include_deleted = false` instead of falling back to historical `INSERT` rows.

= 3.0.0 =
* Feature: Added RFC 5545 iCalendar (.ics) attachments and native multipart/alternative calendar parts to booking notification emails (compatible with Outlook, Gmail, Apple Calendar).
* Feature: Native interactive calendar invitations with METHOD:REQUEST (confirmed bookings) and METHOD:CANCEL (cancellations/rejections).
* Feature: Upgraded recurring booking pattern storage to native RFC 5545 RRULE format.
* Database: Safe, automatic, and idempotent database migration routine with automatic backup table creation (_bookings_bak_rrule) and round-trip validation.
* Fix: Hardened recurring bookings SQL queries, series splitting duration preservation, same-second primary key collision protection, and cross-month recurring booking dialog lookups.

= 2.2.5 =
* Fix: Resolved date interval calculation when navigating across calendar years, preventing disappearance of future reservations (e.g. 2027 bookings).
* Fix: Ensured notification emails for "Ressource angefragt" are reliably delivered to resource owners and added user profile email preference toggle.
* Performance: Added cache-invalidation headers and timestamp parameters to REST API requests to guarantee real-time booking synchronization.
* Assets: Updated official WordPress.org plugin directory assets and screenshots.

= 2.2.4 =
* Fix: Removed UTF-8 Byte Order Mark (BOM) from translation (.l10n.php and .po) files preventing PHP "headers already sent" warnings.

= 2.2.3 =
* Feature: Configurable user selection mode in booking dialog: All users, users of own roles (default), or own user only.
* Security: Safe uninstall routine in uninstall.php - prevents unintended deletion of booking tables, resources, and calendars unless explicitly confirmed in settings.
* Feature: Interactive deactivation dialog in wp-admin/plugins.php prompting users whether to preserve or delete database data upon uninstallation.
* Fix: Fixed Select2 dropdown 0px width collapse inside modal booking dialogs.
* Fix: Guaranteed default pre-selection of current user in booking dialog.
* Fix: Prevented duplicate event listener attachments and Select2 re-initialization corruption on calendar view switches.

= 2.2.2 =
* Fix: Prevented deletion confirmation dialog from opening automatically on admin calendar and resource screens.
* Fix: Added ID validation across client, REST endpoints, and database queries to safeguard against accidental deletions.
* Fix: Registered missing script dependencies and corrected CSS z-index/offsets for reliable toast notifications.
* Security: Enforced strict field whitelisting on resource attribute updates and improved HTML/email sanitization.

= 2.2.1 =
* Verified full compatibility up to WordPress 7.1.
* Comprehensive marketing overhaul, refined feature documentation, and updated shortcode reference.
* Updated asset versions and translation catalogs for version 2.2.1.

= 2.2.0 =
* Complete redesign and modernization of backend admin UI (Resources, Calendars, About dashboard).
* Introduced Quick-Add action toolbars with live real-time filtering for resources and calendars.
* Upgraded extended description editor to a spacious, non-intrusive WordPress modal popup with full TinyMCE support.
* Enhanced custom fields management with dual-mode visual and JSON editors.
* Added 1-click shortcode copy badges with instant clipboard feedback.
* Comprehensive legal, privacy, and GDPR/DSGVO compliance documentation in modernized About dashboard.
* Synchronized 100% translation coverage across all 12 supported languages.
* Updated official author website to seo-hacker.de and contact email to alex@seo-hacker.de.

= 2.0.0 =
* Major architecture update: completely transitioned from legacy admin-ajax.php to WordPress REST API (`resourcemanager/v1`).
* Frontend and backend client scripts modernized to use native WordPress `wp.apiFetch`.
* Eliminated N+1 database queries on calendar views via single prepared resource batch-fetching.
* Optimized user query memory usage and enforced privacy restrictions on user listings.
* Fully retired legacy AJAX endpoints in favor of robust, secure REST routes.
* Updated asset versions and translation catalogs for version 2.0.0.

= 1.3 =
* Modernized localization to native WordPress 6.5+ PHP arrays (.l10n.php) supporting 12 languages.
* Registered custom post type `resman_view` and added standard `uninstall.php` cleanup routine.
* Security enhancements: nonces, permission checks, strict SQL preparation, and Settings API sanitization callbacks.
* Critical bugfixes: date calculations, countable resource collision overlap checks, admin resource creation.
* REST API support (`resourcemanager/v1`) alongside AJAX endpoints.
* Asynchronous cached ICS holiday fetching via WP-Cron.
* Strictly scoped CSS styles to prevent theme/plugin styling bleed.
* Codebase-wide PHPDoc/JSDoc documentation and modernization.

= 1.2.1 =
* Performance updates and bugfixes.
* Updated week view layout and hour calculations.
* Introduced shortcode attributes: initial_view, day_start, day_end, line_sectors.

= 1.2 =
* Introduced weekday view.
* Updated database to use auto-increment IDs instead of resource/time as primary key.
* General bugfixes and UI adjustments.

= 1.1 =
* Initial public release.

== Upgrade Notice ==

= 3.0.14 =
Version 3.0.14 adds a convenient one-click noreply button, prominent red badges for suppressed email addresses, and helpful hover tooltips in the Resources table.

= 3.0.13 =
Version 3.0.13 restricts iCalendar (.ics) email attachments strictly to the applicant (Antragsteller) and excludes internal owner/admin notifications. Highly recommended for all users!

= 3.0.12 =
Version 3.0.12 automatically detects FluentSMTP, WP Mail SMTP, and Post SMTP sender accounts so iCalendar invitations match the authenticated email sender, eliminating Outlook's "im Auftrag von" (on behalf of) notice. Highly recommended for all users!

= 3.0.11 =
Version 3.0.11 sets iCalendar appointments to "Frei" (Free) via TRANSP:TRANSPARENT and Microsoft CDO busy status headers, formats appointment titles as "Gebucht: <Ressource>", and synchronizes all language catalogs. Highly recommended for all users!

= 3.0.10 =
Version 3.0.10 fixes holiday ICS feed caching, REST delivery, and visual highlighting in monthly and weekly views. Recommended for all users!

= 3.0.8 =
Version 3.0.8 introduces configurable day boundary settings in the backend, fixes button icon vertical alignment, and includes full German and multi-language translation updates.

= 3.0.7 =
Version 3.0.7 restores Outlook Accept/Decline RSVP buttons by aligning the calendar organizer with the authenticated email sender, and introduces automatic all-day event generation for full-day bookings.

= 3.0.6 =
Version 3.0.6 resolves "SMTP Error: data not accepted" and restores the proper site sender address across all email notifications while safely adding Reply-To for booking user replies. Highly recommended for all users!

= 3.0.5 =
Version 3.0.5 adds full support for configuring multiple holiday ICS feeds with dynamic row management, manual cache refresh, multi-day holiday expansion, and cross-feed deduplication. Recommended for all users!

= 3.0.4 =
Version 3.0.4 guarantees interactive "Accept / Tentative / Decline" action buttons for calendar invites in Microsoft Outlook and Exchange by resolving organizer-recipient collisions, aligning From/ORGANIZER headers, and declaring Content-class: urn:content-classes:calendarmessage. Highly recommended for all users!

= 3.0.3 =
Version 3.0.3 adds exclusive recipient routing and a "noreply" suppression option for resource owner emails. Recommended for all users!

= 3.0.2 =
Version 3.0.2 enables interactive calendar accept/decline buttons in Microsoft Outlook, guarantees recipient matching for .ics invites, and adds convenient previous/next/today navigation buttons to frontend calendar and statistics views. Recommended for all users!

= 3.0.1 =
Version 3.0.1 adds a backup table verification, restore, and cleanup panel to the Settings page, enforces full MySQL 8.0+ Strict Mode compatibility, and fixes soft-deleted booking history lookups. Recommended for all users!

= 3.0.0 =
Version 3.0.0 introduces native iCalendar (.ics) invitations and cancellation cards for Outlook/Gmail, transitions recurring series to RFC 5545 RRULE format, and provides a safe, automated database migration with backup protection. Highly recommended for all users!

= 2.2.5 =
Version 2.2.5 fixes cross-year date handling for 2027+ reservations, notification email delivery to resource owners, and REST caching. Highly recommended for all users!

= 2.2.4 =
Version 2.2.4 fixes a PHP "headers already sent" warning caused by BOM characters in translation files.

= 2.2.3 =
Version 2.2.3 introduces configurable user selection modes, safe uninstallation safeguards, an interactive deactivation dialog on plugins.php, and fixes for the frontend booking dialog and Select2. Recommended for all users!

= 2.2.2 =
Version 2.2.2 resolves an issue with the backend confirmation modal and hardens REST and database operations. Recommended for all users!

= 2.2.1 =
Version 2.2.1 adds verified compatibility up to WordPress 7.1 and refined documentation. Recommended for all users!

= 2.2.0 =
Version 2.2.0 brings a completely redesigned backend admin interface with live search filtering, Quick-Add toolbars, 1-click shortcode copying, rich-text modal editing, and full 12-language translation coverage. Highly recommended for all users!