== Changelog ==

= 2.6.0 - 21/10/2026 =

Added:
- Customize (StoreEngine → Customize) — one screen to style the whole store without code. Start from a ready-made preset, then set brand colors for light and dark mode (optionally applied to your theme's buttons and links), the shop catalog (columns per device, image ratio, card style and which card parts show, in what order), the product page layout and sections, the cart and checkout layout, and the customer dashboard menu. Changes show in a live storefront preview before you save, with a guided tour and a "Guide me" help panel.
- Native Gutenberg blocks — 32 StoreEngine blocks for the product page (Title, Price, Media, Gallery, Add to Cart, Purchase Card, Description, Rating, Reviews, SKU, Badges, Categories, Attributes), the shop (Shop Filters, Product Filters, Search, Sort and the catalog), the cart (Cart Items, Cart Totals, Coupon Form, Mini Cart, Checkout Button), checkout (Checkout Form, Contact, Billing and Shipping Address, Payment Methods, Order Summary), orders (Order Confirmation, Order Details) and accounts (Customer Dashboard, Login Form). They follow your Customize settings and come with starter patterns.
- Block templates mode — block themes can switch the shop, product pages and checkout to editable block templates; the product card, product page, checkout and dashboard home can each be opened and edited in the block editor.
- New installs create the Cart, Checkout, Thank You and Customer Dashboard pages with native blocks instead of shortcodes.
- Bulk product import (CSV Import/Export addon) — a new Bulk Actions menu on Products with Import Bulk Products, Add Products in Bulk and Bulk Product Edit. Upload CSV or JSON (delimiter and encoding detected), map columns with suggested matches, then review everything in an editable spreadsheet grid (variations and prices nested under their product, rich-text descriptions, add/duplicate/delete rows, issues-only filter) before importing. Imports simple and variable products, prices (one-time, subscription and installment), attributes, brands, SEO fields and images, with validation for duplicate SKUs, missing parents, invalid numbers and installment totals. Includes a sample CSV and demo data.
- CAPTCHA addon (free) — protect checkout, pay for order, saved cards, login, registration, lost password, product reviews, affiliate sign-up and wp-login.php from bots with Google reCAPTCHA v2 (checkbox or invisible) or v3, Cloudflare Turnstile or hCaptcha. Per-form switches, skip logged-in or returning customers, a "Test keys" check and live preview, encrypted secret keys, single-use tokens, per-IP rate limits (including failed coupon codes), a fail-open or fail-closed choice when the provider is down, and an activity card with failed checks. Settings live under the new Settings → Security group.
- Reports addon (free) — Revenue, Orders, Products, Customers and Refunds reports with shared date and comparison filters, CSV export, fast aggregate tables with backfill ("Rebuild data"), a REST API and permissions. Report history is kept when the addon is turned off.
- Subscription reminder emails — Upcoming Charge (auto-renewing, 3 days before payment), Renewal Reminder (manual renewals, 3 days before), Renewal Invoice (when the renewal order is created) and Renewal Overdue (1 and 3 days after an unpaid renewal). Jobs reschedule when the payment date changes and are re-checked before sending; lead days can be changed with filters.
- Store digest email — a daily, weekly or monthly performance summary for the store owner (Settings → Marketing → Store Digest): sales, orders, items sold, average order value, refunds and new customers against the previous period, a one-time vs subscription vs renewal split, top products and orders needing attention, plus sections from Subscriptions, Memberships, Inventory, Reviews, Affiliates, Funnels and Multi-currency. Sent once per period, can skip quiet periods, and supports a test send, preview, send log, Slack and JSON webhooks, staff opt-in and an optional AI summary. Also `wp storeengine digest send|preview`.
- Order labels — colored tags to organize orders. Manage them in Settings → Store → Labels, attach them from the order screen, the orders list or in bulk, and filter the orders list by labels (any or all). Included in the order CSV export, the REST API and a `list-order-labels` AI ability; StoreEngine Pro extends labels to customers and subscriptions.
- Verified purchase badge on product reviews — set automatically when the reviewer bought the product (matched by account, then billing email), re-checked when orders are paid or refunded, with manual override, a "Recalculate badges" job, a "verified buyers only" filter and `wp storeengine reviews verify`.
- Store replies to product reviews — reply, edit, hide or delete replies from Products → Reviews ("Reply & approve" for held reviews). Replies show under the review as "Response from {store name}", never affect ratings, and can email the customer with the new Review Reply email.
- Membership overview on the Members page — Total, Active, Expiring soon and Expired cards, start and expiry dates, status badges and a status filter.
- Multi-location inventory — a Stock by location table on the product page with quantity and low-stock threshold per location.
- New developer hooks and capabilities: `moderate_storeengine_reviews`, `view_storeengine_labels`, `manage_storeengine_labels`, `storeengine/review/replied`, `storeengine/review/verified_changed`, `storeengine/label/assigned`, `storeengine/label/removed`, `storeengine/store_digest/sections`, `storeengine/stock/adjusted`, `storeengine/stock/restore_qty` and `storeengine/membership/expiring_soon_days`.

Improved:
- Admin UI pass — refreshed search inputs, products-table page-size dropdown, Settings spacing and widths, Email Notifications, Payment Methods, Tools, an Add-ons sidebar and a setup wizard notice.
- Turned-off features now show a blurred preview with a "Turn on" button instead of disappearing (e.g. Bulk Actions, Email settings and Store Digest).
- Membership — refunds cancel the membership instead of deleting it (so it counts toward churn), records are kept per group, role sync no longer loads every user and keeps purchase and manual grants, and the Members list is faster on large sites.
- Variant stock — saved variant quantities are changed through Adjust stock; CSV import and variant saves keep decimal quantities.
- CSV import — fixed legacy gallery images, cache flush and the progress indicator.

Fixed:
- Membership — relative (N-day) expiration was never enforced; one expired plan marked every plan as expired; buying again after an admin cancel kept the customer locked out.
- Subscriptions — the Trial Ending Soon email could be skipped for some subscriptions; a failed Stripe auto-renewal now marks the payment as failed so the subscription goes on hold; the generic Payment Failed email is no longer sent for subscriptions; read-only schedule dates on the admin Subscription screen.
- AI abilities did not register on WordPress 6.9 and later.
- Saving only part of the store digest settings switched the other options off.

Security:
- Membership — cancelled members could still open restricted pages, and a subscription-based membership could grant access to other users who had not bought it.

Compatibility:
- Requires WordPress 6.8 or later.

= 2.5.0 - 15/10/2026 =

Added:
- Shipping — new Table Rate method with a configurable measurement engine (weight, chargeable weight, volume, item count, subtotal).
- Shipping — Packages (formerly Extra Charges): scope gift wrap, packaging and handling to shipping classes, categories or products, with an optional checkout tick-box. Product-based packaging charges are also supported.
- Shipping — Free Shipping method can now hide the other methods when it is available.
- Coupons — new "Grant free shipping" option on coupons.
- Bundles — "All prices" rows on bundle prices; license snapshot captured on bundle price items, with support for a custom activation limit at the bundle-price level.
- Pricing — admin price pickers (including bundle product/price selection) now show hidden prices.
- Fonts — font download with a progress bar.

Improved:
- Shipping settings UI — two-column layout with select dropdowns, inline-edit default shipping class and package, new zones placed last, rate-table row gap and Remove button fixes, clearer field descriptions.
- Tax — mixed-rate carts now apportion shipping tax correctly across tax classes; standardized shipping_rate handling in tax actions and the API.
- Pricing side panel — surfaces license activation info like the inline view.
- Bundle templates — show All prices rows without a child price amount, and hide the "All prices" label on the storefront.
- Admin UI refresh — new Attribute modal, System Logs table alignment, payment method drawer, Settings / Tools / Wholesale / Addons & Extensions pages, admin notices.
- POS terminal — inventory sidebar, improved checkbox-switch, Locations UI refresh.

Fixed:
- Membership — a fatal and loss of access during membership renewals.
- Stray error_log calls left in admin code.

WordPress.org compliance:
- Removed the deactivation-feedback / opt-in telemetry that posted site URL, admin email and version data to kodezen.com.
- Removed the site-wide "Get StoreEngine Pro" admin nag.
- Satellite companion plugins now install via WordPress.org's plugins_api() instead of fetching zips from store.kodezen.com.
- Fixed invalid "Tested up to" header (readme now targets WordPress 6.7; the duplicate entry in the plugin header has been removed).
- Added MaxMind / GeoLite2 attribution to the readme Credits section.

= 2.4.0 - 01/10/2026 =

Added:
- Advanced filters with saved views on the Products, Orders, Customers and Payments lists — build conditions (price, stock, category, status, total, date, customer spend, order count and more), combine them with AND/OR groups, share a filtered list by URL, and save it as a named view (per user).
- Attributes manager — a two-pane screen with a searchable, paginated attribute list and the selected attribute's terms side by side: add several terms at once (comma separated) or from presets, edit and delete in place, and drag terms and attributes to set their order everywhere.
- Logs — a details drawer with the message, file/line and stack trace, previous/next navigation and delete, plus "Copy error" (a readable report for tickets) and "Copy JSON".
- Welcome email for customers created at checkout now includes their username, the generated password and a one-time "Set your own password" link, and is enabled by default.
- Admin top bar — search opens as a command palette (⌘K / Ctrl+K), and Screen Options / Help live in a compact "…" menu.

Improved:
- Admin design refresh — flat surfaces with borders instead of shadows (one subtle shadow only for menus, modals and other floating layers), a refreshed neutral text/border palette (saved colours still on the old defaults are updated automatically), and no web fonts loaded in admin or on the storefront.
- Product editor — a clearer slug field (full-width URL preview, inline editor with Enter/Esc, live cleanup preview and inline errors), an empty state with a "Create attribute" link in the variants modal, and a modern Inline / Side panel switch.
- Attribute term sorting — "Custom ordering" and "Name (numeric)" now actually apply (previously both fell back to name order).
- Select dropdowns show full option labels (long labels wrap instead of being cut off), and the bulk-action bar is clearly outlined over the list.
- Logs list — clearer rows (title, message, file:line), relative dates, and severity accents.
- Deleting an attribute or term now shows what it removes — affected products, the variations deleted with it (price, SKU, stock), products left with no variations, tracked stock and past orders — and asks you to confirm; unused attributes and terms are deleted right away.
- Variants modal — the redundant "Update product" button is gone (the header Save stays), and removing a used value asks in an in-app dialog instead of the browser's confirm box.

Fixed:
- A storefront fatal error ("storeengine_cart(): Return value must be of type Cart, null returned") on pages whose URL contained "wp-json/" — the request was mistaken for a REST call and the cart never loaded.
- The new-customer welcome email never sent on stores that had not saved their Email settings.
- The Logs page went blank for entries without a stack trace (e.g. PHP time-outs), which could happen right after clearing logs.
- Log dates were shown several hours off (they are stored in the site's timezone, not UTC).
- Membership × Academy — a course available only through a membership showed as Free, with Academy's free "Enroll Now" button next to "Purchase Membership", so visitors could enrol without buying. It now shows as Paid with only the membership button; admins and the course instructor also get Start Course, and members keep their own access.
- Deleting an attribute left it in products' saved attribute order, and deleting a term kept offering its variations on the storefront until the product cache cleared.

Security:
- The product attribute AJAX actions had no capability check, so any logged-in user could delete attributes and the variations built on them. They now require an administrator (store staff keep access through Pro's Staff & Permissions).

= 2.3.0 - 03/09/2026 =

Added:
- Donations & Name Your Price addon (free) — donation/NYP pricing mode on any product with a proper +/- stepper amount field, configurable below-minimum message, optional fee recovery, a free Donations admin page and Settings tab, a donor account-dashboard tab, and a fundraiser payee type in the unified payouts ledger.
- Decimal quantities & Unit of Measure (core) — products can be sold by weight, volume or length (not just whole units) via a new "Sold by" section on the product editor (unit, smallest increment, and the purchase-unit pack factor used when receiving stock, e.g. a carton of 20 strips of 10 tablets); the Pricing panel now captions the price's own unit (e.g. "Price is per 1 kg") separately from the purchase conversion.
- Inventory — Batches & expiry admin page with a per-product "track in batches" toggle; a Serials page for serial/IMEI tracking; a Stocktake page for physical counts.
- POS terminal — fractional-quantity cart lines with a numeric keypad for weighed/measured items; quote redemption at the till (replaces the cart with the quote's frozen prices); a pharmacy "Before you charge" sign-off panel (ID check, prescription-per-line, controlled-substance register) with a prescription picker; trade/customer-group pricing with a struck-through was-price, case-quantity rounding on scan/grid/keypad, and an on-account tender panel showing available credit.
- Retail (Grocery & Pharmacy) and Wholesale (B2B) addon teaser cards on the Add-ons screen (Pro).
- Logs — a "Clear logs" action (All / older-than-N-days), a `wp storeengine logs cleanup|clear` WP-CLI command, a manual "Clean up now" button, and full logger-level coverage (Info/Critical/Emergency/Alert/Debug added to filtering and auto-cleanup).
- Settings → Pages tab so addons can contribute their own store pages; `storeengine/frontend/show_floating_cart` filter.
- Donations — name-your-price / donation mode can now be enabled on subscription prices, and Settings → Donations gains an above-maximum message to sit alongside the existing below-minimum one.

Improved:
- Coupons admin — the list resolves category/product restriction ids to readable names instead of raw ids (no per-row lookups), plus sortable columns and a fixed product/customer search.
- Product editor — a shared split Save button (also used on the access-group editor); the pricing-mode selector moved above the price fields; donation/name-your-price field treatment reused for Add/Edit Price; price rows show their own loading state and roll back correctly if a delete fails.
- Floating cart badge caps at "99+"; distributable zip shrunk by excluding dev-only Composer packages, PR test screenshots and working notes from the dist build.
- Admin and storefront UI pass across multi-vendor, geolocation, reviews, membership, affiliate success messaging, downloadable files, FAQ groups, the create-shipment modal, the licenses table, the setup-wizard copy and the empty "no products" state.

Fixed:
- Decimal quantities — order/cart building, the stock manager and coupon paths no longer truncate fractional quantities to 0 through stale `int` type hints; the DB version is bumped so the migration actually runs on existing 2.2.0 installs; quantity columns widened to DECIMAL(15,3) after an initial DECIMAL(12,3) pass silently under-sized large values.
- Coupons — discounting silently skipped rows after the first matching product; a code shared by several per-product coupon posts could resolve to the wrong post (now scored against the live cart); product/price id comparisons coerced to int so migrated numeric-string ids match; coupon product/customer search and restricted-product title rendering.
- Bundles — adding a product to a bundle after purchase could leave buyers with a license key and no download, from a paid-status filter that missed processing/active orders, a strict-mode GROUP BY that dropped every licensed download, a join that hid keys with no release yet, and pagination that only counted file-permission rows.
- Licenses list route now honors filters (product, expiry, activation state, reseller type); a WHERE built only from IS NULL/IS NOT NULL conditions no longer misfires `$wpdb->prepare()`.
- Dashboard endpoints 404ing after an addon toggle or plugin restore — rewrite rules are rebuilt when the registered endpoints change.
- Password-reset email links redirected to the login screen instead of the reset form; recently-viewed products rendered after the footer on block (FSE) themes.
- PHP 8 fatals from `method_exists()` on a bool/null return, hardened across the codebase; a related TypeError in subscription `get_related_orders_date()`; Stripe now fails safe with an admin notice instead of fataling repeatedly when the bundled SDK isn't loadable.
- Log-cleanup retention compared against UTC instead of the site timezone.
- Product gallery video embeds; auto barcode/SKU generation; login, register and forgot-password UI; checkout email validation; WooCommerce checkout-draft orders wrongly included in migration; email-template width; PHPCS ruleset failing to run under WPCS 3.x.
- GA4 and Meta pixel purchase tracking silently losing conversions when the buyer landed anywhere other than the default thank-you page.
- Order totals could round inconsistently between the places that display them, so the same order showed two different figures.
- Donation orders placed against a subscription were counted twice in donation totals.
- Coupon search missed matches when searching by coupon code; the add-to-cart AJAX handler submitted disabled fields; EU-compliance select text rendered incorrectly; a redundant Roles child menu item was removed.

Security:
- The Restrict Content Pro CSV export action was reachable without an administrator check and could be invoked by unauthenticated visitors; it now requires `manage_options` and validates the requested export type against a fixed list. Sites with the CSV addon enabled should update.
- The logs REST collection endpoint was readable without a capability check — it now requires `manage_options`, matching every other route on that controller.
- Updated the bundled FPDI PDF library to 2.6.8, picking up the fix for CVE-2026-45802 (denial of service through memory exhaustion while parsing a crafted PDF).
- Hardened object deserialization and made the table prefix explicit in the deprecated subscription model; escaped an admin-configured message before it reached an exception.

Changed:
- The donation addon versions its own DB schema the way core does; the mini-cart drawer no longer opens automatically by default.

= 2.2.0 - 26/07/2026 =

Added:
- Product Quick View — open any catalog product in a modal straight from the shop/archive, with configurable trigger position and animation, an optional whole-card trigger, full keyboard/accessibility support, and working variant price and add-to-cart.
- Wishlist (core) — a heart control on product cards and single-product pages lets shoppers save products; the card heart reveals on hover.
- Product Compare — select multiple products and compare their details side by side.
- Recently Viewed products — surface the products a shopper has recently browsed.
- Size Chart library — reusable size guides assigned by brand or category and shown as a size guide on the product page.
- Reviews & FAQ — a buyer review form with photo/video review media and a dashboard entry, an admin Reviews management page (with REST), plus per-product and global FAQ libraries.
- Custom product gallery — carousel, stacked and grid layouts with lightbox and zoom, product-editor gallery swatches, and a unified image/video gallery.
- Shop-card variant switcher — Shopify-style variant swatches on archive/shop cards to switch the pictured and priced variant without opening the product.
- Sticky add-to-cart bar and cart-drawer auto-open — a persistent add-to-cart bar (mobile and desktop) and an option to open the cart drawer automatically after adding.
- Embeddable product shortcode — drop a single product anywhere via shortcode.
- Couriers — the shipment/courier framework now ships in free core (previously Pro): a Shipments model, provider registry, auto-push on paid orders, and order-status sync back to the order. Concrete carriers ship in the free StoreEngine Connectors companion plugin.
- Courier OAuth authentication — a reusable OAuth2 engine supporting one-click "Connect" (3-legged authorization code with automatic token refresh) and server-to-server client-credentials, with Connect/Disconnect from Settings → Couriers.
- Dropshipping addon — auto-route paid orders to suppliers for direct fulfilment, create/email purchase orders, capture supplier tracking, and roll fulfilment status back onto the order.
- Suppliers & Purchase Orders addon — track suppliers and raise POs, with a magic-link supplier portal, PO approvals, and low-stock auto-reorder.
- Companion-plugin ecosystem — the License SDK is now loaded by core so the free StoreEngine Payments / Connectors plugins receive automatic updates even without Pro; install-only teasers on the Payment method and Couriers settings surface them with one-click install & activate.
- Incoming webhooks receiver.
- Single-product analytics.
- Scheduled backups.
- Shortcode → block bridge — StoreEngine shortcodes are available as native blocks.
- First-run setup wizard redesign — product-type-aware capability selection, a Payments step, and a post-setup "connect your payment method" notice.
- A Refund action in the order editor top bar; Copy Link in the product price menu (generates a checkout link without a reload); and a Tools-page tab API so addons can contribute their own tabs.
- A "Couriers" tab on the Add-ons screen linking to courier settings.

Improved:
- Migrated admin selects to the shared Tailwind Select component, resolving country/state selection and various select sizing/width/hover issues.
- Affiliate & commission workflow, including always-on self-referral protection with an optional "Allow Self-Referral" toggle.
- Major admin UI refresh onto a shared Tailwind design kit — Settings, the Products editor, the Setup wizard, and standard pages rebuilt on one system (themed checkboxes/switches/selects, consistent cards, borders and spacing, redesigned notice cards with a grouping bell).
- Admin navigation reorganized — collapsible parent groups in the sidebar, raw-route child menus, Fraud Shield promoted to a top-level menu, and centralized submenu ordering.
- Dashboard — a shared page header across core and vendor pages, and affiliate referral + balance merged into one card.
- Checkout, cart and instant-checkout polish — card backgrounds, refined order-bump cards, and installment "Future Payments" summaries.
- Add-ons — payment-gateway and courier cards moved off the main list; the "requires add-ons" notice is a clean footer chip and long descriptions are clamped so cards align evenly.

Fixed:
- Product-gallery video embeds hardened (defense-in-depth), plus assorted product-layout, scroll and storefront UI fixes.
- Coupons on subscription orders (and the coupon code now appears in the email); optional compare-at price no longer blocks re-saving; tax invoice issues; funnel issues; missing shortcode pages.
- Courier settings toggles rendered with a stuck switch thumb; buttons default to type="button" to prevent accidental form submits; and a broad admin UI/spacing/border audit across tables, modals, notices and list-table footers.

Changed:
- Couriers use the shared addon schema-version system; removed unused table-drop code (StoreEngine never drops tables) and a bundled frontend font.

= 2.1.1 - 13/07/2026 =

Added:
- Multi-vendor: admin-initiated custom vendor payouts. An "Add Payout" modal lets an admin pay a vendor any amount up to their available balance, independent of a withdrawal request, so a large earned balance can be settled in instalments. New admin-only routes `POST /withdrawals/pay` (records a `paid` withdrawal and debits the balance) and `GET /withdrawals/vendor-balance`, both capped at the available balance with a re-check guard against concurrent overdraw.
- Affiliate registration form: additional fields (first/last name, website URL, promotional methods, terms agreement) and a Registration section in the Affiliate settings.

Improved:
- Affiliate addon: reworked affiliates admin table and settings, plus numerous correctness fixes across registration and payouts.

Fixed:
- Stripe Elements failing to load on checkout. The card iframe's real `ready`/`loaderror` events are now tracked so the confirm/submit path waits for the iframe to finish mounting instead of throwing "Element … the ready event has been" errors; and the checkout page now sends `no-store` (like the cart) so Chromium back/forward-cache no longer restores a stale page where Stripe never re-initialises.
- Instant Checkout: Stripe/payment initialisation and related issues in the embedded checkout app.
- Coupons: applying a coupon while the cart is still initialising no longer triggers a site-wide fatal — a missing/invalid cart is handled gracefully (logged, treated as "coupon not applied").
- Payments: building the order snapshot during checkout no longer fatals on a null date or price object; the build is wrapped so failures return a clear error instead of a "Cannot read properties of null" crash.
- Membership: resolved reported membership issues.
- Admin screens: JavaScript strings are now translatable. The admin bundle's strings were missing from the translation template because the build output could not be parsed during POT generation; POT extraction now transpiles the built scripts first so every admin string is included.
- Setup wizard: strings are now shown translated. Registered script translations for the setup wizard script (`storeengine-setup-scripts`) so its JavaScript strings load the correct locale.

= 2.1.0 - 09/07/2026 =

Added:
- New Funnel Builder addon — build sales/checkout funnels with dedicated step pages, an aBlocks-powered canvas, a status toggle in the funnels table, performance cards, and a Tools-section shortcode.
- New email/content builder editor (replaces the Quill editor) for product descriptions and email bodies, with raw HTML source editing, inline image size/alignment controls, and full H1–H6 heading support.
- Stripe Automatic Tax integration (Stripe addon). Opt-in via Settings → Tax → Enable Stripe Tax; delegates per-line tax calculation to Stripe's Tax Calculations API and records transactions / reversals via Tax Transactions for filing-ready reports. Adds settings keys `enable_stripe_tax`, `stripe_tax_default_code`, `stripe_tax_shipping_code`, `stripe_tax_fallback_to_local` (stored inside the main `storeengine_settings` blob). New post meta `_stripe_tax_code`, user meta `_stripe_tax_status`, `_stripe_tax_id_type`, `_stripe_tax_id_value`, order meta `_stripe_tax_calculation_id`, `_stripe_tax_transaction_id`, and refund meta `_stripe_tax_reversal_id`. New REST route `GET /storeengine/v1/stripe-tax/status`. New core filter `storeengine/tax/calculator` for third-party tax engines.
- Instant Checkout: unified contact + OTP verification block, phone country-code selector with an Email/Phone toggle, and verified-state persistence across page reloads.
- AI product-description and taxonomy-term generation with an inline "AI generate" button.
- POS: new cart-page UI, product pagination + search, and quick add-product patterns.
- Invoice preview, account-move, tax/footer notices, and skeleton loaders.

Improved:
- Admin UI refresh across the Pages table, Logs (items-per-page), modals, cards, access-group creation, and the add-customer/guest and add-product screens.
- Currency switcher copy; checkout & analytics UI; low-stock and parked-product handling.

Fixed:
- REST API requests on sites using Plain permalinks.
- Subscriptions: cart-page rendering, COD/bank-transfer and Buy-Now hidden for subscription products, renewal handling, and reactivation before payment.
- Catalog display bugs; duplicate robots meta tag; add-to-cart quantity increment on single-product pages.
- Instant-checkout guest-prefill and verified-cookie edge cases.
- Admin coupon restore; AI description not updating the editor; affiliate-creation validation.
- Stock processing and order-completion sync.

Security & Compatibility:
- Security (Multi-Vendor): Fixed a privilege-escalation chain — a self-registered pending vendor could approve their own vendor account (REST and wp-admin), mark their own withdrawal payout as paid, and change the global commission rate. Vendor-management, payout-status and settings-write actions now require an administrator (`manage_options`), with an explicit self-approval guard.
- Security (Downloads): Fixed a path-traversal in the digital-download handler — a crafted downloadable file URL (`../` or absolute path) could read files outside the store. Downloads are now restricted to allowed roots (WP install / wp-content / uploads / secure-uploads, filterable), and `../` segments are rejected when saving downloadable files.
- Full WordPress Plugin Check remediation — the distributed build now reports 0 errors. Output escaping (esc_html/esc_attr/esc_url/wp_kses_post), all dynamic SQL parameterised via `$wpdb->prepare()` (identifiers via `%i`), direct-file-access guards, and complete i18n (translator comments, single-literal strings, text domains).
- Logger now writes via WP_Filesystem; EU-VAT validation uses `wp_remote_post()` instead of cURL. Added an `is_uploaded_file()` guard to the backup-restore upload.
- WordPress 6.5–7.0 compatibility (`get_userdata()`, guarded 6.8/6.9 APIs). Tested up to 7.0.

Developer / QA notes:
- log-cleanup now computes its retention threshold in UTC to match the logger's UTC timestamps — verify old-log purging on sites in non-UTC timezones.
- Cart/Checkout/Thank-you/Dashboard page templates are now rendered via `Fs::render_template()` (include + output buffering) — verify these pages are created with correct block content on a fresh install and on upgrade/migration.
- Backup export/download/restore intentionally keep direct filesystem I/O (justified `phpcs:ignore`) because WP_Filesystem cannot stream/append — smoke-test a full export → download → restore cycle.

= 1.8.1 - 23/04/2026 =

- Improved: Added tooltip for unlimited license.
- Improved: Refactor license helper functions.
- Fixed: Added bottom margin in dashboard sections.

= 1.8.0 - 20/04/2026 =

- Added: Multi-Currency native feature (addon) with currency switcher.
- Added: Product bundle feature.
- Added: Added activity & custom error logger.
- Fixed: Prevented the cart from being cleared when adding recurring or subscription products.
- Fixed: Added missing digital-auto-complete flag for subscription products.
- Fixed: Prevent subscription reactivation before payment.
- Fixed: Dashboard page detection (query var), fixed frontend order pagination.
- Fixed: Payment gateway scripts (js-sdk) loading on payment-method list page (#SE-486).
- Fixed: Cart show wrong coupon amount when tax applied (order amount/discount amount was not affected).
- Fixed: Review showing in comments.
- Improved: Review & product comment UI updated & cleanup redundant scss file.
- Fixed: review rating count when review/comment not approved (SE-504).
- Improved: Added drag-drop support in deployment upload button.
- Improved: Marked subscription as manual when payment-method (token) gets deleted by user.
- Improved: Add shorthand currency formatting and helper updates.
- Improved: Revamped checkout script. Added support for developing payment gateway as 3rd party plugin.
- Improved: Added price type to REST API error responses.
- Improved: Revamped variation builder, improving UIUX.
- Improved: Fixed price editor & improved previously used widget with UI improved.
- Improved: Updated cart quantity input templates to explicitly disable inputs at min/max boundaries.
- Improved: Improved cross-sell responsiveness on mobile (2 columns).
- Improved: Refactored `cart.js` with debounced change handlers for quantity inputs.
- Improved: Increased `remove_empty_spaces` hook priority.
- Improved: Store pre-calculated min/max prices for faster rendering.
- Improved: User dashboard sidebar & content section responsive UI.
- Improved: Improved user's `payment-method` list and `add-new-payment` UI.
- Fixed: Added js handler for `menu-compact` button and improved the compact menu UI.
- Fixed: Nonce error (request 403) on ajax login.
- Fixed: Pending status not showing on `Installment Plan` status dropdown after being selected.
- Fixed: Stripe recurring payment order context fatal error fixed.

= 1.7.6 - 18/03/2026 =

- Fixed: Resolved Stripe amount bug by converting amounts to cents correctly.
- Fixed: Prevented error in DOM utility `prop()` when elements array is empty.
- Added: Added `rounding_precision` to currency options.
- Improved: Included `localeConv` in frontend assets.
- Improved: Passed currency data to payment gateways.
- Added: Added new JS currency utils and formatting functions.

= 1.7.5 - 12/03/2026 =

- Added: Now coupon can be created for specific products (and prices).
- Improved: Added specific customer option for coupon restriction.
- Fixed: Stripe payment intent setup request for subscription payment was failing for renewal payment.
- Fixed: Automatic renewal payment orders now correctly transition to completed status.
- Fixed: Subscription renewal dates (next payment and last payment) not updating for already active subscriptions.
- Fixed: Subscription `_last_payment_date` was not updating.
- Fixed: Installment detail toggle was not working on single product page with single price.
- Improved: Simplified stripe checkout backend process.
- Improved: Stripe checkout "Save payment method" checkbox is now forced checked and read-only for subscription purchases.
- Improved: Enhanced core subscription logic for more reliable schedule recalculation.
- Improved: Order “Pay Now” will work with failed orders too.
- Improved: Subscription will show “Pay Now” if renewal failed for the subscriber to retry manual payment.
- Improved: Order & subscription list table shows short date to improve visibility of other column data.
- Improved: Page loading effects (loading animation) & other CSS animation/transition across all dashboard pages.
- Improved: Price editor UIUX.
- Improved: Both analytics dashboard date-range picker improved with homegrown package.
- Improved: All list-table UI replaced with very own homebrewed list-table package.
- Fixed: Variation price was not calculated accurately while the item being added to the cart.
- Fixed: Product description block editor preview.
- Improved: Added auto-save to product description block editor.
- Fixed: `view_cart` trigger updated with correct data & trigger within the Mini-Cart.
- Fixed: Customer select dropdown was only showing first 10 items.
- Improved: Added `gravatar` & full name in customer dropdown.
- Fixed: Cart quantity input buttons (inc/dec) concatenate number without calculating.
- Fixed: `Minimum amount` validation was not working while applying coupon.
- Fixed: Minor UI improvements.

= 1.7.4 - 01/03/2026 =

- Added: Product & User Specific coupon creation options.
- Improved: Set Stripe `capture_method` to `automatic` for more reliable payment capturing.
- Improved: Refactored Stripe error handling for better API error reporting.
- Fixed: Stripe subscription payments not being captured automatically.
- Fixed: Stripe card tokenization issue (saving card without consent for non-subscriptions).
- Fixed: Resolved PHP lint error in Stripe gateway.
- Improved: Refined subscription detection and order collection logic.
- Improved: Replaced full page reload with AJAX-based content refresh after coupon removal.
- Improved: Added new Analytics settings tab with contextual guidance and notice components.
- Improved: Refactored Currency Price component for cleaner formatting, added trimZeros(), improved filter hooks, and enhanced currency symbol handling.
- Improved: Standardized checkout redirect delay (850ms) across all payment gateways.
- Improved: Pixel integrations now initialize only when Analytics is enabled.
- Improved: Extracted pixel utilities into a dedicated helper file.
- Improved: Product price creation UI.
- Improved: Product description block editor support.
- Fixed: Added missing doActionAsync import.
- Fixed: Added missing filter hook name in Price component.
- Fixed: Corrected variation price display on cart page.
- Fixed: Resolved Mini Cart styling issue.
- Fixed: Stripe saved payment method (token) UI.
- Misc: Minor code cleanup and internal optimizations.

= 1.7.3 - 24/02/2026 =

- Improved: Admin product edit UIUX.
- Improved: All list table loading state.
- Fixed: Mini Cart loading nonce error with full-page-caching.
- Improved: Added composite index in order-item-meta table for performance.
- Improved: Update date util matching backend date format for deployment analytics.
- Fixed: Paddle product tax category was not saving.

= 1.7.2 - 05/02/2026 =

- Fixed: **Installment Plan** page link (addon page) was broken.
- Fixed: Some addon doc-page links (addon page) redirecting to 404 page.
- Improved: Addon search & filtering updated with more keywords & tags.
- Improved: Added missing output escaping for csv export.
- Fixed: Fatal error on 404 page when entire site is restricted.
- Fixed: Fatal error on restricted page when single product/price being used for membership (Access Group).
- Fixed: Course bundle integration was not setting bundle type.

= 1.7.1 - 25/01/2026 =

- Improved: Prevent direct access in php files.
- Fixed: Resolve WordPress Coding Standards violations across multiple files.
- Fixed: **Course Bundle** integration type check condition added.
- Fixed: RCP migration invalid sql query.
- Improved: Add proper `escaping` for output and `sanitization` for input.
- Improved: Implement query caching in admin dashboard api, improving page performance.
- Improved: Minor code quality improvements and optimizations.
- Improved: Page title translated with sub-page titles for plugin dashboard pages.
- Fixed: Loading preloading addon settings triggering translations loading too early error.

= 1.7.0 - 18/01/2026 =

- Added: **Google Tag** & **Meta Pixel** tracking support.
- Improved: Added hooks (in PHP & JS) & update checkout response data for pixel tracking support and refactor cart logic into cart.js.
- Improved: Currency render (admin dashboard) improved with support for country code.
- Fixed: Screen-reader-text for refund order amount was missing currency symbol.
- Improved: Button UI updated across templates for consistent styling.
- Improved: Removed redundant css rules.
- Updated: Translation comments & placeholders.
- Fixed: Commission ajax handlers for invalid order ID.
- Fixed: Fixed tutor-booking integration on checkout.
- Improved: Price rendering for membership (locked) content.

= 1.6.9 - 07/01/2026 =

- Added: UI support for **Installment Plan** add-on.
- Improved: Request data sanitizer improved in AbstractRequestHandler, improving performance. This update also allowing nested (repeated field) sanitization seamlessly.
- Improved: Abstract integration class revamped with support for handling of different order types directly, improving checkout process performance.
- Improved: Add-to-cart shortcode extra whitespace removed.
- Improved: Add-to-cart quantity input element improved across single-product & cart page.
- Fixed: Price braking into multiple line in cart page.
- Improved: Update button UI, reduce unnecessary styles.
- Improved: Add-to-cart redirect updated based on product-price type.
- Added: Taxable attribute in CartItem object.
- Improved: Refactor common utilities.
- Fixed: JS dom utility fixed (`this` args).
- Added: Refactor cart tax items into separate template.

= 1.6.8 - 25/12/2025 =

- Improved: Addon settings loading with abstract class, unified addon settings management.
- Improved: Dashboard page geo map replaced and added orders table.
- Improved: Analytics page geo map replaced and table css fixed.
- Fixed: Multiple price delete crashing product editor.
- Fixed: Cart Block Template was showing broken block codes in site-editor.
- Fixed: Default login redirect value settings fixed for login shortcode.
- Fixed: Checkout payment button vanishes after address-field changes.

= 1.6.7 - 09/12/2025 =

- Improved: Refactor addon loading and improve autoloader.
- Improved: Updated deployment management UI components and styles for consistency and improved user experience.
- Improved: Enhanced error handling in customer API to properly check user existence.
- Fixed: Added refund methods to Subscription class to calculate subscription refunds from related orders, fixing refund error with subscription orders.
- Fixed: Payment gateway failing in order-pay endpoint for pending orders.
- Improved: Minor code cleanups and type improvements.
- Improved: Update refund modal notices for admin, clarifying how manual/api-refunds get processed.
- Improved: Refund api error handling updated.
- Fixed: Admin notice UI conflict with alert dialog UI styles.
- Improved: Added admin-notice, informing admin user about `Gutenberg` blocks available through aBlocks plugin.
- Fixed: Admin notices aren't showing unless admin visits settings page.
- Fixed: Coupon calculation with subscription product.
- Fixed: Products editor variation table tooltip visibility fixed.
- Improved: Attribute terms modal footer spacing fixed.
- Improved: Affiliates Modal UI updated.
- Fixed: Affiliate bulk inactive blank ajax response fixed.
- Fixed: page blank issue for fetch items by id.
- Improved: Added search in URL params for addons search, allows filtering addons with direct link.
- Fixed: Subscription order info (thank-you page) braking UI with extra closing `div` tag.

= 1.6.6 - 03/12/2025 =

- Fixed: Dashboard breaking issue after updating WordPress core to version 6.9.
- Updated: Tested up to WordPress 6.9.


= 1.6.5 - 02/12/2025 =

- Fixed: Fixed data format prediction in AbstractEntity for float (double) value with decimal parts.
- Improved: Price field sanitization & validation revamped with correct datatype for price & compare-price field.
- Added: Ajax validation added for missing Price name.
- Improved: Recent orders UI updated.
- Improved: Tools page menu subtitle/descriptions added.
- Added: Subscription support added in **PayPal** payment gateway.
- Fixed: **PayPal** buttons aren't rendering after `refresh-checkout` form event.
- Fixed: Removed `refund` support entry from Paddle as not implemented.
- Fixed: Error while sending request to `settings/verify-payment-gateways` endpoint due to wrong argument generate at runtime.
- Improved: Removed **Stripe** dependency notice for **Subscription Addon**.
- Fixed: Showing error on store-dashboard (and in order details page) for disabled gateway.
- Improved: Updated no-payment-gateway available message.
- Improved: Added no-payment-gateway available for subscription.
- Improved: Frontend notice UI spacing, button & close-icon styling updated.
- Added: Core UI for **Order Bump** addon implemented.

= 1.6.4 - 24/11/2025 =

- Added: Setup wizard introduce for new installation.
- Improved: Updated installer to run on updates improving database migration.
- Added: New color settings for `subtitle_color` and `input_text_color` introduced.
- Improved: Color picker component style with clean color preview.
- Added: Added UI support for copying download link for latest version of free item.
- Added: Set paid status to refunded on full refund.
- Fixed: Using correct action hook for user's `total purchase` update  on refund.
- Improved: Analyzing search input and generating query more accurately to filter orders.
- Fixed: Reading refund metadata was failing braking refund info tooltip in order editor.
- Improve: Order editor refund tooltip UI.
- Updated: Added check for `refunded` payment status in integration's `unpaid-order-handler`.
- Fixed: `COD` payment method availability logics revamped with proper support for shipping
- Added: Selective shipping zone settings for `COD` method.
- Added: Now `COD` payment can be enabled for virtual product too.
- Added: Admin notice when `COD` is enabled without any shipping method configured or without enabled for virtual products.
- Fixed: Replaced `MaxMind Geolocation Integration` documentation with correct support article.
- Improved: Refresh payment methods on checkout page.
- Improved: Tax display type check functions moved to `TaxUtils` so other module can access without initializing cart.

= 1.6.3 - 17/11/2025 =
- Fixed: Checkout failing with fatal error due to mPDF package dependency.
- Updated: Translation template & translators comments updated.

= 1.6.2 - 16/11/2025 =

- Fixed: Add-to-cart failing saving cart data on db.
- Updated: update add-to-cart error messages.
- Fixed: Error checkout (Undefined property: stdClass::$instance_id) with physical products.
- Fixed: Admin dashboard (order list table) error if item with shipping on the list.
- Improved: remove legacy code and deprecated doc-blocks, improving error handling.
- Fixed: Dashboard (analytics) map tooltip.

= 1.6.1 - 14/11/2025 =

- Fixed: v1.6.0 SVN release conflict issue solved.

= 1.6.0 - 13/11/2025 =

- Improved: Admin settings navigation updated.
- Improved: Core update for to support pro features.
- Fixed: Dashboard analytics UI issues.
- Improved: Updated coupon editor sidebar UI.
- Improved: Customer list-table UI updated.
- Fixed: Fatal error on StoreEngine order info shortcode.
- Improved: Update single page template loading, improving page performance.
- Improved: AcademyLMS course pricing card ui.
- Added: `storeengine_single_product_gallery` shortcode added.
- Fixed: Product gallery shortcode bug.
- Fixed: Mini-cart icon's color issue with astra theme.
- Added: `storeengine_single_product_summary` shortcode added.
- Added: `storeengine_single_product_description` shortcode added.
- Added: `storeengine_single_product_comments` shortcode added.
- Added: `storeengine_single_product_reviews` shortcode added.
- Added: `storeengine_single_product_cart_notice` shortcode added.
- Improved: `storeengine_add_to_cart` shortcode.

= 1.5.7 - 06/11/2025 =

- Fixed: PayPal SDK error (`Expected currency from order api call to be USD, got CURRENCY. Please ensure you are passing currency=CURRENCY to the sdk`) resolved.
- Improved: Save PayPal fees data in order meta.
- Added: MaxMind GeoIP (GeoLite2-country) integration added.
- Improved: Customer default country setting based on store-base address or geo-ip country.
- Improved: Shipping cost calculation based on customer address on cart page.
- Improved: New UI & analytics data for the Dashboard.
- Fixed: Hardcoded database prefixed updated.

= 1.5.6 - 23/10/2025 =

- Added: Software (plugin) analytics dashboard.
- Fixed: Address getting saved as JSON encoded string, which was braking Unicode/latin characters.
- Fixed: Address form UI broken, col-6 (column 1/2) was rendering into 2 separate row.
- Fixed: Changelog typos.
- Updated: Translation template file (`.pot`) updated.

= 1.5.5 - 09/10/2025 =

- Added: Separate coupon usage limit field added to give admin more control over coupon usage.
- Fixed: Order editor broken with js error while rending purchase table item.
- Fixed: Order pay feature was crashing when using with COD.
- Fixed: WooCommerce migration tool coupon data migration fixed.
- Fixed: Select components options prop-type schema updated.
- Fixed: Template override was not working as intended and showing cart template on any page if not set properly.
- Fixed: Course bundle loop (archive page) price display.
- Fixed: Per-Customer coupon usage limit was not working.
- Fixed: Fatal error braking store-shop page when entire-site protected via membership addon.
- Fixed: Membership addon site-restriction brakes shop-page.
- Fixed: Membership addon site-restriction brakes archive UI.
- Improved: Refactored order-pay conditions, improving error handling.
- Improved: Added edit with **WordPress Editor** in product list-table actions.
- Improve: Shortcode added for rendering restricted-page-template for membership site-restriction.
- Improved: Coupon UI css fixed.
- Improved: Flush permalink settings upon activation/deactivation of membership add-ons.

= 1.5.4 - 01/10/2025 =

- Added: Mini cart feature added.
- Improved: Updated site activation list table columns.
- Fixed: User dashboard logout menu was just redirecting user back to user-dashboard, without logging out the user.
- Improved: Added custom attribute support via args param for icon-render template tag (helper) function.
- Improved: Renamed pagination functions (AbstractCollection) and code improved readability.
- Fixed: Order editor purchase table item meta as encoded html (backend returns item metadata as formatted html, not as plain text)
- Fixed: Undefined function in price formatting utility method.
- Improved: Order editor purchase table column sizes updated, improving readability for admin user.
- Fixed: Start course button was not displaying.
- Fixed: Free checkout was not working if no payment methods are enabled.
- Added: Improved UI & and added deployment options for free/pro split.

= 1.5.3 - 25/09/2025 =

- Fixed: Academy LMS Course Bundle compatibility issue

= 1.5.2 - 18/09/2025 =

- Added: Direct checkout via parameterized URL feature added. This will allow admin to redirect user to the checkout page with specific product with coupon applied (optional). E.g. `http://example.com/store-checkout/?product_id=34&price_id=4&coupon=hello`
- Added: Admin can now hide specific price from the frontend. This doesn't restrict the price, but just don't show in the frontend and allows admin to generate checkout URL.
- Added: Added Price display settings for archive page (product with multiple price). This adds the ability to show prices as dropdown (default) and as price range to improve UI/UX.
- Added: New user registration confirmation email notification added.
- Added: URL presigner class added to create secure signed URL with expire time with rotating encryption keys. This allows StoreEngine to generate secure pre-signed URL for public use.
- Improved: Update `.htaccess` for protected directory with support for apache v2.4 with backward compatibility for apache v2.2
- Improved: Updated datetime conversion in frontend (fix time tag datetime attribute formatting).
- Improved: Remove duplicate queries & implement WP object cache to improve performance.
- Improved: Collection result mapping and query handling for better data consistency
- Improved: Updated collection result-mapping logic across all collection classes
- Improved: Updated parent prime-cache mechanism for better entity caching alignment, and no steal data remain cached.
- Improved: File download includes some metadata (when available) for better UX, including file name, file size, etc. Deprecated: Order-collection constructor $type argument (use where method with ['key' => 'type', 'value' => 'order or refund'] instead)
- Improved: `storeengine_add_to_cart` shortcode improved with dummy data improving admin UX. Also, this can be now used with loop/archive query with `global $product` set.
- Updated: Collection query classes across multiple addons (affiliate, CSV, subscription), updating where param with correct type and removed newly deprecated type argument.
- Updated: Removed order list-table horizontal ellipsis (`…`) if payment title is missing.
- Fixed: Secure directory not protected with empty index.html & `.htaccess`.
- Fixed: Secure directory notice doc link.
- Fixed: Order datetime in order-thank-you-page & order-list page (admin-dashboard).
- Fixed: Consistent datetime calculation in backed.
- Fixed: Infinite loop issue when other plugins use `wp_redirect( wp_login_url() );` for non-logged-in users.
- Fixed: Set `new_order_email_sent` flag after order confirmation being sent.
- Fixed: Temporarily disabled faulty prime-cache functionality to prevent broken/unfinished data caching
- Fixed: Course archive page (loop page) price display type issue with enrolled courses.
- Fixed: Remove 2x loading animation after creating new price.
- Fixed: Payment method save bug (triggering save on all other item).

= 1.5.1 - 11/09/2025 =

- Fixed: CSV data import / export security bugs
- Fixed: Razorpay checkout.js conflict issue

= 1.5.0 - 21/08/2025 =

- Added: Added support for licensed software download
- Added: Paddle payment gateway support added (as addon).
- Added: Order pay feature added, user can now pay for an unpaid pending order/subscription.
- Improved: CSV import crashing on large data fixed and improved progress calculation.
- Improved: Course membership `add-to-cart` refactored.
- Improved: Added missing referral URL (with tracking parameter & code) in user dashboard affiliate page.
- Fixed: JavaScript type error fixed in AcademyLMS course page.
- Fixed: Invalid registration url on login page.
- Fixed: User's course access for purchased membership. Added migration for old user-meta data removal.

= 1.4.0 - 12/08/2025 =

- Added: New CSV Import / Export addon
- Added: New Payment method Razorpay addon
- Added: Add free checkout(zero) support.
- Improved: Downloadable product support with subscription based payment
- Fixed: Fix terms returning error during migration.
- Fixed: Fix product gallery ux issue.

= 1.3.3 - 31/07/2025 =

- Improved: Updated PayPal and Stripe addons  improving consistency and null safety.
- Improved: Enhanced asset loading by separating `block-editor-assets` loading.
- Improved: Added missing indexes, and normalizes field definitions for consistency across tables.
- Fixed: Removed extra border around access-group *Purchase Info* sidebar.
- Fixed: Eliminates explicit `COLLATE utf8mb4_unicode_520_ci` from all table and column definitions in database migration scripts, standardizing schema creation and improving compatibility.
- Fixed: Error product migration fails on attribute term error.
- Fixed: Guest checkout login link fixed.
- Fixed: Redirect user to proper redirect_to parameter after successful login.
- Fixed: Static price symbol replaced with current price symbol.
- Fixed: Refactor cart access and add block editor asset support, fixing fatal error in customizer preview.

= 1.3.2 - 22/07/2025 =

- Added: Order details view.
- Added: Subscription details view & action buttons.
- Added: Subscription cancellation.
- Added: Admin can add/remove order note.
- Added: Cart & checkout settings tab.
- Improved: removed `CONCAT/GROUP_CONCAT` & `JSON_*` functions from SQL for better compatibility.
- Improved: Register payment gateway namespace for autoload directly with root namespace.
- Improved: Admin can now set default country for checkout billing/shipping address if user's address not saved (e.g. new customer)
- Improved: Settings to toggle floating cart icon allow admin to enable/disable floating cart.
- Improved: Added default icon element if gateway class does not provide icon url.
- Improved: Price create, update and delete AJAX handlers now using Price entity class, replacing deprecated price-model class.
- Improved: Added hook for flushing cache group on custom meta added, updated or deleted registered by StoreEngine.
- Improved: Empty notice added on cart list block.
- Fixed: Object cache not flushing for collection query class.
- Fixed: Variation UI in product-editor updated, fixing tooltip & variation name.
- Fixed: Using `raw` content & title for product editor, fixing embedded content markup saving as content & title and braking single product page.
- Fixed: Gutenberg editor CSS conflicts.
- Fixed: Frontend dashboard login form not showing.
- Fixed: Namespace & hook typo issue fixed.
- Fixed: customer update ajax payload fixed.
- Fixed: Added missing doc url for migration addon.
- Fixed: Fatal error for bad data from join query and data type on variation attributes

= 1.3.1 - 14/07/2025 =

- Fixed: Fatal error upon order created from admin dashboard.
- Improved: Update lookup table after add/remove order item from admin dashboard.
- Fixed: Error creating orders table due to table index length limitation.
- Improved: Added index in orders meta table for performance.
- Improved: Added support for shortcode preview (dummy data) for `aBlocks`.

= 1.3.0 - 13/07/2025 =

- Added: Migration addon added (WooCommerce to StoreEngine data migration)
- Added: Order invoice pdf addon.
- Added: Product add-to-cart shortcode `[storeengine_add_to_cart]`.
- Added: WebHook event listener for admin order create event.
- Added: WebHook event for restored order.
- Improved: Update order webhook payload handling fatal error fallback.
- Improved: Trash & restore order, trash order is no longer editable until restored.
- Improved: Sanitized WebHook delivery url properly before save.
- Improved: Log functionality added in WebHook for debugging.
- Improved: Attribute slug validation & sanitization updated, shorten attribute taxonomy prefix.
- Fixed: Remove usage of deprecated/removed order method from webhook and email class.
- Fixed: Order delete webhook was triggering fatal error.
- Fixed: Remove usage of deprecated/removed order method from webhook and email class.
- Fixed: Order delete WebHook was triggering fatal error.
- Fixed: Refresh order list table on restore order.
- Fixed: Variation status update rest api user permission fixed.
- Fixed: Attribute order by.
- Fixed: Attribute taxonomy slug max length error fixed.
- Fixed: Typo & textdomain fixed.
- Fixed: Attributes list table pagination was not working.
- Fixed: Attributes list table search & per-page reset.
- Fixed: Products shipping option ui issue.
- Fixed: Add-to-cart was not working from membership protected content page.
- Fixed: Membership protected content page broken layout.

= 1.2.2 - 03/07/2025 =

- Added: Admin notice feature that renders both in react and native admin notice.
- Added: Catalog mode feature added via addons interface.
- Improved: Optimize settings update handler (handler), with support for addon settings.
- Improved: Added new hooks for pricing template, product quantity-input and add-to-cart buttons.
- Improved: Made FloatingCart class a singleton, adding ability to use remove_action() on actions added from it.
- Improved: Customer's total spent calculation (total purchase minus order refund).
- Improved: Frontend user dashboard UI updated.
- Improved: Tax general settings Rounding option UI updated.
- Fixed: Settings save (submit) button glitch.
- Fixed: Tax tab glitch (on reload).
- Fixed: Request handler data sanitization fixed, added support for string[] data.
- Fixed: Customer data (api response) empty when contains trashed orders.
- Fixed: Commission order id ajax response removing trashed orders.
- Fixed: Order cancellation logic fixed for COD payment.
- Fixed: Access Group list table column data.

= 1.2.1 - 24/06/2025 =

- Added: FSE theme product archive sidebar settings not worked issue.
- Added: Frontend Dashboard redirect setting.
- Fixed: Attribute Create modal close issue.
- Fixed: Allow from empty form field to pass-through sanitizer and populate sanitize payload, allowing saving empty field and zero (0) value.
- Fixed: Subscription Price details not showing issue.
- Fixed: Subscription Editor Status update not working.
- Fixed: Admin List Table UI issue.
- Fixed: Academy Course Purchase UI issue.
- Fixed: Membership addon payment issue.
- Fixed: Subscription based price issue.

= 1.2.0 - 19/06/2025 =

- Update: Revamped Academy LMS & StoreEngine Membership addon Integration
- Fixed: Cart crashing with invalid price id price deleted after user added item in their cart.
- Fixed: Order editor coupon add/remove bug, duplicating coupon item if coupon contains uppercase characters.
- Fixed: Updated static link for registration & password reset.
- Fixed: Dashboard login form responsive issue.
- Fixed: Rest API permission for other admin users.
- Fixed: Added default coupon discount (10%) for creating new coupon.
- Fixed: PayPal api error when order total is greater than or equal to 1000.
- Fixed: PayPal zero decimal currency order total amount formatting.
- Fixed: Set cart hash cookie only when necessary (adding product to cart), improving server side caching and page loading performance.
- Improved: Academy LMS integration new UI.
- Added: API permalink helper function handling pretty & plain permalink.
- Fixed: API Permalink issues across react reducer & actions.
- Fixed: Frontend dashboard order query fixed, was causing dashboard to crash if there's any trashed Order for the logged-in user.
- Fixed: Stripe payment bug.
- Improved: Stripe payment gateway class error handling.
- Improved: Product review & comment error response.
- Fixed: Subscription list table navigation.

= 1.1.1 - 05/06/2025 =

* Added: Access Group Buy button inject.
* Improvement: Product Integration Logic.
* Improvement: Product Integration Subscription price disable for Academy LMS Course Bundle and Booking.
* Improvement: Membership Shortcode UI Improved.
* Fixed: Academy Course Bundle Integration.
* Fixed: Single Price add to cart not working.

= 1.1.0 - 04/06/2025 =

* Improvement: Product price UI improved with support for subscription information.
* Fixed: Console error for faulty proptypes fixed.
* Fixed: Price ajax action.
* Improvement: Price output for subscription (show fee).
* Added: Added support for trial subscription through Stripe addon.
* Fixed: Add saved payment php error.
* Fixed: Subscription status update (activation).
* Improvement: Update stripe payment validation.
* Fixed: Update Stripe addon error messages.
* Improvement: Cache get_page_by_title query.
* Fixed: Rating `0.5` css class.
* Fixed: Subscription date calculation fixed.
* Fixed: Backward compatibility for old duration type (plural forms) & setup-fee type.
* Fixed: Subscription scheduler (renewal-payment) fixed.
* Added: Stripe addon hook for renewal order auto payment.
* Fixed: Check if header is sent before setting cookie.
* Fixed: Order version property fixed.
* Improvement: Remove setting version from existing subscription to renewal orders.
* Fixed: Subscription list output sort by id.
* Fixed: Entity object read-meta-data read-flag was not setting properly for Order object.
* Fixed: Order status pending in frontend-dashboard.
* Fixed: Subscription status update on order marked as paid recursively fixed.
* Improvement: Convert Order note date time zone to current users local time zone.
* Improvement: Remove order notes for related order (subscription api).
* Improvement: Update cart table layout.
* Fixed: Disallow subscription (cart item) qty update (not supported).
* Improvement: Allow disabling qty input field.
* Improvement: Allow 3rd party plugin/theme to filter cart item quantity form args.
* Fixed: Category editor bug while creating new category fixed.
* Fixed: Order detail date formatting updated.
* Fixed: Customer details Order Status UI fixed.
* Improvement: Improved membership (access-group) with subscription status transition.
* Improvement: Improved email template/settings editor state handling.
* Fixed: Show correct refund amount in email notification.
* Improvement: Refactor css for faster rendering.
* Improvement: Improved product filter widgets (archive sidebar widgets).
* Fixed: Attribute search, navigation, page blank and delete issue fixed.
* Fixed: WebHook list-table fixed.
* Fixed: Commission and payout created date issue fixed.
* Improvement: Allow 3rd party plugin to hook into integration runner instance.
* Improvement: Added subscription data in admin customer details page.
* Fixed: Product editor gallery button UI fixed.
* Fixed: Dashboard (analytics) total sales, total refund & gross sales fixed.
* Improvement: Updated placeholder image alt attribute.
* Improvement: Update top product list, include total net revenue.
* Fixed: Top product featured image.
* Improvement: Update top customer list, include customer avatar.
* Fixed: Top customer total spent value type.
* Fixed: Full refund invalid amount fixed.
* Improvement: Subscription table UI update.
* Fixed: Admin dashboard orders pagination.
* Fixed: Admin dashboard payments pagination.
* Fixed: Frontend dashboard order pagination.
* Fixed: Payment `can-refund` logic.
* Fixed: Frontend order list table status ui.
* Improvement: Convert time output to user's timezone.
* Fixed: Create Order page brake due to order by query error.
* Fixed: apply coupon undefined index error.
* Fixed: Checkout page `Email me with news and offers` checkbox spacing fixed.
* Fixed: Product sorting settings typo fixed.
* Improvement: Cart page UI revamped & improved.
* Improvement: Hide subscription price items from add item modal.
* Fixed: Fixed physical (subscription) product add to cart error (partially supported).
* Added: Display price on course-bundle page.
* Improvement: Remove course-bundle access when order status is unpaid.

= 1.0.2 - 28/05/2025 =

* Added: Subscription support for Academy LMS Course Purchase
* Fixed: Membership Access group issue

= 1.0.1 - 26/05/2025 =

* Fixed: Digital Product Auto Complete not worked issue
* Fixed: Admin Create Order Not worked issue
* Fixed: Membership access group table data formatting issue

= 1.0.0 - 21/05/2025 =

* Update: Revamped Admin Settings UI/UX & backend for better performance.
* Fixed: Fixed bugs reported by beta tester.

= 1.0.0-beta-6.2 - 16/05/2025 =

* Fixed: Academy LMS Course Bundle Integration issue
* Fixed: Cart item backward compatibility issue.

= 1.0.0-beta-6.1 - 15/05/2025 =

* Fixed: Fixed class not found (case-sensitive file name) on linux server.

= 1.0.0-beta-6 - 15/05/2025 =

* Added: Shipping feature
* Added: Subscription feature.
* Added: Saved payment method (card via Stripe addon).
* Added: Admin now can trash & permanently delete orders.
* Fixed: Cart meta data was not loading.
* Improvement: Added custom fee handler inside cart class for improving subscription setup fee calculation.
* Improvement: Cart metadata handling improved.
* Improvement: Price data handling.
* Improvement: Improved admin order api for better error handling.
* Improvement: Membership pricing table UI improved.
* Improvement: Added order payment status separately.
* Improvement: Added payment information (method icon, transaction-id, payment date time, etc.).
* Fixed: Shortcode output empty p tags (`<p></p>`) and extra br tags (`<br>`).
* Fixed: Direct checkout was not working on safari browser.
* Improvement: Orders can be now trashed & deleted.
* Fixed: Course enroll via integration hook.
* Fixed: Course enroll widget price selection UI.
* Fixed: Affiliate settings UI.
* Fixed: Affiliate commission update after checkout & payment status.

= 1.0.0-beta-5.1 - 28/04/2025 =

* Fixed: Error while migrating from older beta version fixed.
* Fixed: Fatal error from dashboard shortcode.
* Fixed: Dashboard content blank issue on non-fse theme.

= 1.0.0-beta-5 - 24/04/2025 =

* Improvement: Revamped Checkout JavaScript
* Added: `storeengine_apply_coupon_form` shortcode
* Added: `storeengine_cart_list_table` shortcode
* Added: `storeengine_checkout_form` shortcode
* Added: `storeengine_continue_shopping` shortcode
* Added: `storeengine_billing_address` shortcode
* Added: `storeengine_order_details` shortcode
* Added: `storeengine_order_downloads` shortcode
* Added: `storeengine_order_summary` shortcode
* Added: `storeengine_proceed-to-checkout` shortcode
* Added: `storeengine_payment_instruction` shortcode
* Fixed: Membership pricing page, added dynamic feature listing on pricing table.
* Fixed: Order editor customer select problem.
* Fixed: Order line item (product) title overflow.
* Fixed: Order list table customer details.
* Fixed: Fix notice during blank form submission.
* Fixed: Fix Affiliate registration form styles broken.
* Fixed: Fix textdomain notice issue.
* Fixed: Removed unused css & js.
* Improvement: Added support for Affiliate registration plugins tools (regenerate page, select different page, etc.).
* Fixed: Frontend Dashboard affiliate page 404 bug.
* Fixed: Affiliate registration page creation failed during addon activation.
* Improvement: Improved Affiliate registration page form handling.
* Updated: `storeengine_products` shortcode
* Updated: StoreEngine cart page
* Updated: StoreEngine checkout page
* Updated: StoreEngine thankyou page
* Removed: `storeengine_cart` shortcode
* Removed: `storeengine_checkout` shortcode
* Removed: `storeengine_thankyou` shortcode

= 1.0.0-beta-4.5 - 22/04/2025 =

* Fixed: Taxonomy terms archive template getting override by StoreEngine product archive template.
* Improvement: Added current theme info (WordPress Tab), OS info (Server Tab) in `Tools » Status` page.

= 1.0.0-beta-4 - 17/04/2025 =

* Improvement: Using `Redux Toolkit` to improve admin dashboard performance and workflow.
* Added: Integration with Academy LMS Tutor Booking.
* Added: Integration with Academy LMS Course Bundle.
* Fixed: Remove coupon from cart automatically when it’s in the trash or already been deleted.
* Fixed: Reset cart cookie after logout.
* Fixed: Membership pricing page 500 server side error.
* Fixed: Hide membership pricing if product is not published.
* Fixed: Delete product prices & integration from database after admin deletes a product.
* Fixed: Console error in admin order edit screen fixed.
* Improvement: Update translators comments & rebuild translation template (pot) file.
* Fixed: Integration errors aren't showing properly in product edit page.
* Fixed: translations loading too early.
* Fixed: Frontend ajax response nonce error notification.

= 1.0.0-beta-3 - 13/04/2025 =

* Fixed: Stripe sdk not loading before checkout script.
* Fixed: Internal payment API `401 unauthenticated` error.
* Fixed: Replaced static db prefixes with `$wpdb->prefix`.
* Fixed: Remove unique (complex) constraints from order & order item meta tables.
* Improvement: Added table index with `meta_key` (order & order item meta tables) for performance.
* Fixed: Membership admin-dashboard search input.
* Fixed: Membership editor blank after reload.
* Improvement: Removed unused codes.

= 1.0.0-beta-2 - 09/04/2025 =

* Improvement: Added order placed date (as metadata), separate from order created date.
* Improvement: Permalink settings added for customizing product permalink structure.
* Fixed: Order status while user purchase as guest.
* Fixed: Order created in update query.
* Fixed: Order date on thank-you page.
* Fixed: Admin product editor ui.
* Fixed: Deprecation error on product archive page if `max_page_num` is 1
* Fixed: Typo in admin dashboard
* Fixed: Textdomain mismatched.
* Fixed: Invalid order date in admin dashboard.
* Fixed: Fatal error on single product page if both WooCommerce & StoreEngine is active sametime.
* Fixed: Tax settings page in admin dashboard.
* Fixed: Mics. spacing & text color fixed.

= 1.0.0-beta-1 - 07/04/2025 =

* Initial Release
  * Academy LMS native integration,
  * Multi price model for product,
  * Multiple payment method:
    * PayPal,
    * Stripe,
    * Cash On Delivery,
    * Direct Bank Transfer,
    * Check Payment, etc.
  * Payment listing,
  * Full/Partial refunds,
  * Email Notification,
  * Tax,
  * Coupon,
  * Simple & Variable product,
  * Downloadable product,
  * Image gallery for product,
  * Variable product price adjustments,
  * Affiliate,
  * Membership,
  * Webhook,
  * ShortCodes, etc.
