=== ShopBoost – WooCommerce Toolkit ===
Contributors: wpsupporting
Donate link: https://paypal.me/gdimitrovbg
Tags: woocommerce, minimum order, bulk edit, redirect, woocommerce checkout
Requires at least: 6.1
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.7.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

All-in-one WooCommerce toolkit: minimum orders, auto-add, bulk edit, redirects, BGN↔EUR, size charts, quick orders, checkout fields and more.

== Description ==

**ShopBoost** is a comprehensive WooCommerce toolkit that replaces multiple separate plugins with a single, unified solution. Every feature has its own dedicated settings page and can be enabled or disabled independently — so you only run the code you actually use.

Whether you want to increase average order value, streamline your checkout, manage redirects, or display BGN/EUR prices side by side, ShopBoost has you covered — all from one clean admin interface.

= 🛒 Minimum Order Amount =
Set a minimum cart amount that customers must reach before completing checkout. Displays a customisable warning notice in the cart and/or at checkout. Supports dynamic placeholders (`{minimum_amount}`, `{current_amount}`, `{remaining_amount}`), multiple display locations, and full visual customisation (colours, font, size) with live preview.

= 🔗 Direct Checkout Links (Product Links) =
Generate direct-to-checkout links for any product. One click adds the product to the cart and takes the customer straight to checkout — perfect for promotions, email campaigns, and social media. Full support for variable products with a variation selection popup.

= ➕ Auto Add Product =
Automatically add a free gift, sample, or promotional product to the cart when the customer reaches a set amount. Supports multiple products with individual thresholds, discount options (percentage, fixed amount, or set price), and automatic removal when the cart drops below the threshold.

= 🔄 Redirect Manager =
Manage 301, 302, and 410 redirects directly from the WordPress admin — no `.htaccess` editing required. Create, edit, enable/disable, and delete redirect rules from a clean table interface. Ideal for handling product URL changes, seasonal campaigns, and fixing broken links without losing SEO value.

= 📝 Checkout Field Editor =
Add custom fields to the WooCommerce checkout form (text, number, checkbox, select, textarea). Show or hide default WooCommerce fields. Drag-and-drop reordering. Custom field data is saved to the order and displayed in the admin order view and transactional emails.

= 💱 BGN ↔ EUR Dual Currency =
Display the secondary currency equivalent next to every price in your store — product listings, variable product ranges, cart, mini-cart, order totals, My Account, and emails. Works in both directions: BGN stores show EUR, EUR stores show лв. Uses the official fixed ECB conversion rate (1 EUR = 1.95583 лв.) which is set by EU law and cannot be changed. Configurable display format (brackets or slash) and position.

= 📊 Price Variation Display =
Show all product variation prices in a structured table or visual layout directly on the product page — no more clicking through dropdowns. Choose from five display templates: Table, Cards, Badges, Pills, or Checkbox. Fully customisable colours, sizes, and highlight options.

= 📏 Size Chart =
Add a size guide to any product — displayed as a product tab, via shortcode, or as a popup button. The editor is fully visual: add and remove rows and columns, enter your measurements, and save. Can be assigned per product, per category, or globally.

= 🚚 Conditional Free Shipping =
Automatically hide specific shipping methods when certain products are in the cart. For example: hide "Free Shipping" when a heavy or oversized product is added. Supports ANY (at least one product) and ALL (all products must be present) matching modes.

= 🔤 URL Transliteration =
Automatically converts Cyrillic characters in product, category, and post slugs to Latin on save — essential for SEO on Bulgarian-language stores. Also includes a manual transliteration tool for converting any text.

= 🛍️ Bulk Edit Products =
Edit prices and stock levels across your entire catalogue from a single table view. Apply mass discounts (percentage off, fixed reduction, or set price) to selected products at once. Original prices are backed up automatically — restore them with one click. Full support for variable products and product variations.

= ⚡ Performance First =
Every feature is fully gated behind its toggle. When a feature is disabled, zero hooks are registered — WordPress never even loops through them. Admin assets load only on plugin pages. Frontend CSS loads only on WooCommerce pages.

= 🔒 Security =
Built to WordPress coding standards: nonce verification on every form and AJAX request, capability checks, prepared SQL statements, sanitised inputs, and escaped outputs throughout.

= Theme Compatibility =
Works with any theme that follows WooCommerce standards. Includes dedicated integration layers for **Woodmart** (AJAX cart + dark mode), **Divi**, and **WooCommerce Blocks** (Gutenberg checkout).

= Translations =
Includes translations for: English, Bulgarian (bg_BG), German (de_DE), Spanish (es_ES), Greek (el_GR).

== Installation ==

1. Make sure WooCommerce is installed and activated.
2. Install ShopBoost from the WordPress plugin directory, or upload the ZIP via **Plugins → Add New → Upload Plugin**.
3. Activate the plugin.
4. Go to **ShopBoost** in your WordPress admin menu.
5. Enable the features you need from the **General Functions** page and configure each one from its own settings page.

== Frequently Asked Questions ==

= Do I need to enable all features? =
No. Every feature has its own toggle on the General Functions page. Enable only what you need — disabled features register zero code and have no performance impact.

= Is it compatible with WooCommerce HPOS? =
Yes. ShopBoost fully supports WooCommerce High-Performance Order Storage (HPOS). Custom checkout fields use the Order CRUD API.

= Will it work with my theme? =
Yes. ShopBoost uses standard WooCommerce hooks and works with any properly coded theme. Dedicated integration layers are included for Woodmart, Divi, and Gutenberg Blocks.

= Is the BGN/EUR conversion rate configurable? =
No — and intentionally so. The rate of 1 EUR = 1.95583 лв. is fixed by EU law for Bulgaria's eurozone accession and cannot legally be changed. ShopBoost uses this rate exclusively.

= Can I customise the minimum order notice appearance? =
Yes. The Minimum Order settings page provides full visual control: text colour, background colour, border colour, highlight colours for each placeholder, font family, size, and weight — all with a live preview.

= Does it work with caching plugins? =
Yes. ShopBoost is compatible with all major caching plugins including WP Rocket, W3 Total Cache, LiteSpeed Cache, and WP Super Cache.

= Where can I get support? =
Visit [wpsupporting.com/support](https://wpsupporting.com/support) to open a support ticket. Free registration is required.

== Screenshots ==

1. General Functions – overview of all available features with enable/disable toggles for each module (Minimum Order, Product Links, Auto Add Product, URL Transliteration, Redirect, Checkout Field Editor, Price Variation, Size Chart, Conditional Free Shipping, BGN ↔ EUR and more).
2. Bulk Edit Products – manage prices and stock across all products in a table view. Apply mass discounts (percentage, fixed amount, or set price) with automatic backup and one-click restore of original prices. Supports variable products with SKU and stock columns.
3. Redirect Manager – create and manage 301/302/410 redirects directly from the admin panel without touching .htaccess. Includes SEO benefits overview (preserve link equity, fix broken links, manage product URL changes).
4. BGN ↔ EUR Dual Currency – configure where the secondary currency is displayed (product prices, cart, order totals, mini-cart, emails) and choose the display format (brackets or slash) with live preview. Uses the official fixed ECB rate (1 EUR = 1.95583 лв.).

== Changelog ==

= 1.7.5 =
* **New Feature – Buy X Get Y Free:** Quantity-based reward for products in selected categories. For every N units of the same product in the cart, M free units are added automatically as a separate 0.00 line (e.g. buy 4 → the 5th is free; buy 8 → two free). The ratio (buy N / get M) and the eligible categories are configurable. Free items are recalculated on every cart change, locked from manual editing, and shown with a gift badge.
* **Improvement – Secondary Currency (formerly "BGN → EUR"):** The dual-currency display is no longer limited to Bulgaria. It now works for any store currency and can show **multiple** secondary currencies at once (e.g. EUR + USD), each with its own manual conversion rate. The BGN ↔ EUR pair remains automatically locked to the fixed legal rate (1 EUR = 1.95583 BGN). Existing BGN/EUR stores are unaffected — the previous behaviour is preserved automatically when nothing new is configured.
* **Architecture – Per-feature modules:** The monolithic main class has been split so each feature (Secondary Currency, Conditional Free Shipping, Redirect, Checkout Fields, Price Variation, Size Chart, Auto-Add Product, Buy X Get Y Free) lives in its own class under `includes/features/` and registers its hooks only when enabled. The core file shrank from ~5,000 to ~1,800 lines. No user-facing behaviour changes; every feature toggle and option key is unchanged.
* **Fix – Bulk Edit Products: stale prices after edits:** Prices changed via Bulk Edit could linger on the storefront (object cache / price-lookup table / page cache) until the scheduled-sales cron ran or a hard refresh. Product (and variation) caches are now flushed explicitly after each change, so the displayed price stays in sync with checkout immediately.

= 1.7.4 =
* **Fix – URL Transliteration broke menu links:** Display-time filters (`wp_nav_menu_items`, `the_content`, `the_excerpt`) were transliterating URLs on output without checking whether the underlying slug had actually been changed — producing links to non-existent pages. Removed all three display-time hooks; transliteration now happens exclusively at save time and via the manual/auto scan, which is the correct approach.
* **Fix – URL Transliteration could not transliterate taxonomy terms:** `apply_manual_transliteration()` called `get_term_by('slug', ..., '')` with an empty taxonomy string. WordPress's `taxonomy_exists('')` returns `false`, so the lookup always failed silently — no category, tag, or product-category slug was ever updated. Now iterates all public taxonomies. Also added `urldecode()` on the slug extracted from the URL path so URL-encoded Cyrillic characters match the database value.
* **Fix – "Run Scan Now" button did nothing when Automatic Scanning was off:** The button called `auto_scan_and_transliterate()`, which checks `flexmior_auto_scan_enabled` and returns early when disabled. Added a dedicated `run_scan_now()` method that always executes regardless of the auto-scan toggle.
* **New – URL Health Status dashboard:** The URL Transliteration settings page now shows a live health-status card at the top that loads automatically on page open. Displays the count of untransliterated URLs grouped by type (Post, Page, Product, Category, Menu Link) with original vs. transliterated URLs side by side. Includes a one-click **Transliterate All** button and a **Fix Selected Menu Links** action for custom-link menu items.
* **New – Menu custom-link scanning:** The health check now also scans WordPress navigation menus for custom-link items containing Cyrillic URLs, which the existing post/term scan did not cover. Detected menu links can be fixed individually or via the Transliterate All action.
* **Fix – Minimum Order feature enabled by default on fresh install:** The `flexmior_feature_minimum_order_enabled` option defaulted to `1` in five places, causing it to appear active immediately after plugin installation. Changed all defaults to `0` — all features now start disabled and must be explicitly enabled by the admin.
* **Fix – Quick Order: variable product variation not recorded:** The form did not capture the selected variation. Added a hidden `variation_id` field, JavaScript listener for WooCommerce `found_variation`/`reset_data` events, server-side validation (variation must belong to the parent product), and variation-aware display in admin list, detail view, email notifications, and Convert to Order.
* **Fix – Quick Order: public submit endpoint worked with feature disabled:** The AJAX handler was registered unconditionally but did not check the feature toggle, allowing submissions even when Quick Order was turned off. Added an early `flexmior_feature_quick_order_enabled` check.
* **Fix – Quick Order: empty text options left buttons unlabelled:** Saving an empty Form Title, Submit Button Text, or Collapsed Button Text resulted in blank labels. Added a `get_text_option()` helper that falls back to the default value when the stored option is an empty string.
* **Fix – Quick Order: WooCommerce HPOS incompatible order links:** Hardcoded `post.php?post=X&action=edit` URLs do not work when High-Performance Order Storage is active. Replaced with `$order->get_edit_order_url()` in the orders list, detail modal, and Convert to Order response.

= 1.7.3 =
* **New Feature – Quick Order:** Customer-facing quick order form (renders automatically under Add to Cart, or via the `[flexmior_quick_order]` shortcode, or as a modal popup). Three display modes: **Inline** (form shown directly under Add to Cart), **Inline + Collapsible** (form starts hidden behind a single button — click to slide it open), and **Modal** (small trigger button opens a popup). Fully configurable field builder (text, textarea, email, tel, number, select, checkbox, radio — drag to reorder, mark as required, custom placeholders/options). Submissions are stored in a dedicated `wp_flexmior_quick_orders` table and listed under **ShopBoost → Quick Orders** with filters (status, search), detail modal, status updates (new / processing / done / rejected), and a one-click **Convert to Order** action that creates a real WooCommerce order. Email notifications: admin alert + optional customer confirmation. Built-in anti-spam: honeypot field (autofill-safe naming) + per-IP rate limiting (configurable).
* **New Feature – Quick Order: Full button styling:** Dedicated "Button appearance" admin card lets you customise background color, hover color, text color, font family (13 presets + theme inherit), font size, font weight, padding, and border radius — all with a live preview that updates in real time. Styles are injected as inline CSS only when overridden; defaults stay clean.
* **New Feature – Quick Order: Admin bar integration:** "Quick Orders" link added to the ShopBoost dropdown in the WordPress admin bar for one-click access to incoming submissions from anywhere in the admin.
* **Improvement – Bulk Edit Products: Name and Slug inline editing:** Click any product name or slug cell to edit in place; saves on Enter/blur. Slugs are properly decoded from URL-encoded Cyrillic on display and re-sanitised on save. Blur without changes no longer triggers a save.
* **Improvement – Mass Discount: Scheduled date range:** Each promotion can now be assigned a `from` / `to` date — WooCommerce native sale-price scheduling kicks in automatically. Promotion cards show a status badge (Active / Scheduled / Expired) plus the date range.
* **Fix – Quick Order rendered inside the WooCommerce cart form:** Switched the auto-render hook from `woocommerce_after_add_to_cart_button` (inside the cart form) to `woocommerce_after_add_to_cart_form` (after the closing tag). The old placement produced nested forms — on certain themes the Quick Order submit was hijacked by the cart form, adding the product to the cart instead of saving the quick-order submission. Click handlers on the modal trigger and collapsible toggle now also call `preventDefault()` / `stopPropagation()` as a second line of defence.
* **Fix – Quick Order modal showed "Submission failed" instead of the form:** In modal mode no inline form was rendered, so the JS had nothing to clone into the modal. The fallback message used the generic "Submission failed" string, which looked like a server error. The modal now pre-renders the form inside the container at page load — clicking the trigger shows the ready-to-use form instantly.
* **Fix – Quick Order honeypot blocked legitimate submissions:** The hidden anti-spam field was named `flexmior_qo_website` with a label of "Website", which password managers and browser autofill commonly fill in automatically — triggering false-positive rejections. Renamed to a non-semantic name with `autocomplete="new-password"`, `opacity:0`, and `pointer-events:none` so autofill ignores it entirely.
* **Fix – Quick Order button-in-button when modal mode + collapsible were both enabled:** Collapsible is now strictly an inline-mode feature. When Modal display mode is selected the Collapsible options are hidden in the admin UI and ignored on the front end, so the popup no longer contains a nested toggle button.

= 1.7.2 =
* **New Feature – Mass Discount module:** Separated into its own independent module with a dedicated admin page and its own On/Off toggle in General Functions. Supports named promotions — each discount run is saved with a custom label (e.g. "Summer Sale"), percentage, and date. The promotions panel on the left lists all active promotions with live product counts; clicking a promotion filters the product table to show only the products in that promotion. Original prices are backed up automatically and can be restored per-product or in bulk at any time. Products discounted before this feature was introduced continue to work normally under "All with active discount".
* **Improvement – Bulk Edit Products: SKU inline editing:** SKU cells in the Bulk Edit Products table are now inline-editable. Click any SKU cell to edit in place; uniqueness is validated server-side before saving (duplicate SKUs are rejected with an error message). Variable products support SKU editing directly in the table.
* **Fix – Product filter not applied in Mass Discount:** Switching to `WP_Query` directly (replacing `wc_get_products()`) to fix paginated meta-query filtering. `wc_get_products()` silently ignored `meta_query` in paginated requests, causing the promotion filter to return all products instead of the filtered set.

= 1.7.1 =
* **Bug fix – Admin styles and scripts not loading:** All plugin sub-pages (Minimum Order, Product Links, Auto Add Product, URL Transliteration, Redirect, etc.) were loading without any admin styles or JavaScript. Root cause: WordPress generates sub-page screen IDs from the sanitised menu *title* (`sanitize_title('ShopBoost')` → `shopboost`), producing IDs like `shopboost_page_flexmior-*`. The previous detection used `strpos($screen_id, 'flexible-minimum-order')` which never matched these IDs. Fixed by also checking for `flexmior` in both `$screen->id` and the `$hook` parameter — now covers all current and future plugin pages reliably.
* **Bug fix – Auto Add Product product list not injected:** The product list for the Auto Add Product page was gated behind a strict equality check against a hardcoded screen ID (`flexible-minimum-order_page_flexmior-auto-add-product`) that was also affected by the same naming issue above. Replaced with a `strpos()` check so the product data is correctly passed to JavaScript regardless of the screen ID prefix.
* **Improvement – Minimum Order settings page redesign:** Rebuilt with a proper two-column card layout (Basic Settings + Custom Message + Shortcode on the left; Notice Colors + Typography on the right). Fixed a broken form structure where `<form>` opened inside the left column while Visual Settings and the Save button were outside it — meaning visual settings were never actually submitted. Added toggle switches, a live message preview, a live visual preview (colours and typography), and a one-click shortcode copy button.

= 1.7.0 =
* **New Feature – BGN ↔ EUR Dual Currency:** Shows the secondary currency equivalent next to every price across the store (product listings, variable product ranges, cart item prices and subtotals, cart grand total, mini-cart, order pages, My Account, and transactional emails). Works in both directions — BGN stores show EUR (÷ 1.95583); EUR stores show лв. (BGN) (× 1.95583). Uses the fixed ECB conversion rate (1 EUR = 1.95583 BGN). Configurable display format (brackets or slash), position (after or before), and independent per-location toggles. Settings page adapts automatically to the active store currency.
* **Performance – Feature hooks:** Every feature toggle now truly disables its code path. All Auto Add Product hooks (six in total) are now gated behind the feature toggle — zero callbacks registered when the feature is off.
* **Performance – Admin asset loading:** Replaced 19 redundant page-detection `if` blocks in `admin_scripts()` with a single `strpos()` check on the screen ID. Covers all current and future plugin pages automatically. Product Links admin bundle now loads only when the Product Links feature is enabled.
* **Performance – Color CSS variables:** Notice colour overrides moved from a raw `wp_head` echo to `wp_add_inline_style()`, removing a separate render-blocking `<style>` tag.
* **Performance – BGN/EUR frontend CSS:** `.fmo-eur-price` rule moved permanently into `frontend.css` (already loaded only on WooCommerce pages), removing one inline style block per page load.
* **Redirect – URL matching fixed:** Removed an impossible fourth SQL variation (raw `REQUEST_URI` with query string — source URLs are stored without query strings so it could never match). Query now uses three clean, documented variations.
* **Redirect – DB error logging:** All four AJAX operations (create, update, delete, toggle) now log `$wpdb->last_error` on failure for easier debugging.
* **Price Variation – Two-column layout:** Settings page rebuilt with side-by-side layout matching the rest of the plugin UI.
* **Price Variation – Checkbox template fixed:** "Checkbox – Square" template now renders correctly; previously fell back silently to the Table template.
* **Price Variation – Checkbox Settings card:** Dedicated settings card (size and four colors) appears automatically when the Checkbox template is selected.
* **Price Variation – Highlight Selected:** Toggle now correctly emits or suppresses `.selected` CSS rules for all five templates.
* **Price Variation – UI consistency:** Toggle switches, color fields, number inputs, and save button now use the standard plugin design system.
* **Size Chart editor rewrite:** Fully data-driven. PHP parses saved chart HTML into a JSON model via DOMDocument; JavaScript renders from that model. Removed ~270 lines of legacy DOM-scraping code and all production `console.log()` leaks.
* **Size Chart – Display Settings UX:** Two always-visible multi-select boxes replaced with a segmented "Show on" toggle (All Products / By Category / Specific Products).
* **Safer toggling:** Admin UI, settings link, and shortcodes remain always-on so settings are always accessible regardless of feature state.

= 1.6.4 =
* **Cleanup:** Removed leftover `console.log()` debug statements from the Checkout Field Editor and URL Transliteration screens. Only `console.error()` calls for genuine failures (missing jQuery UI, AJAX errors) remain.

= 1.6.3 =
* **Fix:** Bulk Edit Products page threw `SyntaxError: Expected property name or '}' in JSON` when a category name contained an apostrophe, ampersand, or other character mangled by `esc_js()`. The categories list is now injected with `wp_json_encode()` directly (no `JSON.parse()` / `esc_js()`), which produces a valid JavaScript array literal regardless of the contents.

= 1.6.2 =
* **Fix:** Drag-and-drop reordering on the Checkout Field Editor now works for both default WooCommerce fields and custom fields. The default fields container was switched from CSS grid to flexbox (jQuery UI sortable cannot compute positions inside a grid container), a dedicated `.fmo-drag-handle` element is now the sortable handle so Edit/Hide/Required buttons stay clickable, and the custom fields table helper now preserves column widths during drag.

= 1.6.1 =
* **View layer extracted:** Every admin page HTML template has been moved out of `class-settings-page.php` into its own file under `includes/views/`. The class shrinks from 5,914 to 556 lines and now contains only routing, menu registration, settings sanitizers, and thin delegators to the view files. No behaviour changes.
* **Maintainability:** Each screen is now reviewable on its own (`view-redirect.php`, `view-bulk-edit.php`, `view-checkout-field-editor.php`, etc.).

= 1.6.0 =
* **Architecture refactor:** The monolithic settings class has been split into dedicated AJAX handlers (Redirects, Checkout Fields, URL Transliteration, Product Generator, Bulk Edit) and a reusable URL transliterator service. No user-facing behaviour changes; AJAX endpoints and nonces are preserved.
* **Security by default:** New `Flexmior_Ajax_Handler` base class enforces `check_ajax_referer()` + `current_user_can()` on every AJAX endpoint — it is no longer possible to add a handler that forgets the check.
* **Smaller core file:** `class-settings-page.php` reduced from 7,918 → 5,914 lines (-25%). Feature code lives in focused files under `includes/ajax/`.
* **Dead code removed:** `upload_image_from_url()` (unused).

= 1.5.3 =
* **HPOS fix:** Custom checkout fields now use the Order CRUD API (`$order->update_meta_data` / `$order->get_meta`) instead of legacy post meta — required for stores running High-Performance Order Storage.
* **Security hardening:** Added explicit `phpcs:ignore` annotations with justifications to direct database queries against plugin tables; strict comparison (`true`) added to all `in_array()` calls.
* **Code quality:** Replaced `gmdate()` with `wp_date()` for analytics date grouping so results respect the site timezone.
* **JS cleanup:** Debug console output is now gated behind a debug flag (enabled automatically when `WP_DEBUG` is true). Production console stays quiet; real errors still log via `console.error`.
* **Cleanup:** Removed dead code blocks, debug HTML comments, and stale `// ПРЕМАХНАТО` markers.
* **Activation:** Explicit defaults when reading options in the activation hook.

= 1.5.2 =
* **New:** Conditional Free Shipping now supports custom checkout text for uncalculated shipping labels (editable from settings)
* **Bug fixes:** Fixed minor bugs and improved overall stability

= 1.5.1 =
* **Bulk Edit:** Added product image column in table
* **Bulk Edit:** Products per page filter (10, 20, 50, 100)
* **Admin bar:** ShopBoost menu for quick access to Settings and Bulk Edit
* **Bulk Edit:** Mass discount with save & restore – original prices saved automatically, restore action to undo
* **Bulk Edit:** Full variation support – backup/restore and all bulk actions apply to variable product variations
* **Bulk Edit:** Variable products show min–max price ranges; Variations badge in table
* File cleanup for WordPress.org compliance – removed development-only docs
* Updated README.md with accurate plugin description

= 1.5.0 =
* **New:** Size Chart feature (Beta) – display size guide tables in product tabs, via shortcode, or as popup
* **New:** Bulk Edit Products – edit prices, stock, and apply bulk promotions in a table view with search and filters
* **Performance:** Frontend CSS loads only on cart, checkout, shop, and product pages (not on blog/archive)
* **Performance:** Color CSS variables injection limited to WooCommerce pages only
* **Performance:** Auto Add Product product list limited to 500 items for faster loading
* **Performance:** Added lightweight frontend.css (~3 KB) with only notice styles
* Size Chart marked as Beta in admin interface
* Plugin optimized for speed and compatibility with latest WordPress

= 1.4.1 =
* Minimum order now uses cart contents only (products) – shipping, taxes and fees are excluded from the minimum order check
* Fixed redirect logic on login/registration pages (replaced undefined is_login/is_registration with proper WordPress/WooCommerce checks)

= 1.4 =
* Improved Checkout Field Editor with simplified modal design and better user experience
* Enhanced Redirect page with compact layout and improved modal interface
* Fixed drag and drop functionality for reordering checkout fields
* Fixed show/hide functionality for default WooCommerce checkout fields
* Enhanced security with improved SQL injection protection and data sanitization
* Reorganized General Functions page - active features first, then Coming Soon features
* Improved overall admin interface consistency and usability

= 1.3.3 =
* Redesigned General Functions page with modern card-based layout
* Added feature toggle system for enabling/disabling individual features
* Added 6 new "Coming Soon" features: Advent Calendar, Free Shipping Bar, Price Tracking, Abandoned Cart, Price Variation, and Checkout Field Editor
* Improved admin interface with full-width responsive grid layout
* Updated plugin icons (Shopboostar.png and Icondash.ico) for better visual identity
* Removed deprecated icon-128x128.png
* Enhanced product links page with improved product name and price formatting
* Optimized icon sizes for better performance (20x20px for menu icons)
* Improved code organization and preparation for future feature releases

= 1.3.2 =
* Added Woodmart theme integration with full AJAX cart support
* Added mini cart widget message for Woodmart theme
* Added protection against duplicate plugin loading using FLEXIBLE_MINIMUM_ORDER_LOADED constant
* Improved theme detection for Woodmart, Divi, and default themes
* Added dark mode support for Woodmart theme
* Enhanced responsive styles for all integrations

= 1.3.1 =
* Fixed Gutenberg/Blocks integration - HTML tags now display correctly as HTML instead of plain text
* Fixed syntax error in JavaScript code for Blocks integration
* Fixed output escaping issues in all integration files
* Updated "Tested up to" WordPress version to 6.9
* Removed all debug messages (console.log and error_log) for production release
* Improved HTML rendering in Gutenberg Blocks minimum order messages
* Enhanced security with proper output escaping and sanitization

= 1.3.0 =
* Added Auto Add Product feature - Automatically add products to cart when customers reach specified amounts
* Added support for multiple auto-add products with individual configuration per product
* Added discount options for auto-added products (Percentage, Fixed Amount, Set Price)
* Added option to automatically remove products from cart when total falls below threshold
* Added option to hide auto-added products from shop pages (only visible when automatically added)
* Moved "Enable direct checkout links" option to Product Links page for better organization
* Improved admin interface with full-width product configuration table
* Enhanced security with proper input sanitization and validation
* Fixed all security warnings and linter errors
* Improved JavaScript functionality for dynamic product row management

= 1.2.1 =
* Fixed issue where "Enable Minimum Order" checkbox could not be properly disabled
* Improved form submission handling to correctly save checkbox states when unchecked
* Enhanced settings save logic to properly detect Basic Settings form submission

= 1.2 =
* Added Product Links feature - Generate direct checkout links for products
* Added variation selection popup for variable products when copying checkout links
* Added "Copy Checkout Link" action in product list for quick link generation
* Improved admin interface with new "Product Links" submenu page
* Enhanced security with proper input sanitization and validation
* Fixed all linter warnings and security recommendations
* Added phpcs.xml configuration file for code quality
* Improved JavaScript error handling and user feedback
* Added modal popup for variation selection with AJAX support
* Updated menu naming to "Flexible Minimum Order" (restored original name)
* Enhanced copy-to-clipboard functionality with visual feedback
* Added support for variable products in direct checkout links
* Improved code documentation and comments

= 1.0.1 =
* Applied flexmior/fmo_ prefixes across entire codebase for better uniqueness
* Added direct access guards (ABSPATH) to all PHP files
* Implemented robust admin assets enqueue logic for proper page detection
* Fixed all i18n and escaping issues with proper translator comments
* Updated plugin headers with correct URIs and requirements
* Added migration path for old option names to maintain backward compatibility
* Deprecated old shortcode while maintaining backward compatibility
* Removed all debug code and improved code quality
* Enhanced security with proper nonce verification and sanitization
* Updated readme.txt to WordPress.org standards

= 1.0.0 =
* Initial release
* Basic minimum order amount functionality
* Category-based minimum amounts
* Custom message customization
* HPOS compatibility
* Modern admin interface

== Upgrade Notice ==

= 1.7.5 =
New Buy X Get Y Free feature and a redesigned Secondary Currency module (multiple currencies + custom rates, any store currency). Internal per-feature refactor and a Bulk Edit price-cache fix. All existing settings are preserved.

= 1.5.2 =
New Conditional Free Shipping custom checkout text option for uncalculated shipping labels, plus minor bug fixes for better stability.

= 1.5.1 =
Bulk Edit: product images, per-page filter, admin bar menu, mass discount with save/restore, full variation support. File cleanup for WordPress compliance.

= 1.5.0 =
Major update! Added Size Chart (Beta) and Bulk Edit Products features. Performance optimizations: frontend CSS loads only where needed, faster admin loading. Plugin tested with WordPress 6.9.

= 1.4 =
Major improvements release! Enhanced Checkout Field Editor and Redirect features with improved interfaces, fixed drag and drop functionality, and strengthened security. All existing settings remain unchanged.

= 1.3.3 =
Design update release! Redesigned General Functions page with modern card-based interface, added feature toggle system, and introduced 6 new "Coming Soon" features. Updated plugin icons and improved overall admin experience. All existing settings remain unchanged.

= 1.3.2 =
New feature release! Added Woodmart theme integration with AJAX cart support, mini cart widget message, and dark mode support. Also includes protection against duplicate plugin loading.

= 1.3.1 =
Bug fix release! Fixed critical issue with Gutenberg/Blocks integration where HTML tags were displaying as plain text. Also fixed syntax errors and improved security. All existing settings remain unchanged.

= 1.3.0 =
Major feature release! Added Auto Add Product functionality with support for multiple products, discount options, and automatic product management. The "Enable direct checkout links" option has been moved to the Product Links page. All existing settings remain unchanged.

= 1.2 =
New feature release! Added Product Links functionality for generating direct checkout links, variation selection popup, and improved admin interface. All existing settings remain unchanged.

= 1.0.1 =
Major update with improved security, better code organization, and WordPress.org compliance. All existing settings will be automatically migrated.

== Support ==

For support, feature requests, or bug reports, please visit our support page at https://wpsupporting.com/support/

== Privacy Policy ==

This plugin does not collect, store, or transmit any personal data. It only uses WordPress and WooCommerce standard functionality to enforce minimum order amounts.

== Credits ==

Developed by wpsupporting - https://wpsupporting.com

Special thanks to the WordPress and WooCommerce communities for their excellent documentation and support.