Skip to content

v1.5.0 — Quote-only B2B store mode on all five platforms

Choose a tag to compare

@ackm04 ackm04 released this 24 Aug 18:48
· 6 commits to main since this release
b0b0b29

Turn any storefront into a B2B catalogue: Add to cart is withdrawn and customers request a quote instead. Now available on all five self-hosted platforms.

platform download version
WooCommerce tackquote.zip 1.4.0
Shopware 6 tack-shopware.zip 0.3.0
PrestaShop tack-prestashop.zip 1.3.0
OpenCart tack.ocmod.zip 1.3.0
Magento 2 tack-magento2.zip 1.3.0

On every platform you choose who it applies to — every customer, signed-out visitors only (so approved trade customers keep a normal cart), or specific customer groups — and administrators keep a working cart so you can test your own store while it is closed to customers.

It is enforced on the server, not by hiding a button

Hiding "Add to cart" with CSS is not a policy. On each platform the refusal happens in the platform's own cart code, so a hand-typed add-to-cart link, an API call, or a page served from cache is refused exactly like the button is:

  • WooCommerce — products become non-purchasable, which WC_Cart::add_to_cart() checks
  • Shopware — a decorated CartItemAddRoute throws before delegating; one decoration covers the Store API and both storefront controllers
  • PrestaShop — refused in the first statement of FrontController::init(), before any controller runs
  • OpenCart — the route is rewritten before dispatch, so core's cart controller is never constructed
  • Magento 2 — a before plugin on Quote::addProduct(), the @api method every add path funnels through

Carts that were already full

A cart filled before you switch the mode on is handled everywhere rather than left as a hole — WooCommerce and Shopware block it at checkout, PrestaShop and OpenCart refuse to grow or convert it. In every case the shopper can still empty their cart, so nobody is stranded with a basket they can neither order nor clear.

Read this before switching on

Magento: the REST, SOAP and GraphQL APIs are not covered. POST /rest/V1/guest-carts/{cartId}/items is anonymous, and Luma's own checkout places orders over webapi_rest. Quote-only is enforced for storefront traffic; a store whose API is exposed to untrusted callers is not fully closed by this release alone. Guarding those areas correctly needs work we would not guess at, so it is documented rather than faked.

Shopware Cloud is not covered. Enforcement lives in the plugin; the Shopware App ships no PHP, so a Cloud store running the app is not quote-only even if the plugin config suggests otherwise.

PrestaShop deliberately does not touch the native PS_CATALOG_MODE setting — it applies catalog mode for the current request only. That keeps per-group scoping possible, leaves the merchant's own setting alone, and means uninstalling never strands the shop in catalog mode. Order history and invoices stay reachable for customers who bought while the shop was still selling.

WooCommerce also fixes the broken Settings link

Clicking Settings on the Plugins screen previously failed with "Sorry, you are not allowed to access this page" — for administrators too. It was never a permissions problem: the link pointed at a page slug that two renames had moved. Fixed in 1.3.4 and included here.

If you are upgrading a manually installed WooCommerce 1.3.3, deactivate and delete it first — the folder changed, so WordPress treats this as a separate plugin. Your API key and settings survive.

Verification

342 automated checks across the five platforms, all passing against merged main: WooCommerce 25, PrestaShop 49, OpenCart 67, Shopware 65, Magento 136.

Each platform's guard was independently broken by hand to confirm the tests actually fail when enforcement is removed — a suite that stays green with the control deleted proves nothing.

Not verified: none of this has been exercised against a running storefront. Every platform is covered by unit tests plus reading the vendors' real source (WooCommerce 11.0.1, Shopware 6.6.10.22, PrestaShop 8.2, OpenCart 4.1.0.4, Magento 2.4.8-p5). Smoke-test on a staging store before switching a live shop to quote-only.

What's Changed

  • feat(shopware): quote-only (B2B catalog) mode, enforced on the server by @ackm04 in #10
  • feat(prestashop): quote-only (B2B catalog) mode, enforced on the server by @ackm04 in #11
  • feat(opencart): quote-only (B2B catalog) mode, enforced on the server by @ackm04 in #12
  • fix(shopware): bump plugin to 0.3.0 and add a changelog by @ackm04 in #13
  • feat(magento2): quote-only (B2B catalog) mode, enforced on the server by @ackm04 in #14

Full Changelog: v1.4.0...v1.5.0