From b034fd5dad5b71ecc12ce797f13a63f7ef53be57 Mon Sep 17 00:00:00 2001 From: ee-extensions release bot Date: Tue, 23 Jun 2026 19:59:17 +0000 Subject: [PATCH] release eea-registration-variations 0.3.1 --- eea-registration-variations.json | 24 ++++++++++++++---- ... => eea-registration-variations-0.3.1.zip} | Bin 113182 -> 113232 bytes 2 files changed, 19 insertions(+), 5 deletions(-) rename eea-registration-variations/{eea-registration-variations-0.3.0.zip => eea-registration-variations-0.3.1.zip} (87%) diff --git a/eea-registration-variations.json b/eea-registration-variations.json index 708b210..0941a10 100644 --- a/eea-registration-variations.json +++ b/eea-registration-variations.json @@ -1,16 +1,30 @@ { "name": "Event Espresso 4 Registration Variations", "slug": "eea-registration-variations", - "version": "0.3.0", - "download_url": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-registration-variations/eea-registration-variations-0.3.0.zip", + "version": "0.3.1", + "download_url": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-registration-variations/eea-registration-variations-0.3.1.zip", "homepage": "https://gitea.mulligan.casa/ee-extensions/eea-registration-variations", "requires": "6.4", "tested": "7.0", "requires_php": "8.1", + "last_updated": "2026-06-23 19:59:17", "icons": { "1x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-registration-variations/icon-128x128.png", - "2x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-registration-variations/icon-256x256.png", - "svg": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-registration-variations/icon.svg" + "2x": "https://gitea.mulligan.casa/ee-extensions/foh-updates/raw/branch/main/eea-registration-variations/icon-256x256.png" }, - "last_updated": "2026-06-23 04:43:47" + "author": "Mike Mulligan", + "author_homepage": "https://gitea.mulligan.casa/mmulligan", + "tags": [ + "event espresso", + "variations", + "inventory", + "merchandise", + "registration" + ], + "sections": { + "description": "

Registration Variations turns an Event Espresso ticket into a product with selectable options — sizes, colors, meal plans — each carrying its own remaining-stock inventory, price modifier, and SKU. It is the practical way to sell ticket-attached merchandise and meal choices without creating a separate ticket for every combination.

\n

What it adds:

\n\n

Front-of-house point of sale (optional). When Front of House for Event Espresso is installed, a ticket with variations opens a \"Sell options\" modal at the station with per-variation quantity steppers, fed through that app's generic payload contract. The integration is feature-detected and inert when the app is absent.

\n

Self-contained on Event Espresso. All of the variation model — definitions, inventory, pricing, generated questions, and the wp-admin exchange/refund flow — works on a plain Event Espresso install through wp-admin and the standard checkout. Front of House is purely an optional consumer.

\n

For full documentation and design notes, see the docs/ directory 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 per-variation stock table.
  4. \n
  5. Open a ticket in the classic ticket editor and define its variations in the advanced details section.
  6. \n
  7. (Optional) If you use Front of House for Event Espresso, the station automatically gains a variation-aware \"Sell options\" modal.
  8. \n
", + "faq": "

Do I need Front of House for Event Espresso?

\n

No. The variation model, inventory, pricing, generated questions, and admin exchange/refund all work on plain Event Espresso. Front of House adds a point-of-sale selling modal when present.

\n

Which ticket editor is supported?

\n

The variation definitions are edited in the classic ticket editor's advanced details.

\n

How is pricing handled?

\n

Each variation carries a price modifier (a positive or negative delta) on the ticket's base price. The charged amount composes with Event Espresso's native surcharges and discounts and is shown as one combined line item.

\n

Can two people buy the last unit at the same time?

\n

No. Remaining stock is decremented through an atomic, conditional update, so concurrent registrations cannot oversell a variation.

", + "changelog": "

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

\n

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

\n

0.2.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.2.3
\n* Security: escape variation label/SKU at the public option-render seam and sanitize them on save (stored-XSS fix).
\n* Fix: SPCO (vanilla EE checkout) purchases of a variation ticket now decrement the variation counter — the chosen key is seeded from the saved answer before the lifecycle commit, closing an oversell gap.
\n* Fix: admin exchange is now retry-safe after a partial failure (resume-aware reprice + idempotent refund), and never double-refunds on retry.
\n* Fix: admin exchange validates the target variation server-side (same ticket, live non-archived key) before running, with a clear message instead of a raw exception.
\n* Fix: fail closed on a shared multi-unit sale line (mirrors the reverse/exchange guards) — prevents a silent mischarge.

\n

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

\n

0.2.1
\n* Variation sets per ticket with per-variation inventory, price modifier, and SKU.
\n* Oversell-safe atomic stock counter bound to the registration status lifecycle.
\n* Auto-generated, decorated selection question with server-side required-selection enforcement.
\n* Composed base-plus-modifier pricing as a single combined line item.
\n* wp-admin exchange/refund flow and a variation sales report.
\n* Optional Front of House \"Sell options\" modal with per-variation quantity steppers.

" + } } diff --git a/eea-registration-variations/eea-registration-variations-0.3.0.zip b/eea-registration-variations/eea-registration-variations-0.3.1.zip similarity index 87% rename from eea-registration-variations/eea-registration-variations-0.3.0.zip rename to eea-registration-variations/eea-registration-variations-0.3.1.zip index 6deb22287f305c9181e348f2c680480161468cf0..35cfc3b464e4b5f8156dcf02633f68c16836ee67 100644 GIT binary patch delta 7327 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