Beskrivelse
Dette er den strukturerede genopbygning af det tidligere "Woo WA Event Form (Lite)". Det bevarer al funktionalitet, men bruger et rent PSR-4-layout med en lille bootstrap.
Frontend:
- Indsætter deltager-miniformularer (én række pr. antal) under hver billettype
- CPT
wwef_attendee(ét indlæg pr. deltager) - Begivenheds-postmeta
_wwef_attendees(struktureret array sorteret efter den synlige billetbetegnelse)
- Ved checkout og ved Mage-deltagergem opdateres eksisterende
mep_events_attendeesfor samme ordre + begivenhed, matchet via billettype (FIFO inden for hver type). Opretter ikke Mage-indlæg.
GET /wp-json/wwef/v1/attendees?event_id=123Ændringslog
1.0.73 (2026-05-30)
- New: daily WP-Cron scan (
wwef_daily_scan) that runs at 23:59 site-time and emails the site admin if any of today's completed event orders have problems (missing WWEF data, missing Mage attendee posts, or Mage posts missingea_ticket_no). The email lists each affected order with direct links to the order edit screen, the per-order Repair tool, and the Scan Orders page filtered to today. Idempotent (won't run twice the same day even if cron triggers cluster). Unschedules itself on plugin deactivation. Recipient address can be overridden via thewwef_daily_scan_email_tofilter.
1.0.72 (2026-05-30)
- UI: removed the "WWEF Repair Order" entry from the Mage Events submenu. The page is still routable and reachable from the Woo order screen and from the Scan Orders page — just no longer duplicated in the menu.
1.0.71 (2026-05-30)
- Scan Orders: only completed Woo orders are inspected now. Pending/on-hold/cancelled orders are skipped — we only care about paid members whose ticket data is not correctly registered.
1.0.70 (2026-05-30)
- New: "WWEF Scan Orders" admin page (under Mage Events menu) that scans Woo orders containing Mage event attendee data and lists those with detectable problems: WWEF posts without Mage posts (e.g. broken subscription-callback orders like #17449), Mage posts without WWEF posts, duplicate WWEF posts, or Mage posts missing
ea_ticket_no. Filter by date range + cap inspected orders. Each problem row links straight to the per-order Repair tool.
1.0.69 (2026-05-30)
- Repair tool: can now create missing
mep_events_attendeesposts for orders where Mage's own creation was skipped (e.g. WAMP subscription-callback orders such as #17449). Uses the standard ticket number format{user_id}{order_id}{event_id}{post_id}and cross-links both sides (_mage_attendee_idon WWEF,_wwef_attendee_idon Mage). Refuses to run if anymep_events_attendeesalready exist for the order to avoid double-tickets. After creating the Mage posts, bulk-send produces complete PDFs (with QR + ticket number) without any other intervention.
1.0.68 (2026-05-30)
- UI: "Order attendees" box on the Woo order edit screen now also shows for Mage event orders that have no linked rows yet, and surfaces a clear problem panel with a one-click "Open repair tool" button when issues are detected (missing WWEF posts, duplicate WWEF posts, missing mep_events_attendees, or mep posts without ea_ticket_no). The panel auto-expands when a problem is detected.
- UI: Repair tool now shows a "Back to order" link when opened from the order edit screen.
1.0.67 (2026-05-29)
- Hardening:
H::sync_wwef_attendee_posts()is now strictly idempotent. It fetches all existing wwef_attendee posts for the (event, order, ticket) slot once, then resolves each incoming row against that set in PHP (loose normalized identity match, then positional, then defensive cap to never insert when an unused existing post is available for the same slot). This prevents the duplicate-attendee inserts (e.g. 17450/17451 on order 17449) that could be triggered by QuickPay-callback re-runningsave_post_shop_order. - Hardening:
on_order_post_savedis now gated by a new_wwef_bind_done_atorder-meta stamp. Once attendees have been successfully bound for an order, later status changes (pending → on-hold → completed, etc.) no longer re-trigger the bind/sync.on_new_order_bind_and_buildsets the stamp as part of its normal completion. - Cleanup: removed noisy
error_log()calls insidesync_wwef_attendee_posts(). - New: "WWEF Repair Order" admin page (under Mage Events menu) to inspect an order's WWEF + Mage attendee state and dedupe any duplicate wwef_attendee posts. Read-only for
mep_events_attendees— we never synthesize Mage data; missing Mage attendees must be created via Mage's own UI.
1.0.66 (2026-05-29)
- Cleanup: removed dead
src/Legacy/WWEF_Attendee_Fields_Lite.php(namespaceWWEF_Legacy, never autoloaded, double<?phpopening tag would prevent it from parsing). Replaced years ago byWWEF\Woo\Orderswhich is the only class that actually registers the order/attendee hooks. - Cleanup: removed empty
includes/folder.
1.0.65 (2026-05-27)
- Hardening: bulk-send refuses to send tickets for orders that do not have a complete Mage attendee record (ea_ticket_no required). No more degraded PDFs without QR/ticket number.
- Preview modal: shows a clear red warning listing affected order numbers when an order lacks complete ticket data.
- Notification: when an order is dropped for missing ticket data, the customer (billing_email) receives a neutral "we are processing your ticket" message instead of the broken PDF, and the site admin gets a heads-up mail with the order + attendee details. Mails are sent at most once per order (gated by
_wwef_incomplete_notified_at).
1.0.64 (2026-05-22)
- Compatibility: Tested with WordPress 7.0 and WooCommerce 10.7.
1.0.63
- Compat: Tested with WordPress 7.0 and WooCommerce 10.7.
1.0.62
- New: Bulk ticket email modal pre-computes the exact number of mails to send (after de-duplication by email) and shows e.g. "Modtagere: 18 (4 deltagere udelades på grund af dublet e-mail)" before sending starts. Progress bar denominator now matches the actual number sent, so the modal no longer hangs at <100%.
- Change: Recipient email lookup uses an explicit fallback chain: WAM members table by
MemberNo→ attendee’s ownwwef_email→ order billing e-mail. Same e-mail still only receives one ticket.
1.0.61
- Fix: Email resolved 100% from WAM members table via memberno, fallback to order billing email. Name from post_title.
- Fix: Dedup per email address — same email never receives more than one mail per send.
- Fix: Bulk send requires explicit checkbox selection — no more send-all-if-none-selected.
- New: Progress log shows email source [WAM#memberno] or [billing] and skipped duplicate count.
1.0.60
- Change: Bulk send requires explicit selection — removed send-all-if-none-selected behavior.
- New: Progress log shows email source per attendee: [WAM#memberno], [wwef_email], or [billing].
1.0.59
- Debug: Added error_log for each attendee in bulk send showing memberno, WAM email, wwef_email, and resolved email.
1.0.58
- Fix: Removed dedup from bulk send — each attendee now gets their own individual email (build_replacements already scopes content per attendee via mep_attendee_id). Fixes progress bar reaching 100%.
1.0.57
- New: Bulk email modal has optional intro text field. Text is shown bold at the top of each email via {intro} placeholder.
1.0.56
- Fix: No-pagination when event filter active now uses edit_posts_per_page filter so WP list table cannot override it.
1.0.55
- New: Bulk email send now processes in batches of 5 with live progress bar, showing each recipient name + email as they are sent. Prevents timeouts.
1.0.54
- Change: Removed wc-on-hold from valid order statuses — only processing and completed orders show attendees.
1.0.53
- Fix: Attendee list now excludes attendees from cancelled, refunded, trashed, and failed orders. Only processing, completed, and on-hold orders are shown.
1.0.52
- Fix: Bulk send only queued 1 email — jQuery traditional:true caused PHP to receive only the last attendee ID. IDs are now sent as comma-separated string.
1.0.51
- Fix: Bulk send stores attendee IDs in transient to avoid URL-length errors with large selections.
1.0.50
- Fix: No pagination when an event filter is active — all attendees visible at once.
- Fix: Bulk email dedup is now per (email + order), not per email alone.
1.0.49
- Fix: Bulk send without selection now resolves ALL attendees for the event server-side (not just the current page).
1.0.48
- Fix: Bulk "Send ticket email" without selection now sends to all visible attendees (bypasses WP empty-selection block).
1.0.47
- Add: Bulk send without selection defaults to all attendees for the filtered event.
- Add: Email recipient resolved via WAM member (MemberNo) → wwef_email → order billing; deduplicated per unique email.
1.0.46
- Fix:
wwef_attendeelist event filter now shows available events (fallback from data) and includes a proper Filter button. - Add: Bulk action to send ticket email to selected attendees.
1.0.45
- Change: Removed Woo admin recovery/binding tools; the order attendees section is now display-only and only shows when an existing WWEF match is present.
1.0.44
- Tweak: Woo admin order attendees section is now collapsible (toggle) and only auto-expands when action is required.
1.0.43
- Fix: Woo admin order binding can release (unbind) and rebind attendees when the wrong person was linked to a ticket row.
1.0.42
- Fix: Woo admin order binding can create/bind missing WWEF attendees even when order meta is incomplete (e.g. dual memberships).
1.0.41
- Build/source policy: Fjernet source-side references til includes/PluginInstaller.php og includes/UpdateChecker.php.
- Build/source policy: Update/installer bootstrap injiceres nu kun via build-packages og _shared.
1.0.40
- Build/setup: Fjernet nested PUC fallback i bootstrap; bruger nu kun vendor/yahnis-elsts/plugin-update-checker.php.
- Build/setup: Ensrettet med shared WebAlive update-checker flow.
1.0.39
- Fix: Auto-bind existing WWEF attendees already registered on the same order to unbound Mage attendee rows before showing manual bind UI.
- Fix: Treat only WWEF posts without
ea_order_idas orphans when resolving member-based attendee selection. - Fix: Fall back from
_wam_membernoto_wam_memberidand_customer_userwhen resolving the related WAM member number for admin attendee binding.
1.0.37
- Fix: When
_wam_membernois missing, resolve the WAM member number via order/user_wam_memberidand_customer_user. - Fix: Support looking up
MemberNoinwam_membersfrom the linked WAM member id during WWEF admin binding.
1.0.36
- Fix: After admin attendee selection, rebuild WWEF order meta and line item attendee meta from the chosen/created WWEF attendees.
- Fix: Sync Mage attendee data after admin binding so the selected WAM member choice becomes usable immediately.
- Fix: Replace the useless WAM member info note with a direct attendee selection workflow in the admin UI.
1.0.35
- Fix: Use only
_wam_membernofor WAM member lookup in the WooCommerce admin WWEF binding flow. - Fix: Remove the misleading
_wam_source_membernowording from the admin attendee binding UI.
1.0.34
- Fix: Allow WooCommerce admin order binding to create new WWEF attendees directly from WAM members resolved from the order source member number.
- Fix: Use the order WAM source member number in the bind UI so double memberships can offer both participants for new WWEF attendee creation.
1.0.33
- Fix: Show the manual WWEF bind UI for unbound ticket rows even when no orphan candidates have been found yet.
- Fix: Expand the bind UI with explicit ticket number, ticket type, and name columns so unbound rows still show the necessary order data.
1.0.32
- Fix: On completed orders with linked WWEF tickets, show only ticket number, ticket type, and attendee name from the linked ticket rows.
- Fix: Hide extra WWEF binding/detail UI on completed orders once linked attendees are present.
1.0.31
- Fix: Simplify the WooCommerce admin order attendee summary to show only ticket and attendee name for WWEF attendees already on the order.
1.0.30
- Fix: Hide already bound WWEF attendees from the manual binding UI so found attendees cannot be changed again.
- Fix: Exclude WWEF attendees that are already linked to any Mage attendee from the orphan candidate dropdowns.
1.0.29
- Fix: Submit manual WWEF bindings through the WooCommerce order form without nesting forms, so the bind action actually posts to the handler.
- Fix: Redirect back to the correct order edit screen after binding on both classic orders and HPOS orders.
1.0.28
- Fix: Find manual WWEF orphan binding candidates by
ea_event_idacross the whole event, instead of limiting the list to the same ticket type only. - Fix: Prioritize same-ticket candidates in the dropdown while still allowing manual selection of other event-level orphan attendees.
1.0.27
- Fix: Replace automatic orphan recovery on the admin order screen with manual WWEF binding per Mage attendee.
- Fix: Show all candidate WWEF orphans per Mage attendee and allow explicit selection before binding.
1.0.26
- Fix: Show matched WWEF orphan candidates on the WooCommerce admin order screen instead of only attendees already bound by
ea_order_id.
1.0.25
- Fix: Show WWEF attendees directly on the WooCommerce admin order screen by reading
wwef_attendeeposts bound to the order.
1.0.24
- Fix: Extend admin order repair to recover orphan WWEF attendees from matching Mage attendees when order/item payload alone is not enough.
1.0.23
- Fix: Run WWEF attendee self-heal from WooCommerce admin order view so missing attendee posts/item meta can be rebuilt without customer thankyou or order-details access.
1.0.22
- Fix: Remove WooCommerce
order-againactions for WWEF event orders so ticket orders cannot be re-ordered from account/order review views.
1.0.21
- Fix: Re-enable attendee display in checkout/order review via
woocommerce_get_item_data. - Fix: Backfill missing
_wwef_attendeesorder item meta from order-level payload on existing orders. - Fix: Backfill missing
wwef_attendeeposts from order item attendee payload when legacy orders are viewed/confirmed. - Fix: Recognize WWEF orders by WWEF item/order meta even when MEP item meta is incomplete.
1.0.20
- Fix: Create
wwef_attendeeposts duringwoocommerce_checkout_update_order_meta, where a real order ID exists and cart attendee payload is still available. - Fix: Always attach
_wwef_attendeesorder item meta when attendee cart payload exists, instead of depending on early order classification.
1.0.19
- Fix: Stop creating or updating WWEF attendees with blank or
0order IDs during early checkout lifecycle hooks. - Fix: Rebuild order-bound WWEF attendees from finalized WooCommerce order item attendee payloads before syncing to MEP.
- Fix: Clean up matching orphan WWEF attendees after successful order-bound sync so
15153-style duplicates do not accumulate. - Fix: Tighten attendee identity matching to avoid collapsing multiple attendees with blank email into one WWEF row.
1.0.18
- Dev: Version bump.
1.0.17
- Fix: Move attendee capture from init to wp_loaded so WooCommerce cart/session are initialized before capture runs.
- Fix: Add defensive session guards in the modern and legacy capture flows to avoid early cart access fatals.
1.0.16
- Fix: Attendee form wrapper only shows when ticket quantity > 0.
- Fix: Member hint visibility no longer relies on the [hidden] attribute.
1.0.15
- Fix: Show attendee summary in Cart (not only Checkout).
- Fix: Order/thankyou/email attendee output prints on the correct line item.
1.0.14
- New: Global settings can reorder attendee fields/labels (drag and drop) and applies when event override is off.
- Change: Global settings UI condensed to one row per field (move + active + required + label).
- Fix: Member-number hint visibility and attendee #2 name dropdown no longer disabled/grey.
1.0.6
- New: Membership-aware attendee rules for member numbers (single/dual membership via WAMP category).
- Tweak: Improved English i18n wording for member-number limits (singular/plural).
1.0.0
- Rebuilt plugin into structured layout with PSR‑4-ish autoloader.
- Preserved behavior from Lite; kept CSS/JS exactly as in production.
- Added
languages/woo-wa-event-form.pot,phpcs.xml,conductor.json.
0.4.1
- Fix: Deterministic, update-only sync into existing
mep_events_attendeesbyea_order_id+ea_event_id, matched perea_ticket_type(FIFO per type). - Fix: Prevent duplicate
wwef_attendeeposts (idempotency guard + upsert logic). - Change: Removed creation of Mage attendee posts; now strictly updates existing ones.
- Change: Simplified bootstrap, removed unused/duplicated code paths.
- Dev: Consistent JS i18n via
wp_localize_script. - Dev: Persist event meta
_wwef_attendeeskeyed by visible ticket label. - Dev: Minor admin list polish.
0.4.0
- Added custom post type
wwef_attendeefor storing individual attendee records. - Added REST API endpoint
/wp-json/wwef/v1/attendees?event_id=123for event-based attendee retrieval. - Added admin list table improvements:
- Columns for Event, Order, Ticket, Name, Email, Mobile, and Date.
- Filters for Event ID and Order ID.
- Added automatic fallback for
mpwem_post_id(Mage event ID) whenea_event_idis not provided. - Added proper localization for JS strings using
i18nviawp_localize_script. - Moved all front-end JS logic to
assets/woo-wa-event-form.js. - Fixed REST route registration (hooked on
rest_api_init). - Shortened CPT slug to meet WordPress 20-character limit.
- Added settings page for field toggles and labels.
0.3.0
- Added attendee sync option toward Mage CPT (
mep_events_attendees). - Added meta mirroring options for Mage/WWET (
_mage_attendees,_wwet_attendees). - Added “Replace existing attendees by order ID†logic (duplicates prevention).
- Added optional flattened meta list
_wwef_attendees_flat. - Improved field handling with customizable labels.
0.2.0
- Basic per-ticket attendee form rendering below each ticket type.
- Settings for enabling/disabling name, mobile, and email fields.
- Initial event meta storage (
_wwef_attendees) and JS localization. - Dynamic JS generation based on quantity.
0.1.0
- First release.