Plugin root
assets
1 month ago
includes
1 month ago
templates
1 month ago
vendor
1 month ago
vendor_prefixed
1 month ago
CHANGELOG.md
8.8 KB
3 months ago
LICENSE
34.3 KB
3 years ago
SECURITY.md
2.1 KB
4 months ago
readme.txt
33.7 KB
1 month ago
uninstall.php
1.2 KB
3 months ago
woocommerce-pos.php
7.3 KB
1 month ago
CHANGELOG.md in WCPOS – Point of Sale (POS) plugin for WooCommerce 1.9.17, at CHANGELOG.md
| 1 | # WCPOS 1.8.15 — Changelog Draft |
| 2 | |
| 3 | > **The biggest WCPOS release ever.** Almost three months of work, ~330 substantive PRs. Highlights below. |
| 4 | |
| 5 | ## Unreleased |
| 6 | |
| 7 | - Added: anonymous analytics identifier (`wcpos_anon_id`) for the admin welcome screen — random UUID, no store data, deleted on uninstall, manageable via `wp wcpos anon-id rotate|delete`. Landing data contract `schema_version` bumped to 2. |
| 8 | - Added: `woocommerce_pos_consent_copy` filter so the tracking-consent prompt copy can be overridden. |
| 9 | - Added: `woocommerce_pos_get_anon_id()` accessor (used by the Pro licence-activation request). |
| 10 | |
| 11 | --- |
| 12 | |
| 13 | ## 🧾 Receipt Templates — Complete Rebuild |
| 14 | |
| 15 | This release introduces an entirely new receipt template system. It started in early March as a "receipt data + multi-engine rendering" foundation and grew into a full template platform. |
| 16 | |
| 17 | - **New Template Gallery** with starter templates for every common use case — thermal (58mm, 80mm, narrow), A4 receipts, invoices, quotes, packing slips, gift receipts, kitchen tickets, and right-to-left languages (Arabic, Hebrew, Persian, Urdu). |
| 18 | - **New Template Editor** built on CodeMirror 6 with a field picker, live preview, paper-size + engine locking, and a Sample/Order preview pill toggle. |
| 19 | - **Multi-engine rendering** — HTML, Logicless (Mustache), PHP, and Thermal engines. Each template can declare which engine it uses; the active template is resolved per-store and per-order. |
| 20 | - **Receipt Data v1 contract** — a stable, branchable data shape that custom templates can rely on: refunds, transaction IDs, line tax labels, per-row meta, fiscal/refund context, customer notes, store address composed via `WC_Countries`, structured `store.tax_ids[]`, customer tax-id labels, localized `status_label`, and a render-time `order.printed` timestamp. |
| 21 | - **Store-aware presentation** — receipts now respect store currency, locale, timezone, tax display setting, price presentation, opening hours, and site logo, instead of falling back to global WooCommerce options. |
| 22 | - **Refund-aware totals** — refunded orders keep totals positive and add Refunded/Net rows so receipts stay readable. |
| 23 | - **Discounts as first-class data** — each coupon emits its own discount row, with `discounts[].code` as the canonical reference and `discounts[].label` taking the coupon description when available. |
| 24 | - **Tax-summary guard** so templates correctly distinguish tax-inclusive vs tax-exclusive stores, and summaries use real post-discount taxable bases instead of reverse-calculating from rounded tax. |
| 25 | - **Black-and-white safe printing** — light tints actually print, dark reverse-out fills removed, thermal receipts made 42-column-safe with star-column support. |
| 26 | - **PHP gallery catalogue registry** (#1035) replaces JSON tracking for shipped templates, keeping the gallery cleaner and easier to extend. |
| 27 | - **Template-management admin redesign** — unified Templates table with sidebar filters, drag-and-drop ordering, inactive-but-visible status, and a kebab menu replacing the old card "Settings" link. |
| 28 | |
| 29 | ## 🪪 Customer & Store Tax IDs (new feature) |
| 30 | |
| 31 | - **Customer tax IDs** end-to-end — reader, writer, REST exposure, persistence (#850, #863). |
| 32 | - **Store Tax IDs settings UI** with dedicated REST endpoints and country defaults (#851, #859, #872, #883). |
| 33 | - **Consolidation** — Tax IDs folded into General → Customers and into the Store Details block (#860, #924, #942). |
| 34 | - **Structured `store.tax_ids[]`** exposed on receipts with a derived `tax_id` scalar for legacy templates (#853, #874, #875). |
| 35 | |
| 36 | ## 📈 Tracking Consent & Analytics (new feature) |
| 37 | |
| 38 | - **GDPR-friendly consent prompt** with a two-tier landing page (#787, #788, #790, #792, #801, #804). |
| 39 | - **PostHog analytics foundation** with consent gating; session recording is explicitly disabled (#795, #799). |
| 40 | - **Reusable `@wcpos/consent` package** so the same consent flow can be embedded elsewhere (#822, #824, #829). |
| 41 | - **Landing Profile service** for personalized A/B testing (#781, #784, #797). |
| 42 | - **Upgrade-funnel instrumentation** (#798). |
| 43 | |
| 44 | ## ⚙️ Settings Overhaul |
| 45 | |
| 46 | - **General tab redesign** with a new Callout primitive (#864). |
| 47 | - **Store Details block** extracted with a Pro override slot (#868, #877, #1015). |
| 48 | - **General settings grouped** into Products and Customers sections (#733, #740). |
| 49 | - **Snackbar improvements** — pinned to viewport, aligned to content area (#867, #878). |
| 50 | |
| 51 | ## 🧱 Shared UI Package (`@wcpos/ui`) |
| 52 | |
| 53 | Many components extracted into a shared workspace package and reused across settings, templates, and consent: |
| 54 | |
| 55 | - Button (with ghost-destructive variant, form primitives) (#782, #783, #802) |
| 56 | - Table (#879), Combobox (#880), searchable CountrySelect (#871) |
| 57 | - FormSection / FormRow with `headerRight` and divider props (#796, #800) |
| 58 | - Toggle hardened for hosts without Tailwind preflight (#841, #842, #843) |
| 59 | - Skeleton loading states (#703, #704) |
| 60 | - Filter sidebar with horizontal rule (#998) |
| 61 | - Shared `@wcpos/thermal-utils` workspace package (#730) |
| 62 | |
| 63 | ## 🧩 Extensions Catalog |
| 64 | |
| 65 | - **Redesigned cards** with body/footer layout, update badges, has-update flag, responsive grid, smaller buttons (#580, #778, #779, #780, #808, #809). |
| 66 | - **Auto-update field** exposed in the catalog (#566). |
| 67 | - **Extension settings and logs** now surface in POS admin (#821). |
| 68 | |
| 69 | ## 📋 Sessions & Logs |
| 70 | |
| 71 | - **Sessions page** redesigned as master/detail with a shared Avatar component (#826). |
| 72 | - **Logs page** redesigned with grouped-by-day view, copy boxes, and a new Chip primitive (#825). |
| 73 | |
| 74 | ## 💳 Payments |
| 75 | |
| 76 | - **Per-gateway order status settings** — Cash and Card gateways now have their own configurable post-checkout statuses (#564). |
| 77 | - **Refund support** added to POS Cash and Card gateways (#632). |
| 78 | - **POS payment gateway contract** — gateway catalog, bootstrap, and checkout coverage (#828, #830). |
| 79 | |
| 80 | ## 🐞 Major Bug Fixes |
| 81 | |
| 82 | ### POS order reliability |
| 83 | - Fixed `WC_Data_Exception` crash on misc product duplicate SKU (#573). |
| 84 | - Prevent line-item tax overrides from mutating products (#563). |
| 85 | - Cashier capabilities synced on plugin update, stripped on deactivation (#623, #768). |
| 86 | - POS capability checks added to checkout routes; cashier roles included in auth payloads (#624, #806). |
| 87 | - Cashier can now update orders with HPOS enabled (#662). |
| 88 | - New misc product meta fields handled: category, virtual, downloadable (#690). |
| 89 | - Variable-product empty sale prices filtered (#692). |
| 90 | - Optional stock restore when POS orders are deleted, with admin toggle (#701, #732). |
| 91 | - Line-item image IDs cast to integer in order responses (#756). |
| 92 | - Client-provided order creation date honored (#915). |
| 93 | - Historical store lookup works for trashed stores (#940). |
| 94 | - Receipt permission error code corrected (#1014). |
| 95 | |
| 96 | ### Coupon calculations (multi-round WooCommerce interaction fixes) |
| 97 | - Strip coupon line IDs to prevent readonly errors on order update (#613). |
| 98 | - Deactivate subtotal filter before `calculate_totals()` (#674). |
| 99 | - Preserve subtotals during coupon recalculation (WC compound-tax bug) (#675, #677, #684). |
| 100 | - Use POS price directly as subtotal, remove fragile filter mechanism (#686). |
| 101 | - Clean up temporary cache entries after coupon validation (#693). |
| 102 | - Coupon include/exclude sync filters fixed (#840). |
| 103 | - Coupon REST API: shipped (#518), moved to Pro (#588), then restored as a standard controller (#766). |
| 104 | |
| 105 | ### Auth & compatibility |
| 106 | - Prevent third-party JWT plugins from blocking WCPOS Bearer token auth (#744). |
| 107 | - Fix `require()` in IIFE bundle from Vite 8 CJS interop (#659, #664). |
| 108 | - Analytics tsconfig updated for TypeScript 6 (#708). |
| 109 | |
| 110 | ### Memory & performance |
| 111 | - Log-spam memory exhaustion from i18n thundering herd resolved (#702). |
| 112 | - OPFS worker added for RxDB 17 storage migration (#739, #897). |
| 113 | |
| 114 | ### Localization |
| 115 | - Translation write-location fallback and failure caching (#567). |
| 116 | - jsDelivr CDN trailing-slash redirect-loop fixed (#931). |
| 117 | - `TRANSLATION_VERSION` used for JS translation URLs (#707). |
| 118 | - `loadPath` interpolation conflict fixed (#729). |
| 119 | - Receipt dates and timestamps respect store timezone and locale (#666, #919, #937, #1029). |
| 120 | - Receipt gallery, template editor, Combobox, CountrySelect, and Skeleton strings all localized (#669, #681, #903, #925, #927). |
| 121 | |
| 122 | ## 🔧 Behind the Scenes |
| 123 | |
| 124 | - **CI/build** — root build script, simpler workflows, dynamic test matrix with RC/beta auto-detection, merge gate for bot PRs, hook-docs gh-pages deploy, release-draft idempotency, GitHub App tokens for POT and update-matrix automation, Dependabot auto-merge. |
| 125 | - **Dependencies** — Vite 8, TypeScript 6, RxDB 17, codecov-action 6, many action upgrades; pnpm supply-chain settings tightened. |
| 126 | - **Wiki** — moved to a `wcpos/wiki` submodule; deprecated `.kb/` folder removed (#759, #760). |
| 127 | - **Security** — `TemplatesManager::save_raw_post_content` hardened with structural guards (#984). |
| 128 | - **Docs** — `_woocommerce_pos_data` explainer, web bundle architecture KB article (#672, #753). |
| 129 | |
| 130 | --- |
| 131 | |
| 132 | **Stats:** 329 substantive PRs since v1.8.14, plus 60 routine translation/dependency-bot PRs folded into "Behind the Scenes". |
| 133 |