Questions? Email [email protected] · All prices are one-time unless stated otherwise
D
Datapad Projects
Reference

Changelog

Release notes for every published CampaignCanvas version, newest first.

1.1.16

  • Marketplace listing refresh. The package description and README have been rewritten into clearer, benefit-led copy covering the full forms + newsletter platform, with extra discovery tags (newsletters, email-marketing, gdpr). No functional changes — this release exists to publish the updated listing.
  • Docs — corrected licence-key link. The Licence key section pointed at campaigncanvas.net for installation instructions; it now points at the Datapad customer portal (projects.datapad.nl/projects/campaigncanvas), matching the purchase and support links.

1.1.15

  • Fix — an expired trial could still display as "Active". The License page and banner decided "active" from a cached flag without re-checking the expiry date, so a lapsed trial could show "Active" next to "Expired". An expired trial now correctly reads as inactive — so the genuine licence state, and any activation issue behind it, is no longer hidden.
  • Clearer activation failures. Entering a licence key that can't be validated no longer silently reverts to the trial. The page now states the reason — and an unlicensed domain reads "Domain 'X' isn't on this license yet. Add it in the portal at projects.datapad.nl, then click Refresh." instead of a generic message.
  • Diagnostics. When a validation response is rejected as outside the freshness window, the log now records the response's issuedAt and this server's current time, so a clock / time-sync problem on the host is obvious at a glance.

1.1.14

  • Maintenance. Licensing reliability and internal housekeeping.
  • Backoffice. The CampaignCanvas dashboard now shows the installed package version, so it's easy to confirm which build a site is running.
  • Licensing. Licence validation now reports the running Umbraco and CampaignCanvas versions to the licensing service, so compatibility guidance stays accurate.

1.1.13

  • Fix — newsletter settings page on SQL Server. The migrations that add the preferences-link and subscription-pages columns to the newsletter settings row used ALTER TABLE ... ADD COLUMN ..., which is valid SQLite syntax but invalid on SQL Server (SQL Server's ALTER TABLE ADD does not accept the COLUMN keyword). On SQL Server installs upgrading from 1.1.11 or earlier, the migration silently failed inside the startup upgrader and the newsletter settings page then errored with Invalid column name 'includePreferencesLink' / 'preferencesPageUrl' / 'subscriptionPagesJson'. The migrations now emit the keyword-free ALTER TABLE T ADD col TYPE form, which is valid on both providers. Every other ADD COLUMN migration in the plan got the same correction so future upgrades from intermediate versions don't hit the same trap.

1.1.12

  • Preferences link in campaigns. Outbound campaigns can now carry a "manage your email preferences" link in the footer alongside the existing unsubscribe link. Enable it from Newsletter settings and point it at a content page that hosts a preferences form — the link is signed per-subscriber, so the destination form consumes the token and writes back to the right subscription record.
  • Mailing-list checkboxes form field. New field type that renders one checkbox per configured mailing list and stores the ticked ids on the submission. Paired with the existing "Add to mailing list" workflow so a single form can opt a submitter into several lists at once, with labels captured at edit-time so renames don't break public pages.
  • Resubscribe after unsubscribe. The unsubscribe-success page now offers a one-click resubscribe path back into the same list. The link is a signed, single-purpose token (separate from the unsubscribe token) so an accidental unsubscribe is reversible without re-confirming via double-opt-in.
  • Editable copy for lifecycle pages. Every subscriber-facing page served by the newsletter controller — confirm-success, unsubscribe form + success, resubscribe form + success, invalid-token — now has editable heading / body / button-label slots in Newsletter settings. Blank slots fall through to the built-in defaults so editors can override only the strings they care about. The {listName} placeholder is substituted at render time.
  • Fix — emails referencing https://localhost. Logos, unsubscribe, preferences, open-pixel, and click-redirect URLs in dispatched campaigns now resolve to your public host. The background send worker has no HTTP context to derive a base URL from, so the public URL builder now falls back to Umbraco's WebRouting:UmbracoApplicationUrl configuration. Configure Umbraco:CMS:WebRouting:UmbracoApplicationUrl in appsettings.json for this to take effect — see Configuration.

1.1.11

  • Licensing. Licence validation now talks to the Datapad Licensing service (projects.datapad.nl). All purchase, support, and "manage your licence" links route through the customer portal at projects.datapad.nl/projects/campaigncanvas.
  • Hardening. The on-disk licence cache stores the raw signed envelope and verifies its Ed25519 signature on every load. Tampered cache files are discarded; legacy plaintext caches are migrated transparently.
  • Backoffice. Swept deprecated Umbraco backoffice APIs (auth.getLatestToken(), UmbPropertyValueChangeEvent) so the package stays compatible with upcoming Umbraco releases.

1.1.10

  • Fix. Custom Block Grid components in newsletters now render in the spot you placed them. The newsletter dispatcher sets a CampaignCanvas.IsNewsletterRender ViewData flag so host partials can emit table-row markup (<tr><td>…</td></tr>) for the email's outer table while keeping their normal page markup elsewhere. Previously, partials that emitted non-table HTML were hoisted out of the email's outer <table> by the browser and appeared above the email card.

1.1.9

  • Fix. Trial countdown now persists across app restarts and the 24-hour licence-cache refresh, so the banner correctly ticks down from 14 days instead of re-anchoring to "now" on every refresh.
  • Hardening. The persisted trial-state file is HMAC-signed, so manual edits to the start date are detected and the trial falls back to unlicensed instead of silently extending.