Beskrivelse
WebAlive Members Premium er et omfattende plugin designet til at hjælpe foreninger med at administrere deres medlemmer, begivenheder, betalinger og integration med WordPress-brugere.
Nøglefunktioner:
- Administrér medlemmer med detaljerede profiler
- Synkronisér
wa_members-tabellen med WordPress-brugere - Opret, opdatér eller fjern brugere automatisk baseret på medlemshandlinger
- Importér medlemmer fra CSV eller ekstern MSSQL-database
- Moderniseret import-workflow med AJAX-feedback
- Importoversigt med statistik (tilføjede/overspringede/opdaterede/fejl)
- Valgfri Fortryd Import & Logfremviser for sporbarhed
- Håndtér begivenheder, aktiviteter og betalingsdata
- AJAX-drevet adminpanel med Bootstrap UI
- Responsive modaler til redigér/fjern/genaktivér medlem
- Valgfri Mailchimp-integration til nyhedsbreve og automation
Ændringslog
1.7.89
- Feature: reCAPTCHA v3 spam protection on new member forms (both QuickPay and WooCommerce flows). Uses existing site/secret keys from plugin settings. Skips gracefully when keys are not configured.
1.7.88
- Fix: New member orders now set billing_country to DK — missing country caused WooCommerce payment gateways to be unavailable on the order-pay page.
1.7.87
- Fix: WooCommerce new member form ([wam_new_member_form]) now has a working JS submit handler — previously only the QuickPay form was bound.
- Fix: JS form handler reads AJAX action from data-wam-action attribute, supporting both QP and WC flows.
- Fix: Handles both
redirectandredirect_urlresponse keys for WC checkout redirect.
1.7.86
- Fix: New member form — added missing i18n keys for validation messages (emailRequired, firstNameRequired, etc.), which caused silent JS failure on submit.
- Fix: New member form — accept_rules checkbox validation now correctly stops form submission with early return.
1.7.85
- Fix: New member form — secondary name/email fields now visible on page load when a duplicate member type is pre-selected.
1.7.84
- Improve: FIK import — per-row checkbox to include/exclude individual payments before import, with check-all toggle.
- Improve: FIK import — validates FIK strings against configured prefix, skipping foreign FIK (e.g. BS indbetalingskort).
- Fix: FIK import — date parsing now handles dd.mm.yyyy format (bank CSV standard).
1.7.83
- New: FIK import tab on Payments Import page — parses FIK +71 payment strings from CSV (Dato, FIK-streng, Beløb), extracts member number, and imports payments with status "Betalt via FIK" / type "FIK-betaling".
- Dedup: FIK import checks transid (digit string) + date + type to prevent duplicate imports.
1.7.82
- Fix: Portal cards tab — QP payment link opens in popup window instead of full redirect, keeping portal page alive so MitID app-switch can return to the QP window.
1.7.81
- Fix: Portal cards tab — QuickPay subscription now created via REST API (POST /subscriptions + PUT /link) instead of Payment Window form POST, solving mobile MitID redirect failures where subscriptions were never created.
1.7.80
- New: FIK +71 payment string support — settings for prefix and account under Payments, new {{FIK-streng}} template variable for payment request, receipt, and test emails.
- New: Payment date field and "Advance NextPayment" checkbox in Create Payment modal.
1.7.79
- New: "Create payment" button on Kontingent tab — manual payment registration via modal with member search.
1.7.78
- Fix: Removed non-existent
skuandproduct_idcolumns from WAMP_PAYMENT inserts — resolves "Unknown column" DB errors. - Fix: Payment inserts now write
categoryandreference(e.g. "Kontingent 2026") viaget_order_category_info(). - Fix: WC email suppression filters corrected to accept 3 parameters (matches WooCommerce hook signature).
- Fix: Kontingent callback email dedup now checks
_wam_kontingent_receipt_sent_atguard.
1.7.77
- i18n: All PHP and JS source strings converted to English — Danish translations via .po/.mo files.
- New: Member export (PDF/Excel) now uses the columns configured in Settings for the current view (active/removed).
- New: PDF export auto-switches to landscape orientation when more than 7 columns are active.
- New: Custom column labels from Settings are used as export headers.
1.7.76
- Fix: Ad-hoc intro tekst bruger nu inline i stedet for
— undgår ugyldig nesting i WAET skabelonens eksisterende
-wrapper.
1.7.75
- New: Dobbeltmedlemmer med forskellig email vises nu som separate valgbare rækker på kontingent email-siden.
- Fix: Dedup i send_request ændret fra MemberNo til id, så begge emails modtager betalingsanmodningen.
1.7.74
- Fix: Bootstrap/Popper JS no longer loaded globally on all admin pages — fixes WooCommerce order save redirect.
- New: Ad-hoc intro text field on kontingent email group page — bold text prepended to payment request emails.
1.7.73
- New: "Ingen email" checkbox on member edit form — clears email address for members without active email.
- Fix: Member search now finds multi-word queries like "flemming aunel" by matching each word against full name.
- Fix: Search input is trimmed so leading/trailing spaces no longer cause "Ingen emner fundet".
1.7.72
- Fix: Removed 60-minute dedup guard on payment request emails — emails now send every time.
- New: {{amount}} placeholder — formatted kontingent amount from category (e.g. 200,00 kr).
1.7.71
- New: {{member_type}} placeholder in payment request emails — resolves to wam_cat_name via MemberStatus.
- New: {{active_url}} placeholder — wam-go auto-login link to member portal kontingent tab.
- New: {{amount}} placeholder — formatted kontingent amount from category (e.g. 200,00 kr).
- Fix: Order-pay retry on failed/pending orders now works. Stale QuickPay meta cleared before retrying.
- Fix: Bridge maybe_done() now checks order.is_paid() before skipping charge.
- Fix: Duplicate WAMP_PAYMENT rows no longer created on order-pay retries.
1.7.69
- Fix: Kontingent amounts now count double-member categories (dobbelt medlemmer) as 1 restance per MemberNo instead of 2. Summary cards, member list, bulk charge, and send-request all deduplicate by MemberNo. Double-member names shown joined with "&" in table.
1.7.68
- Feature: Subject field added to all 6 WAET email template cards in settings (Standard member message, Payment request, and One-time code were missing it).
- Feature: Test emails and production sends now use the configured subject with {{placeholder}} resolution.
- Fix: Intro text newlines now render as line breaks in emails — WAET Renderer applies nl2br for _text variables.
1.7.67
- Feature: Recover Payment button in QuickPay metabox when no transaction is linked to an order. Searches QuickPay by the stored recurring order_id, syncs all payment data (card, status, transaction id) back to WAMP_PAYMENT and order meta, and completes the order if already captured.
1.7.66
- Fix: Fatal error on WooCommerce thank-you page — woocommerce_valid_order_statuses_for_order_again filter closure now accepts optional $order parameter since WC calls it with only 1 argument from woocommerce_order_again_button().
1.7.65
- Fix: Active and removed member lists now use separate column settings. Active list uses wam_premium_list_columns, removed list uses wam_premium_list_notactive_columns with own sortable configuration in Settings.
1.7.64
- Improvement: Subscription delete button now has two-step flow — active subscriptions get cancelled in QuickPay first, already cancelled subscriptions get permanently deleted from the database. Different icons and confirm messages for each action.
1.7.63
- Fix: Refresh NextPayment prompt was skipped when member had non-kontingent payments — now checks only kontingent payments (reference LIKE 'Kontingent %' OR orderno LIKE 'BS%') matching the member overlay display.
1.7.62
- Fix: Refresh NextPayment now also prompts for year when member has zero payments in WAMP_PAYMENT, even if WC order meta exists.
1.7.61
- Fix: Fatal error in payment edit form —
number_format_i18n()now casts amount to float before formatting. - New: Reference field added to payment edit form — admin can edit payment reference, with change logging.
- Improvement: Refresh NextPayment now prompts admin for year when no orders found, instead of silent error. Uses renewal month from settings to set forfaldsdato.
1.7.60
- New: Date (created_at) field added to payment edit form — admin can now correct the payment date.
- New: Refresh NextPayment button now sets forfaldsdato when member has no payments — uses renewal month from settings to calculate overdue date.
1.7.59
- New: "Betalingsoversigt" tab replaces old "Members Payment Status" — shows two separate tables for kontingent payments and other payments, with search across memberno/name/address.
- New: Edit, delete, and move payments between members via modal dialogs. Move feature lets admin reassign a payment from one member to another.
- New: All payment edits, deletes, and moves are logged to WAMP_PAYLOG with admin username and change details.
- Improvement: Kontingent tab "Medlemsnr." column width set to 100px for compact layout.
- Improvement: Kontingent tab card column now shows card brand icons (SVG) matching the subscriptions page style.
1.7.58
- Fix: Undefined variable
$subject_labelin payment/subscription acknowledge emails — replaced with$vars['subject']which holds the resolved subject line. - Fix: dompdf fatal error "Cannot declare class ComposerAutoloaderInit..." when another plugin already loaded dompdf — added
class_existsguard before requiring autoloader.
1.7.57
- Improvement: Kontingent "Har email" group now shows separate rows for dual members (dobbeltmedlemmer) — each member with their own email gets their own row, increasing contact reach. Summary counts also reflect individual members.
- New: PDF download button on "Ingen kontakt" tab — exports member list with medlemsnr, navn, adresse, postnr, by, telefon, mobil, kategori and forfaldsdato for follow-up.
1.7.56
- CRITICAL Fix: Progress bar notice still appeared on page load because WordPress core
common.jsrelocates ALL.noticeelements out of their container to the top of the page, bypassingdisplay:noneon the parent. Replaced.noticewith custom.wam-progress-noticeclass that WP does not touch.
1.7.55
- CRITICAL Fix: Kontingent progress bar ("Behandler...") was visible on page load with active spinner. Root cause: WordPress core
common.jsauto-initializes.notice.is-dismissibleelements and overridesdisplay:none. Removedis-dismissibleclass; dismiss button kept with manual handler. Spinner no longer starts withis-activein HTML — only activated by JS when bulk action runs.
1.7.54
- Fix: Event orders now use
autocapture=truein QuickPay recurring charge — prevents capture failures caused by timing issues when the manual capture call runs before QP has fully authorized. Membership orders keep existingautocapture=false+ manual capture flow. - Fix: Event orders now correctly set payment category to
WAMP_PAY_CATEGORY_EVENT(4) instead ofWAMP_PAY_CATEGORY_NEW(0).
1.7.53
- Fix: Progress bar spinner now stops reliably — moved cleanup from
completetosuccess/errorcallbacks, spinner hidden via CSS visibility,finishProgress()function prevents any code-path from leaving it active. - Fix: NextPayment now uses the pre-calculated
_wam_next_paymentdate from order meta instead of re-computing +1 year from DB (which caused double-advance to 2028 instead of 2027). - Fix: Amount in WAET payment acknowledge email now formatted with 2 decimals (e.g. "200,00" instead of "200").
- Fix: WooCommerce
customer_completed_orderemail now fully suppressed for kontingent orders — added to the kontingent suppression list alongside the other WC email types.
1.7.52
- Fix: Kontingent orders now use the payment acknowledge email template instead of the subscription acknowledge template — kontingent charges go through QuickPay subscription but should use the payment template for correct email content.
- Fix: Kontingent progress bar ("Behandler...") is now dismissible (X button) and auto-fades after bulk action completes. Notice style changes to success on completion.
1.7.51
- CRITICAL Fix: Kontingent bulk charge always reported failure ("0 OK, 1 fejl") because charge_subscription() checked for a non-existent 'success' key in the QuickPay response array — now correctly checks HTTP status from raw.status.
- CRITICAL Fix: WooCommerce "failed order" email (customer_failed_order, failed_order) was NOT suppressed for kontingent orders, causing customers to receive "payment failed" messages even though the charge was captured successfully. Both email types are now suppressed.
1.7.50
- Fix: Kontingent progress bar ("Behandler...") now auto-hides after 6 seconds when bulk action completes.
1.7.49
- Fix: Member detail modal could not be closed (X / click outside) on Kontingent tab — close handler was inside paymentList.init() which is skipped when payment table is absent.
- Fix: Clicking outside modal content (backdrop) now closes the modal.
- Add: "Luk" (Close) button added to member detail card alongside Edit/Delete.
- Fix: Undefined variables ($brand, $bin, $last4, $exp_month, $exp_year) in quickpay_payment_by_subscription — card metadata now initialised from QuickPay response with fallback to WAMP_SUBSCRIPTION.
1.7.48
- Fix: Payment acknowledgment email now fills all template placeholders — card_brand, card_no, card_issued_to fall back to WAMP_SUBSCRIPTION data when QuickPay metadata is empty.
- Fix: card_issued_to defaults to member name when not provided by QuickPay.
- Fix: Kontingent orders now set _wam_order_title and _wam_next_payment so member_year is correctly resolved in email templates.
- Fix: All WooCommerce transactional emails (new order, processing, on-hold, invoice, cancelled) are suppressed for kontingent orders — receipts are handled exclusively by WAET.
1.7.47
- Fix: Kontingent bulk action spinner now stops after completion.
- Fix: paymentList AJAX no longer fires on kontingent tab (avoids unnecessary request).
- Fix: NextPayment refresh removes member row from kontingent table when updated (member is no longer overdue).
1.7.46
- Fix: NextPayment refresh button now works on Kontingent tab (handler was only bound on Members page).
- Fix: Removed MemberID/memberid column guessing — all member lookups now use the correct
idcolumn (fetch_member_row_by_id, member_row_identity_where, maybe_mark_order_completed_after_capture). - Fix: Payments list number_format error on PHP 8.x when amount is a string.
1.7.45
- Fix: Safety-net hook (priority 99) on order completion ensures NextPayment is synced even when the primary handler misses it.
- Add: Manual NextPayment refresh button (dashicons-update) in member detail modal — fetches latest _wam_next_payment from completed orders.
1.7.44
- Fix: Kontingent view-member modal now reuses the full member detail card from the members page (fetch_member_detail) instead of a custom simplified view.
1.7.43
- Add: New Kontingent tab replaces Payments List — dashboard summary cards + 3-group member table (has card / has email / no contact).
- Add: Bulk charge for members with active subscription card — creates WC order + QuickPay recurring charge + advances NextPayment.
- Add: Bulk send payment request email for members without card but with email (via WAET, with 60-min dedup).
- Add: Member info modal + soft-delete option for members with no card and no email.
1.7.42
- Fix: Payments dashboard now groups by the
typecolumn directly (Betalingsservice, MobilePay, Payment) instead of deriving channel from multiple columns. - Fix: Dashboard summary totals and pie chart are no longer limited by a date cutoff — all completed payments are counted.
- Add: Per-channel summary cards (BS, MobilePay, Payment) with payment count and member count in the dashboard header.
- Fix: Double members (sharing MemberNo) now count as two persons in all dashboard member counts.
- Fix: Order payment processing — all code paths now route through the central
maybe_mark_order_completed_after_capture()function.
1.7.41
- Add: MC audit — "Forgotten" (GDPR permanently deleted) emails are now cached server-side and filtered out of the "Missing in Mailchimp" ADD list into a separate read-only section.
- Add: MC audit — "Batch Add All" button tries to subscribe all missing members at once; forgotten emails are automatically detected and cached for future audit runs.
- Add: Single ADD errors for forgotten emails are now also cached, so they disappear from the ADD list on the next audit run.
1.7.40
- Fix: MC audit email-change detection now matches by UniqID (or ID+name fallback) instead of MemberNo — prevents false "Update email" for household members (husband/wife sharing MemberNo but with different UniqID).
1.7.39
- Fix: MC merge fields — universal rule: empty WAMP values are now always omitted from the API payload (prevents Invalid Resource errors for all field types).
- Fix: MC merge field code de-duplicated — explicit mapping and same-name fallback merged into a single clean code path.
- Add: MC audit now detects email changes — members whose email was changed in WAMP are shown in a separate "Email changed" section instead of "Missing in MC".
- Add: MC audit email-change action respects MC contact status: subscribed/unsubscribed/pending → PATCH email; cleaned/archived → permanent delete + re-create.
1.7.38
- Add: QuickPay Branding ID setting — optional branding_id is now sent with all Payment Window requests when configured.
1.7.37
- Fix: Event order reorder bypass — added woocommerce_valid_order_statuses_for_order_again filter so WC never processes event order-again requests.
- Fix: Moved URL blocker from template_redirect (too late) to wp_loaded priority 10 (before WC_Form_Handler at priority 20).
- Fix: Expanded event order detection to also check event_id, _wwef_attendees, _wwef_ticket_label, _wwep_event_id, and mep_events post type.
1.7.36
- Fix: Audit ADDRESS comparison now skips sub-keys where WAMP value is empty (e.g. country) to avoid false pending results.
1.7.35
- Add: Missing DB columns now available in Table Options (Title, Gender, Country, UniqID, ExtID, UUID, Status, SMS Valid, Group SMS, DelReason, Created, Updated).
- Fix: Mailchimp audit comparison normalises ADDRESS sub-keys and trims whitespace to eliminate false "pending" results.
- Fix: Audit diff message now shows exactly which merge tags differ instead of generic text.
1.7.34
- Add: Immediate Mailchimp sync on every member create, update, or removal (admin and frontend).
- Fix: Rewritten MC sync/remove callbacks to always fetch full member row from DB by ID — fixes broken hooks that only passed partial data.
- Add: Double-membership awareness on removal — if one half is removed, MC is re-synced from the remaining active member instead of archiving.
- Add: Frontend profile save, email update, and admin new-member creation now fire MC sync hooks.
1.7.33
- Fix: Reduced batch auto-sync page size from 200 to 25 to prevent 504 gateway timeouts on shared hosting.
1.7.32
- Add: Configurable match method for Mailchimp auto-sync (ID+EMAIL, UniqID+EMAIL, EMAIL+FNAME+LNAME) via dropdown on Audit page.
- Add: Batch auto-sync AJAX now uses the selected match method.
- Fix: Audit status table only shows members pending sync (hides 100% matched rows).
- Fix: WAET sendqueue table existence check prevents DB error when WAET not installed.
1.7.31
- Add: Mailchimp merge field mapping UI in Settings > Mailchimp — map MC tags to WAMP columns via dropdowns, fetched live from MC API.
- Add: Merge field overview table on Mailchimp Audit page with mapping status and link to edit.
- Add: CS_UNIQID and SPONSOR merge tag mappings (UniqID, meta2).
- Add: Dashboard hides missing-payment box when count is 0.
- Fix: PHP 8.4 deprecation — fgetcsv escape parameter in area CSV import.
- Improve: Sync engine reads mapping from saved settings instead of hardcoded array.
1.7.30
- Add: Configurable member list columns — select which columns to display via Settings > General.
- Add: Custom column labels — rename any column (e.g. meta3 → Title) in settings.
- Add: Default sort order setting — choose which column and direction the member list sorts by on load.
- Add: All visible columns are now sortable (clickable headers).
- Add: Optional member number assignment checkbox on CSV and MSSQL import.
- Improve: SQL query now fetches all available fields (Birthday, Age, Area, meta1-4, YEAR, Phone, Note1).
1.7.29
- Update: DomPDF library updated from 3.1.0 to 3.1.5 (bugfixes and security patches).
- Update: FPDI library updated from 2.6.3 to 2.6.6 (security fix).
- Fix: PHP 8.4 deprecation — added explicit
$escapeparameter tofputcsv()calls in paylog CSV export. - Fix: PHP 8.4 deprecation — added explicit
$escapeparameter tofgetcsv()call in CSV import helper.
1.7.28
- Fix: MSSQL import now uses safe property reader — missing columns return defaults instead of PHP warnings, and DateTime objects are auto-converted to strings.
- Fix: SQL injection in MSSQL import replaced with
$wpdb->prepare(). - Fix: MSSQL import tries both
cs_medlemmerandcs_memberstable names. - Fix: Title from MSSQL mapped to
meta3, Profession tometa4. - Add:
meta4field support in WP user sync (_wam_meta4user meta) and Mailchimp sync (META4merge field).
1.7.27
- Fix: MSSQL database import AJAX handler no longer crashes on connection failure —
sqlsrv_errors()array is now properly formatted as a readable string instead of causing a PHP 8 TypeError. - Fix: Failed MSSQL connections now return early with
wp_send_json_error()instead of attempting SQL queries on a dead connection. - Fix: Added
function_exists('sqlsrv_connect')guard in the AJAX handler to prevent fatal errors when the extension is missing.
1.7.26
- Fix: Guard
sqlsrv_connect()call withfunction_exists()check to prevent fatal error on servers without the PHP sqlsrv extension. - Improve: MSSQL connection failure now displays detailed error info (SQLSTATE, message, code) for easier debugging.
1.7.25
- Feature: WooCommerce is now optional. The plugin activates and runs without WooCommerce, providing member management, categories, import/export, email templates, and native subscriptions. Payment-related features (gateway, QuickPay, checkout, order processing) are conditionally loaded only when WooCommerce is active.
- Add: New
wam_has_woocommerce()helper function for consistent WC availability checks throughout the plugin. - UI: Portal hides Cards, Payments, Kontingent, and Orders tabs when WooCommerce is not installed.
- UI: Admin Settings hides Payments tab when WooCommerce is not installed.
1.7.24
- Fix: 3DS enforcement now includes all valid QuickPay card types:
creditcard→3d-creditcard,visa-electron→3d-visa-electron, andmastercard-debet→3d-mastercard-debet. This resolves "The card type used is not supported" errors when users select debit card variants in payment settings. - Add: Admin QuickPay Card Types multiselect now includes Visa Electron (Debit) and Mastercard Debit options alongside existing credit card types.
1.7.23
- Fix: Restored missing helper method
WAM_Premium_Helper::get_order_category_code()used by order summary rendering. This removes the fatal error in member portal flows that trigger order summary/category mapping.
1.7.22
- Improve:
[wam_portal_tab_note]can now be used without parameters and resolves context/tab dynamically from active login/portal shortcode rendering. - Add:
[wam_member_login]and[wam_member_portal]now supportaction/tabattributes to select initial tab and matching tab-note context. - Improve: Portal frontend now respects shortcode-selected initial tab via
data-initial-tabbefore fallback URL/payment flow logic.
1.7.21
- Fix: QuickPay order metabox manual capture now re-checks payment state via API on capture errors and treats already-captured payments as success, synchronizing order/payment status instead of showing a false failure.
- Fix: QuickPay order metabox now shows detailed AJAX error text when manual capture fails, so admin sees the real cause.
1.7.20
- Fix: Accepted kontingent/direct-payment callbacks no longer force orders to
wc-failedwhen capture is not immediately confirmed. These now move to pending/on-hold with automatic QuickPay finalization scheduling. - Fix: Renewal cron flow now treats in-flight/pending QuickPay states as on-hold + finalization instead of failed.
1.7.19
- Fix: Kontingent/renewal receipt sending is now enforced across all completion paths. When capture completes (portal immediate, async cron finalization, or Woo payment completion), the plugin now triggers renewal receipt delivery with WAET payment acknowledgment template priority and deduplicates with a per-order sent flag.
1.7.18
- Feature: Added a dedicated Settings -> Tab texts tab with rich text editors for per-tab portal/login notes.
- Feature: Added shortcode
[wam_portal_tab_note context="portal|login" tab="..."]for explicit placement of tab notes. - UI: Notes are now rendered in both
[wam_member_login]and[wam_member_portal]tab content using Gutenberg-compatible rendering (do_blocks+ shortcode handling).
1.7.17
- Fix: While a kontingent renewal capture is pending finalization, portal summary now suppresses overdue/due + Pay now actions to prevent duplicate charge attempts and misleading “not paid/due” messaging.
1.7.16
- Fix: Portal kontingent capture now prioritizes immediate completion by charging with QuickPay
autocaptureenabled and extending synchronous capture confirmation before falling back to pending finalization.
1.7.15
- Fix: Kontingent callback no longer reclassifies renewal orders as new-member orders. WAET routing now stays on payment acknowledgment templates for renewals, and kontingent year (
member_year/description) is derived from_wam_order_titlewhen it contains a year.
1.7.14
- Fix: WooCommerce default "customer completed order" email is now disabled for kontingent/renewal orders, so members do not receive the generic completed-order wording. Renewal communication continues through the WAM payment email flow.
1.7.13
- Fix: Portal kontingent payment no longer creates a new blank member row.
create_members_from_order()now detects non-new-member orders (no_wam_is_new_memberflag) and returns the existing member's DB id instead of INSERT-ing a new row.handle_payment_complete()has an additional guard to skip member creation entirely for renewal/kontingent orders.
1.7.12
- Changes in the admin payment handling.
1.7.11
- Refactor: Payments dashboard tab moved out of the view and into a dedicated admin class to match the shared /views loader structure.
1.7.10
1.7.9
- Maintenance: Minor charges.
1.7.8
- Fix: When a double membership shows Member 2 in the portal, Member 2 email and mobile can now be edited and saved from the same profile edit flow without email verification.
1.7.6
- Fix: Portal profile address editing now resolves and saves
Areathrough the same DAWA-based area lookup used in admin, using a hiddenareafield and persistingWAMP_MEMBER.Areawhen present.
1.7.5
- Fix: Portal member-row selection no longer assumes a
MemberIDcolumn when disambiguating or logging matchedWAMP_MEMBERrows, so default installs usingidstay deterministic.
1.7.4
- Fix: Portal profile saves now resolve the real
WAMP_MEMBERcolumn names from the live table schema before updating, so default installs writeZipinstead of the non-existentPostalCodecolumn and only touch optional columns when they actually exist.
1.7.3
- Fix: Portal profile updates now persist to the canonical
memberidrow inWAMP_MEMBER, avoiding writes through shared household identifiers. - Fix: New kontingent-order and post-capture member updates now prefer
memberidoverMemberNowhen syncingWAMP_MEMBERdata.
1.7.2
- Fix: Portal kontingent QuickPay bridge now returns through the same post-capture completion path as the direct portal charge flow, including consistent paid/pending portal redirects and NextPayment sync.
- Fix: Profile address save now strips any trailing DAWA postcode/city text from the address line before persisting, while keeping postcode and city in their own fields.
- Fix: When changing profile email, the portal now shows the full new email in the verification message and auto-saves as soon as the verification code reaches its full length.
1.7.1
- Add: Member portal profile card now supports inline editing for email, mobile, and address with an Edit/Save toggle in the top-right corner.
- Add: Profile address editing now uses DAWA autocomplete in the portal edit flow.
- Add: Changing profile email now sends a verification code to the new email address and only saves the profile after the code is verified.
1.7.00
- Fix: Legacy Woo order QuickPay transaction meta is now healed from
WAMP_PAYMENT.transidwhen old data mistakenly storedsubscription_idin transaction-id fields. This repair now runs through the shared helper/meta sync path used by admin order views and payment resolution.
1.6.99
- Fix: QuickPay refresh/admin sync now prioritizes refunded and cancelled states correctly, so refunded QP payments no longer fall back to processed in WAMP_PAYMENT or order meta.
- UI: The WAM-Go column on the Members admin page now copies the generated link to the clipboard and shows copied status instead of opening a new tab.
1.6.98
- Fix: When a cancelled order has no real QuickPay transaction, stale QP order meta is now cleared instead of lingering in admin. WAMP_PAYMENT still syncs to cancelled/refunded based on the actual payment row.
1.6.97
- Fix: Completed-order admin save and bulk-complete now run the same QuickPay process as cancelled orders: fetch QP state, attempt capture when authorized/waiting, and update WAMP_PAYMENT to the actual QP result.
1.6.96
- Fix: Added direct handling of WooCommerce bulk cancel actions from the admin orders list (
handle_bulk_actions-edit-shop_orderand HPOS equivalent), so bulk-cancelled orders now run the QuickPay refund/cancel logic and sync WAMP_PAYMENT per order.
1.6.95
- Fix: WAM_Premium_Woo_Payments hooks are now initialized from plugin bootstrap for both admin and frontend. Previous admin order updates/cancellations had no effect because the payment hooks were only being registered from the frontend class.
1.6.94
- Fix: Cancelled Woo orders now also auto-cancel non-captured QuickPay payments via the payment cancel endpoint; if the remote payment is already cancelled/refunded, WAMP_PAYMENT is synced to that state on admin update.
1.6.93
- Fix: save_post_shop_order now also runs the cancelled-order QuickPay/WAMP_PAYMENT sync, so clicking "Update" on a cancelled Woo order triggers the refund/sync path even if Woo status hooks do not fire on that save.
1.6.92
- Fix: When a Woo order is set to cancelled, the plugin now checks the QuickPay payment state first, auto-refunds captured payments, and syncs the real result to WAMP_PAYMENT.
1.6.91
- Fix: Added save_post_shop_order hook — when admin clicks "Update" on a completed order, QP status is verified and WAMP_PAYMENT synced. Covers the case where woocommerce_order_status_completed does NOT fire because status didn’t change.
1.6.90
- Debug: Full logging in sync_wamp_payment_status_via_qp() — logs every decision point (hook fired, no row, API call, result, rows_affected).
- Debug: Bootstrap hook logs whether WAM_Premium_Helper is loaded when woocommerce_order_status_completed fires.
1.6.89
- Refactor: New central helpers in WAM_Premium_Helper — qp_fetch_payment(), qp_resolve_payment_id_from_order(), sync_wamp_payment_status_via_qp().
- Fix: woocommerce_order_status_completed hook now calls QuickPay API to verify actual payment status before syncing WAMP_PAYMENT.
1.6.88
- Fix: Direct top-level hook on woocommerce_order_status_completed now unconditionally syncs WAMP_PAYMENT.status to 'processed' — no class chain, no init() dependency.
1.6.87
- Fix: Portal kontingent CSS selectors corrected from #pane-kontingent to #pane-subscription so styles actually apply.
- UI: "Overdue" label right-aligned above the "Pay now" button in kontingent summary.
1.6.86
- Fix: Portal "Betal nu" kontingent payment now uses maybe_mark_order_completed_after_capture() — orders no longer stuck on "pending" or "processing".
- Fix: QuickPay bridge (checkout return flow) now uses maybe_mark_order_completed_after_capture() instead of bare payment_complete() — same issue.
1.6.85
- Fix: Manual WooCommerce order completion now bumps WAMP_MEMBER.NextPayment forward — the missing
update_member_next_payment()method has been implemented. - UI: Portal kontingent "Overdue" label now bolder (700) and "Pay now" button spans full width instead of right-aligned.
1.6.84
- Fix: Refund and cancellation now sync WAMP_PAYMENT.status to 'refunded'/'cancelled', so the member portal shows the correct status in both Kontingent and Betalinger.
1.6.73
- Fix:
WAMP_PAYMENTupsert now deduplicates by Woo order context (_wam_payment_id/orderno) in addition to transid, preventing duplicate rows for the same order. - Fix: Missing payer identity in
WAMP_PAYMENTis now backfilled from Woo order billing meta and callback fields when member row data is not yet available. - Fix: Async finalize path now backfills and links missing
WAMP_PAYMENTrows to the Woo order via_wam_payment_id.
1.6.72
- Change: Members Dashboard redesigned with large KPI total card and per-category cards showing count, label, and category image/icon.
- Fix: Category image (
wam_cat_image_id) now loaded fromWAMP_CATEGORYand displayed in dashboard cards. - i18n: All Danish source strings in
__(),esc_html_e(), andesc_attr_e()wrappers converted to English across callbacks, shortcodes, import views, and admin classes.
1.6.83
- Fix: When a WooCommerce order is manually set to "completed" (e.g. via Edit Order → Update),
WAMP_PAYMENT.statusis now always synced to "processed" immediately. Previously only worked for orders without product-line mapping.
1.6.82
- Fix:
WAMP_PAYMENT.statusnow synced to "processed" inmaybe_mark_order_completed_after_capture()so all capture paths (callback, portal, renewals, finalization) update the payments table — not just the callback.
1.6.81
- Fix: All 4 capture paths now respect the
wam_premium_payment_quickpay_captured_completedsetting. - Fix: Subscription callback, direct payment callback, portal charge, and renewal cron all use
maybe_mark_order_completed_after_capture()instead of barepayment_complete()or hardcoded status.
1.6.80
- Feature: Email subject lines for Membership receipt, Subscription receipt and New member receipt are now configurable in settings.
- Feature: Subject settings support {{key}} placeholders (same variables available in WAET templates).
- Fix: Payment acknowledgment emails now load intro_text from settings instead of sending empty.
- Fix: Kontingent payment receipt no longer uses wrong subject ("Card linked" instead of "Renewal").
1.6.79
- Feature: Added subject setting for Membership receipt and Subscription receipt email types.
- Fix: intro_text loaded from settings in both payment acknowledgment methods.
1.6.78
- Fix: Missing order meta writes —
_wam_qp_transactionand_transaction_idnow written in subscription payment callback. - Fix: Added
_wam_qp_idand_wam_qp_transactionto portal kontingent capture and callback subscription capture paths.
1.6.77
- Fix: WAM-Go now handles Mailchimp emails with unresolved merge tags (
<<MemberNo>>/<<UniqueId>>) gracefully — redirects to post without login attempt.
1.6.76
- Fix:
WAMP_MEMBER.NextPaymentnow synced after cron renewal payments. - Fix:
WAMP_PAYMENT.statussynced to "captured" after successful capture in 4 locations. - Fix: Metabox refund button now visible for payments with status "processed".
1.6.75
- Fix: Renewals cron broken reference to helper method.
1.6.74
- Fix: QuickPay callback no longer confuses
transidwithsubscription_id— 4 locations corrected. - Fix:
ordernonow useswc_order_idinstead of internal payment id.
1.6.71
- Fix: QuickPay method details are now resolved from
WAMP_SUBSCRIPTIONwhen recurring charge payload lacks card metadata, even ifmembernoalready exists. - Fix: Recurring payment flow now persists resolved card metadata to order meta (
_wam_qp_brand,_wam_qp_last4, etc.) so shop_order list shows actual method instead of generic fallback. - Fix: Orders list rendering now backfills and saves missing card method details to both order meta and
WAMP_PAYMENTfrom subscription data when available.
1.6.70
- Fix: In
post_type=shop_orderQuickPay payment column, Method is now always shown with robust fallback (card brand from payment meta/order meta, otherwise gateway title/QuickPay Payment). - Fix: Added fallback for missing card brand/last4 from order meta (
_wam_qp_brand,_wam_qp_last4) so partially populated orders still show method details.
1.6.69
- Fix:
WAMP_PAYMENTupsert no longer requiresmemberidfor new-member recurring payments; payment rows are now created using reservedmembernowhenmemberidis not available yet. - Fix: Prevented early validation failure in QuickPay payment upsert that previously skipped creating payment records for new members.
1.6.68
- Change: Version bump for release packaging alignment.
1.6.67
- Fix: New-member QuickPay callback no longer creates a duplicate copied Woo order.
- Fix: Added callback finalization idempotency guard to skip duplicate callback finalization on the same order.
1.6.66
- Fix: Removed final-order copy flow; setup order is now promoted directly to
member_orderto avoid duplicate paid orders.
1.6.61
- Fix: Customer portal password-login errors no longer show WordPress username-oriented wording. Messages are now email/code based only.
- Change: Replaced fallback raw
WP_Errorlogin output with user-friendly portal messages that do not refer to username login.
1.6.60
- Fix: Password login in customer portal now resolves WP users by Gmail-equivalent email (dot-insensitive for gmail/googlemail), preventing false "unknown email" failures when users enter dotted/undotted variants.
- Fix: Post-login member sync now prefers canonical member email from WAMP_MEMBER when Gmail aliases are used.
1.6.59
- Fix: Customer portal member lookup now treats
gmail.com/googlemail.comaddresses as dot-insensitive in local part (e.g.flemmingaunel@gmail.com=flemming.aunel@gmail.com). - Fix: Token login fallback now accepts Gmail-equivalent member email and continues with canonical database email.
- Fix: User creation/linking in portal now prefers canonical member email from WAMP_MEMBER to avoid mismatches/duplicates when user enters Gmail alias variants.
1.6.58
- Fix: Resolved QuickPay error
No available payment-method for transactioncaused by array-valued cardtypelock being cast to string (Array) in payment window builders. - Fix:
qp_enforce_3ds_payment_methods()now accepts both array and comma-separated string input and normalizes safely. - Fix: 3DS enforcement now only outputs valid/known card method tokens (
dankort,3d-visa,3d-mastercard,3d-maestro) and ignores unknown values instead of generating invalid3d-*methods.
1.6.57
- Fix: Enforced QuickPay
payment_methodson all WAMP payment window builders (new-member setup, portal subscription setup, gateway subscription setup, and shortcode payment flow), so 3DS locking is always sent. - Fix:
payment_methodsnow always passes throughWAM_Premium_Helper::qp_enforce_3ds_payment_methods()(also when cardtypelock is empty), preventing non-3DS fallbacks. - Add: New generic filter
wam_qp_payment_methods_defaultfor overriding default enforced methods (dankort,3d-visa,3d-mastercard,3d-maestro), while keeping backward compatibility withwam_qp_subscription_payment_methods_default.
1.6.56
- Fix: WAMP cron now also drains WAET's own sendqueue for WAMP-owned templates (payment request, payment ack, etc.) as a belt-and-suspenders fallback when WAET's
waet_process_queuecron is delayed or not running. - Fix: "Send Payment Request" button was disabling the wrong element (ID mismatch), allowing multiple simultaneous batch submissions and duplicate email queuing for the same members.
- Fix: Batch payment-request AJAX calls are now serialized (one at a time) instead of being fired in parallel, preventing server overload and database conflicts on large member selections.
- Fix: Added server-side deduplication guard: if a payment request email was already queued for a member within the last 60 minutes, the request is skipped silently instead of inserting a duplicate queue entry.
1.6.55
- Fix: Subscription payment windows now always use 3DS-enforced payment methods (PSD2 FraudFilter status 30100). Converts plain card type names (visa, mastercard) to their 3D counterparts (3d-visa, 3d-mastercard); leaves dankort as-is (inherently 3DS in DK). Default if no cardtypelock is set:
dankort,3d-visa,3d-mastercard,3d-maestro. - Add: New helper
WAM_Premium_Helper::qp_enforce_3ds_payment_methods()with filterwam_qp_subscription_payment_methods_defaultfor overriding the default set.
1.6.54
- Add: WAM-GO login handler now supports optional
targetquery parameter for redirect override after successful member login. - Security:
targetis validated as same-site URL/path only; invalid targets automatically fall back to existingpost_idpermalink behavior. - Add: New helper
wam_premium_build_wam_go_url()to build backward-compatible WAM-GO URLs with optional safe target override.
1.6.53
- Fix: Disabled WooCommerce "order again" for MEP event orders (including direct
?order_again=links) to prevent incorrect 0,01 product base price reuse on reorders.
1.6.52
- Fix: Corrected
WAMP_PAYMENTinserts to usecreated_at(schema-aligned) in checkout, Woo payment sync, and renewal flows, preventing SQL fatals and missing payment rows.
1.6.51
- Fix: QuickPay capture flow now resolves recurring payment stage from both state and last successful operation, improving reliability for approved/authorized transitions.
- Fix: Async capture finalization now retries capture when recurring payment is approved/authorized and keeps retrying transient waiting states safely.
- Add: QuickPay metabox now shows Capture button for all non-final states when a payment id exists, so manual capture is always available when auto-capture/finalization has not completed.
- Change: Manual capture, refresh-confirmed capture, and async capture-finalization now use the existing setting
wam_premium_payment_quickpay_captured_completedto set order status to completed (or processing when disabled).
1.6.50
- Fix: QuickPay order metabox now backfills missing QuickPay meta from existing order meta and local payment rows before showing that no QuickPay payment was found.
- Fix: Woo payment completion now restores missing QuickPay transaction/order metadata and computes missing
NextPaymentvalues for recurring membership orders. - Fix: New-member Woo orders now store
NextPayment, title, SKU, and pay-category metadata at creation time. - Fix: Portal kontingent Woo order items now use the membership category image so thumbnails render correctly in Woo order views.
1.6.49
- Fix: Subscription callback no longer forces orders to failed on transient QuickPay race/idempotency errors; moves to on-hold/pending finalization instead.
- Fix: Added asynchronous finalization persistence so local order/payment metadata keeps QuickPay Transaction ID in sync when resolved later.
- Add: Extended
wam_payment_logschema withordreid+ index for reliable order-level tracing. - Add: Centralized payment logging helper used across callback/finalization/recovery flows with backward compatibility for older table schema.
- Add: Admin recovery AJAX endpoint to bulk move failed subscription orders to on-hold and schedule automatic QuickPay finalization retries.
- Change: Customer-facing payment messages are now softer during async capture/finalization to reduce uncertainty when payment is still being verified.
1.6.48
- Maintenance release: internal prep for upcoming QuickPay callback/finalization hardening.
1.6.47
- Maintenance release: plugin packaging consistency update.
1.6.10
- Add: Manual member assignment in MobilePay import preview — allows overriding auto-matched members when MobilePay includes middle names or other variations
- Add: Member picker input in import preview table for each payment row; updates staging table before merge
- Add: AJAX handler
wam_premium_update_manual_membernoto persist user selections from preview UI
1.6.9
- Fix: QuickPay enabled setting can now be reliably toggled on/off in Payments settings.
- Change: Normalize legacy QuickPay toggle values for backward compatibility.
1.6.8
- Add: MobilePay CSV import — two-step flow on the Import Payments page (MobilePay tab)
- Add: Automatic member matching via email (from message field), mobile last-4-digits, or full name
- Add: Preview table shows matched/unmatched rows before committing; deduplicated by transaction ID
1.6.7
- Fix: Load shared front assets on pages using [wam_new_member_form] so form styling and behavior match [quickpay_new_member_form]
- Change: Apply DAWA address autocomplete container markup consistently to both new-member shortcodes
- Fix: Import admin and AJAX class parsing/structure corrections for stable deployment
1.6.6
- Add: CSV import supports format selection (new English-column format and legacy standard format)
- Add: Missing MemberNo in import now uses standard automatic member-number allocation
- Fix: Members import admin page conditional rendering to prevent PHP parse errors in deployment
1.6.5
- Add: New shortcode [wam_new_member_form] — generic WooCommerce payment variant of [quickpay_new_member_form]; creates a pending WooCommerce order and redirects the user to the active payment gateway
- Add: CSV member import now supports fallback member-number assignment when MemberNo is missing (uses standard auto-allocation setup)
1.6.4
- Change: Maintenance release
1.6.3
- Fix: Load WordPress media library correctly on Categories admin page so category images can be selected
- Change: Hide category selection in quickpay_new_member_form when only one selectable membership category exists
1.6.2
- Change: Declare WooCommerce feature compatibility explicitly (HPOS compatible, Cart/Checkout Blocks not supported)
1.6.1
- Fix: Deployment packaging correction to include missing runtime class files (including WAM Go helper) in released builds
1.6.0
- Change: WordPress login links now route members to the configured medlemsportal URL while preserving admin authentication flows
- Change: Direct requests to wp-login.php now redirect guests to medlemsportal with redirect target preserved where relevant
- Change: One-time login code expiry is now centralized and configurable in seconds via plugin settings/filter
1.5.3
- Change: Always resolve {{org_email}} {{org_name}} • {{org_street}} • {{org_postal_code}} • {{org_city}} placeholders from settings when sending WAET emails
1.4.25
- Fix: WAET email template settings — intro text uses rich text editor consistently
- Fix: WAET template test-send works across templates (member no + email)
- Change: Create/update WAET sendqueue table only via version bump table update
1.4.24
- Fix: Self-healing BOM cleanup — scans all plugin PHP files on first load after update and strips UTF-8 BOMs at source
- Fix: Eliminates BOM contamination permanently even when server-side files contain BOMs introduced during build/sync
1.4.23
- Fix: ob_start callback now strips UTF-8 BOMs from output instead of just buffering them
- Fix: Prevents BOM contamination of WordPress update and AJAX responses
1.4.22
- Fix: Remove UTF-8 BOM contamination that corrupted AJAX/update JSON responses
- Fix: Remove PHP close tags (?>) from class and include files (WordPress coding standard)
- Fix: Add early AJAX output buffer in main plugin file to catch stray output from require_once
- Fix: All AJAX handlers now flush ALL output buffer levels before sending JSON
1.4.21
- Security: Rewrite Members_List_Table::get_table_data() with $wpdb->prepare() — removes esc_sql() and direct variable interpolation
- Fix: CRITICAL bug in helpers.php update_max_ordernumber_from_input() — $wpdb->get_var() was misused as prepare(), %s never substituted
- Fix: Replace die(json_encode()) with wp_send_json() in wa_members_ajax_response()
- Fix: Guard $wpdb->prepare() with empty params in export_members and export_member_addresses
- Fix: Remove trailing PHP close tag from Members_List_Table
1.4.20
- Fix: Remove undefined $value reference in Members_List_Table constructor (PHP 8 warning)
- Fix: Skip $wpdb->prepare() when no placeholders in Category and Payments get_total_count() (WP 6.2+ compat)
- Fix: Add output buffer safety to all AJAX handlers to prevent stray PHP output corrupting JSON
- Fix: Add error callback to members AJAX display for debugging
- Fix: Category search/status event binding now reads from DOM instead of passing jQuery Event
1.4.19
- Fix: Use dedicated AJAX action for WAET test emails to avoid handler collisions
- Change: Align WAET queue table schema with production structure
1.4.18
- Change: Simplify WAET template settings into accordion list
- Change: Accordion closes other templates when opened
- Fix: Test email buttons now target the correct template fields
- Change: Use internal sequential order id for 0 DKK subscription setup and Woo order number for paid charge
1.4.17
- Fix: New member flow creates order line item and keeps WAMP_PAYMENT linked to Woo order
1.4.16
- Fix: Nonce handling returns user-friendly error instead of 403
1.4.15
- Change: Standardize recurring charges on quickpay_payment_by_subscription
1.4.14
- Change: Woo gateway redirects to QuickPay Payment Window if subscription is missing
1.4.13
- Fix: Remove members area table fallback and fail fast when bootstrap/table is missing
1.4.12
- Build: Version bump
1.4.11
- Fix: Remove dbDelta inline comments in members area table
1.4.10
- Build: Update available for injection validation
1.4.9
1.4.8
- Fix: Member token login - create user if not exists
- Fix: Database schema version now matches plugin version (WAMP_VERSION)
- Fix: SQL syntax error in wam_members_area table creation (removed invalid comment)
1.4.7
- Fix: Member token login undefined variable error in portal AJAX
1.4.6
- Remove bundled update checker (WAUM handles updates)
- Cards terminology and i18n keys for portal
- Update POT template
1.4.5
- Update language files
1.4.4
- Change Subscription to Card
1.4.3
- Build: Ensure PluginInstaller loader is packaged correctly from shared source
1.4.2
- Update Checker: Make class generic and pass slug/server from bootstrap
1.4.1
- Update Checker: Use dynamic slug via WAMP_SLUG
1.4.0
- WebAlive Tab: Load shared installer loader in plugin bootstrap
1.3.9
- Use new tab=webalive
1.3.8
- Changed handling of wp login and members
1.3.7
- JS updated for better apple handling
1.3.6
- Debug: Added error logging for plugin-info.php failures to diagnose "Plugin not found" issues
1.3.5
- WebAlive Tab: Ultra-minimal remote loader implementation (~50 lines inline)
- WebAlive Tab: Shows all available WebAlive plugins (sales channel)
- Architecture: All logic loaded from update server - no class files needed
- Optimization: Reduced from 172 lines to 50 lines of integration code
1.3.4
- Architecture: Removed PluginInstallerRemote - WebAlive tab now only in WAUM
- Optimization: Reduced plugin size by removing duplicate installer code
- Update: Relies on WAUM for plugin installation interface
1.3.2
- Added WebAlive plugin installer tab integration
- Users can now browse and install all WebAlive plugins from WordPress admin
1.3.1
- Skiftet titel til WebAlive Members Premium
- Plugin now checks for updates automatically via custom update server
- Improved plugin update workflow and notifications
1.3.0
- Added automatic update checker integration with updates.webalive.dk
- Plugin now checks for updates automatically via custom update server
- Improved plugin update workflow and notifications
1.2.0
- Previous stable release with all membership management features
0.9.0
- Added WP User sync logic with wa_members table
- AJAX-powered modals for member actions (edit, remove, unremove)
- Enhanced UI with Bootstrap styles
- Optimized database queries and pagination
- Added Mailchimp tab and API configuration
- Modernized import workflow (CSV & MSSQL) with AJAX feedback and summary cards
0.8.0
- Initial public release