Ignition Crowdfunding v0.21.0
Test campaigns have always been isolated on the way in — a test campaign takes pledges through the real pipeline and settles them against sandbox credentials. This release finishes the job on the way out. A toggle in the admin bar puts every admin screen into Live or Test view, and the two sides never mix. Along the way it closes a real leak: test money was inflating the revenue chart on your dashboard.
New Features
Section titled “New Features”-
Live and Test view — A toggle at the far right of the admin bar switches every admin screen between live money and test money. The Pledges list, the Backers list, the Campaigns list, campaign and backer detail tiles, the dashboard cash-flow chart, the payment-method pledge counts and the CSV exports all follow it. The whole admin bar turns teal in Test view, so you can tell at a glance which side you are on. Settings do not scope — configuration reads the same either way; only the numbers change. See Live and Test view.
-
Empty screens that explain themselves — The failure this guards against is flipping to Test view, getting distracted, and returning to find zeros where forty backers used to be. So every empty list and every zero total says why, in words, where the rows or the figure would be: “You’re in Test view. No test pledges yet.” Zero-valued tiles in Test view carry a caption. Live view says the same thing about filters rather than the view. See Live and Test view.
-
The view travels in the link — The mode rides in the page address, so a link copied out of Test view opens in Test view for a colleague, and two tabs can sit in different views without fighting. Your last choice is remembered as where you land next time, per site — on a network, switching one site’s view leaves the others alone.
-
Creation follows the screen, not your habits — In Test view, Add New Campaign becomes Add New Test Campaign. The button reads the current address rather than your remembered default, so a tab left open since yesterday cannot create a campaign on the wrong side. That mistake is unrecoverable: a campaign’s side is fixed once it has pledges.
-
The switch sits with the settings — A payment method’s on/off switch moved from the Payments listing onto the method’s own Configure screen, so you set a method up and turn it on in one place instead of configuring it here and remembering to enable it there. The listing now shows a Configure → link. See Payments.
Improvements
Section titled “Improvements”-
Add-on Settings links can point anywhere — An add-on whose real settings screen lives elsewhere — a payment gateway’s own page under the Payments tab, say — now gets its Settings link sent there, instead of needing a second, near-empty page under Settings → Add-ons. See Add-ons.
-
Sign in, not log in — Frontend buttons now use Title Case, and the vocabulary is consistently “sign in” and “sign out” rather than a mix of both.
-
Test campaigns are teal — The Test status badge has its own colour rather than borrowing the amber that Paused and Pending Review already use.
Bug Fixes
Section titled “Bug Fixes”-
Test money no longer inflates your revenue chart — The dashboard cash-flow widget ran its three queries with a date window and no campaign filter at all, so every test pledge was counted as real income on the chart and in the running Received, Pending and Refunded totals. It now follows your view. See Dashboard Widget.
-
A backer who only pledged to a test campaign is no longer invisible — The Backers list excluded test pledges unconditionally, which meant a backer whose only pledge was to a test campaign did not appear anywhere. They now appear in Test view. See User Summaries.
-
Backers can see their own test-campaign pledge again — A backer’s frontend dashboard hid their pledge to a test campaign. It is a real pledge on a real account that received real email, so it belongs there. It now shows, badged with the campaign’s status so it is not mistaken for an ordinary one. See Pledges.
-
Campaign pages render in the right order on block themes — Single campaign and campaign archive pages built their output before the theme’s header and footer had registered their block styles and scripts, so a block theme’s navigation and header could render unstyled or broken. They now follow WordPress’s own render order.
-
Exports match the screen you ran them from — The Pledges and Backers export links only carried the view mode when it was Test, which encoded “no parameter means Live”. It does not — an absent parameter means “use my stored default”. An admin whose default was Test, looking at a Live screen, got a CSV of test money. Both links now carry the resolved view either way.
-
A backer’s Cancel pledge button no longer hangs — Cancelling a pledge from the backer dashboard could leave the button stuck reading “Canceling…” after the cancellation had actually gone through.
-
A bad scope no longer takes the page down — An admin screen asked for an unrecognized data scope produced a fatal error rather than a message. It now refuses the query and says the list could not be scoped.
Developer
Section titled “Developer”-
Cross-campaign queries require a scope — Every service method that aggregates across campaigns now takes a
scopeof'live','test'or'unscoped'. There is no default and no silent fallback: omitting it triggers_doing_it_wrong()and returns the empty shape. A wrong revenue figure gets pasted into a board deck; an empty screen gets reported. Queries already narrowed to one campaign or pledge are exempt. Money paths —Igcf_Refund_Service::query()andIgcf_Payment_Attempt_Service::query()— take no scope at all, deliberately, so a viewer’s chosen view can never reach a decision about real money. See Query scope. -
Pledges carry a durable mode stamp — Each pledge row records the side it was written on at creation, in an
igcf_pledges.modecolumn, rather than deriving it from the parent campaign’s current status. A post status is mutable and vanishes entirely when a test campaign is permanently deleted, which used to convert its pledges into live money.Igcf_Test_Campaign::campaign_scope_clause()builds the SQL fragment over it. See the Service Layer. -
Menu badges know the view —
igcf_admin_menu_badgespasses the resolved mode as a second argument. Data-driven counts should follow it so the bubble agrees with the screen it links to; config-driven counts should ignore it. Receiving it is opt-in viaaccepted_args. See Filters. -
One seam for who receives pledges —
igcf_pledges_go_to_creator()is the single site-wide answer to whether a pledge goes to the platform or to the campaign’s creator. Core returnsfalse; Ignition Platform Mode answers it from its own setting. Gateways branch on it rather than each carrying their own duplicate of the same choice. See Filters. -
A render slot on payment-method screens —
igcf_payment_gateway_settings_after_headerfires on a method’s settings screen, after the header and before the form, for context that spans methods rather than belonging to one. See Actions. -
Settings URLs for add-ons that live elsewhere —
igcf_addon_settings_urlregisters an absolute URL per add-on slug, for add-ons whose settings already have a home. Relative paths and unsupported schemes are dropped rather than rendered as a broken link. See Filters. -
The gateway toggle ability reports back —
igcf/set-payment-gateway-enablednow returns the method’s resultingstatusbadge and itslock_reason, so a caller can repaint the UI without a second request. See Abilities. -
The
show_test_campaigns_for_adminssetting is gone — Whether an administrator sees test campaigns is a capability check and a view mode, not a stored option.Igcf_Single_Campaign::get_status_semantic_map()and itsigcf_single_campaign_status_mapfilter are removed as dead code.