Version 5.0.5
September 17, 2026
Fixed
- Clicking Leads in the control panel sidebar 404'd.
getCpNavItem()inherited its top-level URL fromBasePlugin, which points at the bare plugin handle — andleadshad no CP route of its own, only its four children. The nav item now points at the first subnav entry the signed-in user can actually reach, andleadsis routed to the dashboard so bookmarks and typed URLs resolve too. (#2) - The Dashboard and Submissions subnav entries were shown to anyone holding
leads:accessPlugin, but their controllers requireleads:viewDashboardandleads:viewSubmissions— so those users were offered links that answered 403. Each subnav gate now mirrors the permission its controller enforces, and the nav item is hidden entirely when none of them are reachable.
Version 5.0.4
September 7, 2026
Fixed
- The popup editor was unusable. Control panel → Leads → Popups → New (and the edit screen for any existing popup) died with
Twig\Error\RuntimeError: Variable "forms" does not existbefore any field rendered.popups/edit.twigusedforms.textField()etc. without importing Craft's form macros — the 5.0.2 fix for this same bug in the settings template never made it to the popup editor. (#1)
Version 5.0.3
August 26, 2026
Fixed
- The Popups screen was unusable. It rendered
_elements/indexcontainerby hand and got three things wrong at once: no|raw, so the entire element-index markup was printed on the page as escaped HTML;sources: null, which makes Craft's index controller return no rows by design; and no source list, so Modals, Slide-ins, Drafts and the rest were unreachable. It now extends_layouts/elementindexlike every other screen. - The popups index returned HTTP 500 whenever the status column was shown. Craft 5 expects
statuses()to returncraft\enums\Colorcases rather than colour strings.
Version 5.0.2
August 19, 2026
Fixed
- Settings → Plugins → Leads now redirects to the plugin's own settings screen instead of embedding it. The embedded copy nested a full control panel page (with its own
fullPageFormand action input) inside Craft's settings form, producing a form-in-a-form with twoactioninputs that could post to the wrong handler. - The settings template now imports Craft's
formsmacros, which it relies on for every field it renders.
Version 5.0.1
July 19, 2026
Fixed
- Custom popup index columns (status badge, type and trigger labels) now render on the element index — updated the element to Craft 5's
attributeHtml()hook (the oldtableAttributeHtml()was silently ignored and could fatal on its fallback). - Submission custom fields are no longer double-encoded when saved — the value is stored as JSON once instead of a JSON-encoded string.
Added
- PHPStan (level 5) and ECS configuration, plus
composer phpstan,composer ecs, andcomposer checkscripts. - Regression tests pinning the Craft 5 element index-column contract.
Version 5.0.0
June 12, 2026
Added
- Initial release
- Popup types: modal, slide-in, notification bar, inline
- Trigger types: time delay, scroll percentage, exit intent, click
- 8 built-in popup templates (clean, bold, minimal styles)
- Form submissions with email, name, and custom fields
- Daily aggregated analytics (impressions, conversions, closes)
- Email integrations: Mailchimp, ConvertKit, webhook
- Queue-based background sync to email service providers
- Page URL targeting rules with wildcard matching
- Cookie-based frequency capping (frontend)
- Analytics dashboard with date filtering and per-popup stats
- Full Craft element index for popups with search and bulk actions
- Auto-inject script option or manual Twig functions (
leadsPopups(),leadsInline()) - Honeypot spam protection and per-IP rate limiting