From 0f9219d14cec6650c81b640cc92b873dbba07eb6 Mon Sep 17 00:00:00 2001 From: ee-extensions release bot Date: Tue, 23 Jun 2026 19:59:15 +0000 Subject: [PATCH] release eea-customer-credit 0.2.1 --- eea-customer-credit.json | 24 ++++++++++++++---- ....2.0.zip => eea-customer-credit-0.2.1.zip} | Bin 29422 -> 29481 bytes 2 files changed, 19 insertions(+), 5 deletions(-) rename eea-customer-credit/{eea-customer-credit-0.2.0.zip => eea-customer-credit-0.2.1.zip} (73%) diff --git a/eea-customer-credit.json b/eea-customer-credit.json index a33fb64..5de609b 100644 --- a/eea-customer-credit.json +++ b/eea-customer-credit.json @@ -1,16 +1,30 @@ { "name": "Event Espresso 4 Customer Credit", "slug": "eea-customer-credit", - "version": "0.2.0", - "download_url": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-customer-credit/eea-customer-credit-0.2.0.zip", + "version": "0.2.1", + "download_url": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-customer-credit/eea-customer-credit-0.2.1.zip", "homepage": "https://gitea.mulligan.casa/ee-extensions/eea-customer-credit", "requires": "6.4", "tested": "7.0", "requires_php": "8.1", + "last_updated": "2026-06-23 19:59:14", "icons": { "1x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-customer-credit/icon-128x128.png", - "2x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-customer-credit/icon-256x256.png", - "svg": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-customer-credit/icon.svg" + "2x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-customer-credit/icon-256x256.png" }, - "last_updated": "2026-06-23 04:43:46" + "author": "Mike Mulligan", + "author_homepage": "https://gitea.mulligan.casa/mmulligan", + "tags": [ + "event espresso", + "store credit", + "customer credit", + "payments", + "refunds" + ], + "sections": { + "description": "

Customer Credit gives every Event Espresso customer a real store-credit account balance and a first-class \"Customer Credit\" payment method that moves that balance in both directions:

\n\n

The balance is the audited side effect of recording a payment of this type, so credit always flows through Event Espresso's normal payment ledger.

\n

Built for correctness:

\n\n

Standalone, with an optional integration. Customer Credit works on a plain Event Espresso install through wp-admin. It also exposes a dependency-free filter seam so companion apps — such as Front of House for Event Espresso — can offer store-credit and pay-with-credit at the point of sale; the server enforces the same gates regardless of where the request originates. The integration is automatic when present and inert when absent.

\n

For full documentation, including the public filter contract and security model, see README.md included with the plugin.

", + "installation": "
    \n
  1. Install and activate Event Espresso.
  2. \n
  3. Upload this plugin to wp-content/plugins/ and activate it. Activation creates the balance and ledger tables.
  4. \n
  5. (Optional) If you use Front of House for Event Espresso, activate this plugin so its presence is detected and store-credit options appear at the station.
  6. \n
", + "faq": "

Does this require Front of House for Event Espresso?

\n

No. It is standalone on Event Espresso and is fully usable from wp-admin. Front of House is an optional consumer of its filter seam.

\n

Where is the balance stored?

\n

In two owned tables: a per-customer balance counter (the oversell guard target) and an append-only audit ledger. Money is stored in integer cents throughout. The counter must always equal the signed sum of the ledger.

\n

Can a customer go negative?

\n

No. A debit larger than the available balance is refused outright; it is never partially applied or clamped to zero.

", + "changelog": "

0.2.1
\n* Migrate to the shared release pipeline; richer View-details modal (readme.txt sections, tags). No functional change.

\n

0.2.0
\n* Added a color-coded plugin icon (delivered through the update channel) and declared WordPress 7.0 compatibility. No functional change.

\n

0.1.4
\n* Updates are now handled by the Manifest Updater plugin (via the standard \"Update URI\" header) instead of a bundled updater. No functional change.

\n

0.1.3
\n* Money tables now use the InnoDB engine; existing installs are migrated (the ledger's atomic debit + idempotency key need row-level locking and transactions).
\n* The Customer Credit payment method self-heals if EE orphan-deactivates it (reactivates on load + at use time), so a credit move never carries a dead PMD_ID.
\n* The public credit seam is fully fail-closed: every filter callback catches unexpected errors and returns a structured envelope (loud-logged) instead of fataling the request.

\n

0.1.2
\n* Docs: corrected stale plugin-name references (eea-checkin -> eea-foh). No code change.

\n

0.1.1
\n* Update channel + repository URLs moved to the ee-extensions org. No functional change.

\n

0.1.0
\n* Initial release: per-customer store-credit balances with an atomic, oversell-safe counter and an append-only audit ledger.
\n* Both-directions \"Customer Credit\" payment method (refund-into-credit and pay-with-credit).
\n* Email-keyed customer resolution and a read-only admin balances/ledger report.
\n* Dependency-free filter seam for optional point-of-sale consumers such as Front of House for Event Espresso.

" + } } diff --git a/eea-customer-credit/eea-customer-credit-0.2.0.zip b/eea-customer-credit/eea-customer-credit-0.2.1.zip similarity index 73% rename from eea-customer-credit/eea-customer-credit-0.2.0.zip rename to eea-customer-credit/eea-customer-credit-0.2.1.zip index 4ada7fd1ef04e1ea4cfda5a5187cb735e4e4b7c0..18201b38f17572981b81447b88be0abd3e2c4598 100644 GIT binary patch delta 4637 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 pq$J>C5DB=r5`BRm5^4tTXGmW1SDVK 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