v2.5.2 Latest version

Fix

Critical fix: on some installations, the Shopify connection had to be re-established manually every day. The default store kept two copies of its credentials and the automatic renewal only updated one of them; since a Shopify token is single-use, the forgotten copy expired. Both copies are now kept in step

Fix

Fix: each variant's label was being replaced by the parent product title on every update coming from Shopify, including a simple price or stock change. Labels are now recalculated as they are on creation, and the repair tool finds them again even once they have already been linked

Fix

Fix: on the webhooks screen, the save button had no effect — the list of tracked events could not be changed. A page structure defect prevented the form from being submitted

Fix

Fix: the product synchronisation screen and the scheduled task were not looking at the same scope. A product filed under a sub-category was synchronised without ever appearing on screen, which reported "no products". Both now share the same definition, and a new go-live date setting lets you exclude orders predating your move to Shopify

Fix

Fix: on multi-store installations, the synchronisation screen counters counted each product once per store it was present in. Displayed totals will therefore go down: they are now correct

Fix

Fix: the historical order import never reported where it stood — "completed" always stayed no, statistics stayed empty, and changing the start date midway had no effect. The import now reports its progress, and can no longer declare itself complete after a failure

Enhancement

Robustness improvement: a malformed request sent to the billing service now receives a clear error response instead of a server error, and no internal technical message is returned to the caller

v2.5.0

New

New: each synchronisation flow (products, stock, prices, orders) now has its own configurable direction — Dolibarr to Shopify, Shopify to Dolibarr, or both. You decide, flow by flow, which system is authoritative

New

New: a control API lets you trigger and monitor synchronisations from your own tools

Enhancement

The module is now available in five languages: French, English, German, Spanish and Italian

Fix

Critical fix: the shipment catch-up scheduled task no longer started at all, leaving no trace whatsoever in Dolibarr — only the server log recorded it. An automatic check now prevents this kind of silent failure from recurring

Fix

Fix: two other scheduled tasks failed for a related reason, including the webhook health check — which broke down precisely when recording an incident, that is, when it was most needed

Fix

Fix: products with variants produced around thirty warnings on every image synchronisation

v2.4.8

Fix

Critical fix: viewing one page could disable the buttons on another. The module's internal calls rotated the session security token, and the Health page triggers one per store as soon as it opens: on a three-store installation, merely opening that page was enough for clicks on the Webhooks page to be rejected, silently

Fix

Fix: thirty actions across nine administration pages could be rejected with no message and no trace when the security token was refused — including linking a licence number to a store, which could therefore fail without any indication. All of them now display an explicit error

Fix

Fix: a synchronisation could switch off the webhooks of other stores

v2.4.7

Fix

Fix: on the webhooks screen, "Configuration saved" was displayed without the state actually changing. Display and saving were not looking at the same database row: you disabled a webhook, the page confirmed, and nothing moved

Fix

Fix: disabling now removes every relevant subscription rather than just the first one found — a twin row can no longer bring back a webhook you have just removed. Enabling reuses an existing subscription instead of creating another one

Fix

Inconsistencies inherited from installations predating multi-store support are corrected along the way: a row left "active" with no actual subscription is reset

v2.4.6

Fix

Fix: with several stores connected, the Webhooks page displayed the selected store but saved against another one — webhooks could not be disabled and the Save button appeared to do nothing. Display and saving now share the same per-store filter, and every error is shown in full instead of an empty message

Fix

Critical fix: on hardened installations (anti-CSRF token renewed on every page), every admin action of the module was silently rejected — including the setup wizard. Token checking now matches Dolibarr core, and a rejection is always reported on screen

Enhancement

Robustness: a database incident while saving webhooks no longer produces a blank page — the error is shown along with the webhook concerned, and the remaining ones are still processed

v2.4.5

Enhancement

Stock push to Shopify is now asynchronous: validating an invoice returns immediately, even when Shopify is slow or unreachable (no more multi-minute validations). A scheduled task pushes stock every 5 minutes, merging movements and retrying automatically after a failure

Fix

Critical fix: on Dolibarr 18 to 22, connecting a store returned an HTTP 500 error on the way back from Shopify and the store was lost — the module relied on a core feature only introduced in late 2025

Fix

Fix: on strict SQL mode hosting, webhooks were never registered — the timestamps sent by Shopify were rejected by the database. They are now converted and stored in universal time

New

New "Discount repair" tool: repairs orders imported before 2.2.9 whose percentage discount was under-valued — preview before applying, drafts only, audit trail preserved

Enhancement

Store connection: the "Failed to save credentials" error now states its actual cause, and an incomplete database is reported with the steps to fix it (Diagnostics and Health pages)

v2.4.4

Fix

Fix: variant products imported from Shopify did not create a real Dolibarr variant — the parent/variant link stayed invisible in the interface, and the variant label could remain identical to the parent product's

New

New "Repair variants" button: retroactively links catalogues already imported, with no re-import and no duplicates, in batches and safe to run again

v2.4.3

Fix

Fix: importing products with variants failed when the same reference (SKU) is shared across several Shopify products — the module now reuses the existing product instead of failing, and shows the full error reason for any other issue

Fix

Fix: order lines coming from bundle/pack apps ("build your own pack") were not created in Dolibarr — billable products grouped in a bundle are now imported correctly (free 0-euro components are still ignored)

v2.4.2

Fix

Critical fix: Dolibarr stock was never pushed to Shopify (restocking, in-house production, manual corrections) — Shopify stock drifted with each sale, down to false negative values. Every Dolibarr stock movement is now synchronized to Shopify in real time (absolute value, never negative)

New

New "Realign stock to Shopify" button: pushes the Dolibarr stock of all mapped products at once — immediately repairs Shopify values skewed in the past, without waiting for each product's next movement

Enhancement

Multi-store: stock is pushed to every store where the product is mapped, using each store's own credentials

Enhancement

Observability: every stock push is traced in the action log, and the "last realignment" state (date, products, errors) is shown in the admin

v2.4.1

Security

Shopify 2026 compliance: native support for expiring OAuth tokens (60-minute access token + refresh token), required by Shopify by January 1, 2027 — transparent automatic refresh, already-connected stores migrate in one click via the "Reconnect" button

New

New Shopify Collections API 2026-07: collections created with the new model (Shopify rollout from July 1, 2026) are now visible and synchronized — no more silent disappearance

Fix

Critical fix: more reliable product/stock sync — a disabled variant sometimes remained visible on Shopify, and diverging stock levels (sometimes negative) were no longer silently corrected; errors are now logged and surfaced

Enhancement

Instant diagnostics: per-store connection and health tests now run in the background, without slowing down the page

Enhancement

More reliable telemetry: the module now reports its real domain and Dolibarr version on every channel, eliminating false pending installations

v2.4.0

New

Multi-store: several Shopify stores configurable on a single Dolibarr installation, with license, settings and navigation specific to each store (accounting always stays unified)

New

Detailed per-store health diagnostics: connection and webhooks, license, sync counters — each store is checked independently

Enhancement

Larger store selector and redesigned context bar across all multi-store admin pages

Fix

Critical fix: a shipment left in draft status after a failure (warehouse/stock) was never caught up automatically — it is now validated and closed by the periodic catch-up job

Fix

Display fix: incorrectly encoded accented characters (double encoding) fixed throughout the admin interface

Fix

Fix: a store's license status could get stuck on "unknown" — verification is now reliable and never downgrades a default store

v2.3.2

Fix

Critical fix: some orders were no longer fetched from Shopify (regression introduced in 2.3.0) — order synchronization works normally again

Fix

Fix: webhooks registered on an outdated Shopify API version are now automatically re-registered during health checks, for each store

Fix

Fix: module activation blocked (blank page) on multi-store installations

Security

Security: connecting a Shopify store can no longer be done by manually entering a token — only through Shopify's secure OAuth flow

v2.3.0

New

Multi-store (foundations): several Shopify stores managed from a single Dolibarr installation with unified accounting — the existing store is migrated automatically, with no service interruption

New

New store administration interface: add, connect, manage webhooks and license, per store

Security

Security: Shopify connections are now protected with cryptographic keys (OAuth RSA) instead of a shared secret

New

New support tools: export a full order's JSON to speed up troubleshooting

New

Shipping and billing addresses are now displayed directly on the order record

Security

Security: strengthened CSRF protection on sensitive actions (configuration, license)

v2.2.9

Fix

Fix: percentage discounts undervalued — the discount was computed on the tax-excluded base then divided a second time by (1 + VAT) as if it were a tax-included amount. Orders with a percentage promo code now match the exact amount shown by Shopify (e.g. 5% = −€151.20 incl. tax, not −€126)

Enhancement

Documentation: table of the 4 Dolibarr stock decrease rules (order, invoice, shipment, shipment closing) and recommendation for mixed TakePOS counter + Shopify shops

v2.2.8

Fix

Critical fix: stock not decremented when importing Shopify orders — the warehouse was not passed at invoice validation. All 4 Dolibarr stock decrease rules (order, invoice, shipment, shipment closing) are now covered

Fix

Fix: the v2.2.4 permissions migration (module ID change) now runs automatically on activation — user rights are preserved when upgrading from a version older than 2.2.4

Fix

Webhooks fix: wrong callback URL (missing /custom/ path) when no explicit configuration was set, and the events retention days setting is now honored by the purge

Enhancement

Robustness: explicit log warnings when no warehouse can be resolved, and safeguards against fatal errors if the outbound Dolibarr → Shopify sync (planned for v2.4.x) is enabled prematurely

v2.2.7

Fix

Critical fix: document API calls returning 404 on subdirectory installations — a leading slash was overriding the subdirectory path (issue #288)

Fix

All document access points (product and category images) now correctly honour the installation subdirectory

Fix

Fixes Dolibarr installations running in a subdirectory (version 2.2.6 already worked around this via the local SQL fallback)

v2.2.6

Fix

Critical fix: resilient product image sync — automatic SQL fallback (llx_ecm_files) when the Dolibarr REST API /documents endpoint is unreachable (404, timeout, HTML in body). Product images now correctly synced to Shopify even on restrictive hosting (issue #286)

Fix

Critical fix: multi-tenant entity filter added to image SQL query — prevents exposing images from other Dolibarr entities in multi-company installations

Fix

Fix: image sort key mismatch (filename vs relativename) — sort by position now actually works

Enhancement

Image instance cache reduces 3 redundant SQL+API calls per product to 1 during sync

v2.2.5

Fix

Critical fix: verifToken() function not loaded on some PHP-FPM stacks, blocking Shopify OAuth — 4 module files now explicitly include the compatibility.lib.php polyfill

v2.2.4

Fix

Critical fix: Dolibarr module ID migration (436950 → 351003, official range allocated to Association P'tite Tête) — automatic SQL migration preserves existing permissions

v2.2.3

Fix

Critical fix: admin pages (setup, wizard, product sync) referenced a non-existent CSS file — CSS loading and page display now correct

v2.2.2

New

Shopify bundle/gift line handling (USH Bundles, EasyGift, etc.) — 3 configurable modes: ignore, import as comment, import as standard line

Fix

Critical fix: variant stock sync now runs every hour instead of 24h

Fix

Fixed webhook products/delete — invalid SQL query corrected

Fix

Critical fix: no more duplicate products created on Shopify after purging a product with variants

Fix

Improved anti-loop: inter-process sync/webhook protection to prevent deadlocks

Fix

Diagnostic false positive fixed: API Documents 404 on non-existent test product is now reported as warning instead of error

Enhancement

Enhanced diagnostic: old image path detection + server loopback test

Enhancement

Dynamic versions everywhere (no more hardcoded versions in UI)

Enhancement

Website admin: new 'SQL Migrations' section that lists numbered SQL scripts and allows one-click execution with automatic tracking

v2.2.1

New

Proactive email alert system (webhook errors + system health)

New

Smart per-type throttling with configurable cooldown

Enhancement

Complete Shopify API 2026-07 audit — anticipate breaking changes

Enhancement

PHPStan level 6 + test coverage 35% → 71%

Enhancement

Module version centralization (no more hardcoded versions)

Fix

Removed ~1,974 lines of dead code

Fix

Dolibarr 23 compatibility — systematic audit and corrections

v2.2.0

New

Real-time webhooks Shopify → Dolibarr (orders, shipments, payments)

New

Guided 6-step configuration wizard

New

Module health monitoring dashboard

New

2-level shipping mapping (title + actual carrier)

New

Simplified interface: 3 tabs instead of 5

New

Automatic catchup of missed orders (safety net CRON)

New

Configurable auto-creation of invoices, payments and shipments

Enhancement

Complete order configuration in wizard

Enhancement

Automatic webhook and CRON activation at wizard completion

v2.1.8

New

Multi-platform integrated support ticket system

New

Complete website redesign with MVC architecture

New

Degraded mode for expired licenses

New

Centralized internationalization with Twig

New

Bidirectional Shopify webhooks + real-time Dolibarr triggers

v2.1.7

New

Shopify Billing API - Dual-channel architecture

New

Complete web admin interface

Fix

OAuth license link fix

Fix

Discounts not applied on services

Enhancement

Configuration wizard improvements

v2.1.6

New

Complete security audit - 86 issues fixed

New

Bidirectional Shopify → Dolibarr import

Security

CSRF protection on 15 files

Security

Security score 6/10 → 9/10