pkg_subsmgr changelog
Notable releases and milestones for Subscription Manager (pkg_subsmgr).
| Version | Summary |
|---|---|
| 4.5.68 (production) | Review card buttons work on cached sites. Maybe later and Don’t ask again now dismiss the “Leave a review on the JED” card on sites with caching on; previously the card could come back on the next page load. Old pricing links still land on prices. A pricing link that names an extension under its former component name (for example com_veriform, on this site is which is now the pkg_veriform package) is redirected to the package’s pricing page with the chosen tier kept, rather than showing a “get in touch” card with no prices. A link for an extension that does not exist goes to the directory with a notice. |
| 4.5.66 (production) | Trial to paid follows the dashboard period. The table now shows the trial sites that started in the selected period, how many of those have since bought, and the rate, so This Week, Last 12 Weeks and Yearly each give their own figures. Products with no trial in the period are left out. |
| 4.5.65 (production) | Missing Feature Rows you can act on. Each row on the dashboard card now links to the subscription key that reported it and says how to fix it: Add feature row when the feature has no row under Product Features, or Refresh key when the row exists but the paid key was issued before it. Refreshing a key clears the rows it reported. |
| 4.5.64 (production) | Complete trial-to-paid figures. Trials registered for a personal key now count as trial sites, and a purchase converts the same customer’s trial even when they bought for a different site (matched by email). Updating fills in the history from the keys you have already issued, so Trial to paid, by product is complete straight away. Each site is counted once per product. |
| 4.5.63 (production) | See which trials become paid. When a paid key is used on a site that trialled the same product, the trial now counts as converted, dated when the key was bought. A new Trial to paid, by product table on the dashboard shows trial sites started, conversions and the all-time rate for each product. Prices beside Upgrade buttons. The tier comparison your extensions fetch now includes each tier’s price from your Payments plans, so their Upgrade buttons can say “Standard from £49/yr”. A pricing page before checkout. Upgrade buttons that name a tier now open the pricing page with that tier picked out and a Continue to checkout button, instead of going straight to the card form. Also: once you have sold a paid subscription the dashboard asks once for a review on the Joomla Extensions Directory, and the Trial keys guide link points at the guide’s new address. |
| 4.5.62 (production) | Copyright on every directory card. The extensions list now fills in a copyright the listing doesn’t have from the extension’s manifest, as each extension’s own page already did. A listing whose copyright had never been saved showed it on its page but not on its card in the list. |
| 4.5.61 (production) | Directory listings show copyright and build date for every extension. The directory now reads each extension’s copyright, author, licence and “Last Updated” date from the release ZIP it hands out, falling back to the installed extension. Previously it only read the installed extension, so a listing for an extension not installed on the site running Subscriptions Manager showed no copyright and an out-of-date “Last Updated” date. Saving a listing no longer clears a copyright that can’t be read from a manifest. |
| 4.5.60 (production) | A directory that site audits read cleanly. Download buttons are now form buttons rather than links: visitors download exactly as before, but search engine crawlers no longer follow them, so audits stop reporting download links as redirects, nofollow links and noindexed pages. The Extensions directory list now has a share image — MetaGen’s default share image, or the one Cassiopeia Themer generates. App pages get a proper page title (the app’s name and short description, with your site name as set in Global Configuration), a canonical link and share tags using the app’s feature graphic, and a single address: other routes to an app page redirect to it. |
| 4.5.59 (production) | Download links no longer loop for search engines. A Download link opened without a valid session, for example by a search engine crawler, an expired page or a shared link, now goes to the extension’s page with a note to press Download again. Previously it redirected back to itself, which site audits report as redirect loops. The extension page’s structured data also names the page as the download address rather than the download action. |
| 4.5.58 (production) | A steadier screenshot carousel. On an extension page, every screenshot now sits in the same frame, so the carousel no longer changes height between slides. Captions sit in a strip under the image, the dots that show which screenshot you’re on appear below the caption instead of on top of it, and the arrows stay centred on the image. |
| 4.5.57 (production) | One address for every directory page, and better screenshot descriptions. Each public extension page now has a single address: the extension’s own menu item if it has one, otherwise the Extensions directory with the extension named. Search engines are given that address as the canonical, share previews use it, and every link in the directory points to it. Old and alternative links (for example /component/subsmgr/?view=extension…) redirect there permanently, so no page is indexed twice. The directory list does the same and keeps any filters. Screenshots gain a Caption field, shown under the image and used as its alternative text; without a caption each image is described as, for example, “MetaGen – screenshot 2 of 4”, so no two share the same description. |
| 4.5.56 (production) | Social previews for your extension directory. The public extension pages and the directory list now publish their Open Graph tags in the form Facebook, LinkedIn and search tools read, include the page address, and give the extension image as a full web address — so shared links show a proper title, description and picture, and SEO audits no longer report the tags as missing or not matching the canonical. |
| 4.5.55 (production) | Customers on the Updates list, and email only for those who are. Registering now puts a customer straight on the Verified Forms Updates list, rather than waiting for a manual sync. A new Add customers to Updates button on the Customers page adds everyone else — including customers who bought without registering — and never re-subscribes anyone who unsubscribed. The page shows how many customers are on no list, and the Email buttons are unavailable, with the reason, for anyone on no list or unsubscribed. Ready-written customer emails. The Email button on the Customers page and on each customer’s page now opens a complete email suited to where they stand — a check-in for paying customers, a nudge with plan links during a trial, a win-back when something has ended, or a getting-started note after a payment — naming every relevant extension, not just one. Tidy the email history. An entry in a customer’s email history can now be deleted, for an email you opened but didn’t send. |
| 4.5.54 (production) | Hide customers from the Customers list. Each customer now has a Hide button — useful for your own sites and test accounts — so the list shows the people who matter. Nothing about the customer is changed or deleted. A Show filter switches between customers who aren’t hidden (the default), hidden customers, and everyone, and Unhide brings a customer back. Smaller fixes. The extension picker and the Tiers list filters now fall back quietly if their data can’t be loaded, instead of showing an error. |
| 4.5.53 (production) | A Customers page. A new Customers page lists everyone with a subscription key or a payment, one row per person, paying customers first: their products and tiers, status (Paying, Paid with no key, Trial, Lapsed), what they have paid through Payments and when, when their site last checked in, their email lists in Verified Forms, and when you last emailed them. Search by name, email or domain and filter by status or product. The dashboard’s Paying Customers figure now opens it. The old worklist of renewals, upgrades and lapses is renamed Retention. A fuller customer page. Each customer’s page now shows their current tier for each product, their payment history, their email lists and every email sent to them from the admin. It also opens for someone who has paid but has no key yet. Know who you’ve emailed. Every Email button in Subscriptions Manager now records the email — who, when and about what — and lists show when each customer was last emailed. Retention lists, and the dashboard’s Lapsed and Expiring lists, no longer include customers who have already renewed or upgraded, so nobody is asked to buy something they already have. |
| 4.5.52 (production) | Ready-to-send win-back emails. The Email button on Lapsed but Still Running (dashboard) and on the Activity page’s expired list now opens a complete email in your mail client, not just a subject line. An expired trial is invited to subscribe — naming the site it is still installed on — and an expired paid subscription is asked to renew at its tier, each with a link to the product’s pricing page on your site. The email is signed with your name, and you can edit it before sending. Other contact emails now refer to the customer’s subscription rather than a licence. |
| 4.5.51 (production) | One period for the whole dashboard. The date range selector (This Week, Last Week, Last 12 Weeks, Yearly) now sits at the top of the dashboard as a highlighted Period bar and applies to everything below it: Analytics, the New Paid figure, and the Health lists — new paid registrations, paid but not activated, lapsed but still running, captured trial leads and missing feature rows. Each section shows which period it covers; Expiring Soon still looks ahead 14 days and says so. Your choice is remembered between visits. Anomaly checks that age out. The Anomaly Detection page has its own remembered period — last 7, 30 or 90 days, 30 by default — for the domain-limit, rejection and invalid-key checks, so old events drop off the report. Domain-rejection bursts previously counted every validation a key had ever made rather than its recent rejections; it now counts only rejections in the period. Paid keys over their domain limit now uses the limit validation actually enforces, so Enterprise keys are never shown with a limit of one, and www. and non-www. addresses count as the same site. Enterprise domains always unlimited. An Enterprise key upgraded from a lower tier could keep that tier’s domain limit when its product had no max_domains feature set. Enterprise now falls back to unlimited domains. |
| 4.5.48 – 4.5.50 (production) | See which product features are missing a row. When a product checks its subscription, it can now name the features it enforces. Any of those with no matching row in Product Features is recorded and listed on the dashboard under Health, by product, tier and feature, with a count of how often it was asked for — the first place to look when a customer reports a feature that won’t switch on. The product keeps working on its built-in tier defaults meanwhile, so adding the row is the fix. Recording never affects the validation answer, older products that don’t send the list are unaffected, and only the last few characters of a key are stored. Accurate pricing in search results. The structured data on an extension’s pricing page now carries the real lowest paid price and currency and links to the pricing page, and is left out when no paid plan applies; it previously advertised a fixed placeholder price at an address that didn’t exist. The thank-you note’s support link now goes to the contact page. |
| 4.5.47 (production) | Merge duplicate extensions in the directory. A new Merge action on the Extensions list consolidates two directory records for the same extension — the kind left behind when an extension is repackaged (for example a component com_x that later ships as a package pkg_x), each carrying its own split download and hit totals. Check the source record(s), choose the target, and in one step its download and hit totals are added to the target and its download/hit history re-pointed, so the all-time, time-windowed, JED and analytics figures all stay correct; the source record is then removed. It is an admin-only maintenance action behind a clear destructive-confirmation dialog — a live summary naming exactly what will be deleted and where the totals go, and a required backup acknowledgement — and it refuses to run if a source still has subscription keys, so licence data is never stranded. |
| 4.5.46 (production) | More reliable update checks, and clearer download metrics. Subscriptions Manager now serves its update feed from a dedicated address (updates.multizone.co.uk) instead of the main website, sidestepping a security challenge that could occasionally cause a “Could not parse” error when Joomla checked for updates — applied automatically on install, and updates remain free with no key required. The public extension-directory download count now reflects first-time downloads (acquisitions) rather than update fetches, and downloads that arrived from the Joomla Extensions Directory are now tracked and shown separately once there’s a meaningful number. |
| 4.5.35 – 4.5.45 (production) | Amazon Appstore support for the app directory. A mobile app can now list an Amazon Appstore link as a first-party store, alongside Apple and Google Play — it appears with the Amazon logo in the admin app list and as a store button on the public app pages. The Source Code Licence field also gains a “See licence attribution in the app” option for apps that rely on many third-party libraries attributed in-app. Includes assorted trial and licence-handling consistency fixes from this run. |
| 4.5.34 (production) | Validations list shows the real extension name for trial check-ins. In the Validations log, anonymous trial check-ins now show the friendly extension name (for example “Content Planner”) like paid keys do, instead of a raw slug — resolving it whether the trial was logged under the component or the package name. |
| 4.5.21 – 4.5.23 | Directory and app view counts now reflect visitors, not page clicks.
|
| 4.5.20 | A cleaner validation log — grouped by domain, dev noise hidden, and automatic pruning.
|
| 4.5.18 – 4.5.19 | A sharper admin: a subscriptions health worklist, validations grouped by domain, and actionable anomaly follow-ups.
|
| 4.5.16 – 4.5.17 | Pricing pages follow your site theme, plus a tidier admin layout.
|
| 4.5.0 – 4.5.14 | A professional “Edit your profile” page, marketing opt-in back at sign-up, dashboard polish, and a cleaner update experience.
|
| 4.4.0 – 4.4.1 | A quieter, more readable validation log. Routine “valid” check-ins from customer sites are now recorded at most once per site per day, rather than every time an older extension calls home — so the Validations screen shows real activity instead of pages of repeats. Nothing actionable is lost: invalid, expired, suspended and domain-limit results are always logged with their reason, a site’s first check-in from a new domain is always recorded, and the “silent churn” and active-site figures are unaffected (they track the most recent check-in, not the volume). A new database index keeps the check fast on the validation endpoint. |
| 4.3.7 – 4.3.9 | Email preferences on the subscriptions dashboard.
|
| 4.3.0 – 4.3.6 | Featured Panel — a weekly cross-sell card you edit once and every extension shows.
|
| 4.2.0 | Registration consent simplified to a single clear card, self-service email preferences on the dashboard, and Marketing Subscribers retired from sign-up.
|
| 4.1.2 | Link your listings to the Joomla Extensions Directory. Each extension in your directory can now carry a “Joomla Extensions Directory URL”. When set, the public extension page shows a “Listed in the Joomla Extensions Directory” link, marked with the Joomla icon, under the extension type — giving visitors a direct route to your JED listing and reviews. |
| 4.1.0 (production) | Signing-key management, rotation and recovery without the command line; the issuing authority is now proven by key possession, not by domain; new production signing key.
|
| 4.0.33 – 4.0.48 |
Joomla framework gate — consent plugin now goes through the User model; DB Check self-heals stuck subscription_keys.status enum; dashboard Upgrade CTAs unified.
|
| 4.0.22 – 4.0.32 | Dashboard, retention tooling and analytics.
|
| 4.0.21 | Joomla 6 compatibility for tier sync & validation. Remote licence validation and tier-feature sync now read HTTP responses through the current Joomla API. On Joomla 6 validation and tier sync could silently fail. No configuration change required. |
| 4.0.20 |
Paid-extension checkout fixes.
|
| 3.2.0 | Joomla 6 Pre-Update Check no longer flags plg_system_subsmgrtasks or plg_system_subsmgrconsent as Potentially Dangerous Plugins. Each system plugin now declares its own compatibility-only update manifest so the check can verify J5 / J6 compatibility — pkg_subsmgr itself remains the canonical update path, so customers always update via the package. |
| 3.1.7 |
Production release consolidating issues found in testing. Versions 3.1.1 through 3.1.6 iterated through the changes below before this consolidated release shipped. Validation drill-down + traffic reduction + SEO.
|
| 3.1.0 | All five extensions updated to 3.1 — coordinated production release. |
| 3.0.38–3.0.48 |
Dashboard rebuild.
|
| 3.0.37 | Joomla 6 update XML targetplatform now includes 6.* so the Pre-Update Check no longer flags the package as J6-incompatible. Dashboard tile regex fix in the “Multizone Extensions” panel: the previous removal regex was lazy-matching the first nested </div> inside a tile, leaving the back half of <li> markup orphaned in the module content; replaced with a tempered-greedy pattern anchored to </li> so future uninstall + reinstall cycles can no longer corrupt the panel. |
| 3.0.36 | Joomla 6 compatibility for the bundled plg_system_subsmgrtasks system plugin. The legacy flat-file plugin (root-level subsmgrtasks.php with deprecated protected $app/$db properties and an empty onAfterInitialise()) was the source of the J5→J6 pre-update warning. It has been replaced with the modern namespaced Ezone\Plugin\System\Subsmgrtasks structure that was already in the source tree but never packaged: real ExpiryNotificationTask for scheduled subscription-expiry emails, service provider, PSR-4 layout. pkg_script postflight removes any orphan flat-file from existing installs. |
| 3.0.33–3.0.35 | Internal refinement of the Mobile Apps Directory shipped in 3.0.32 — admin list filters, dashboard KPI counters, security-audit dates rolled forward. |
| 3.0.32 |
Mobile Apps Directory — new sibling to Joomla Extensions.
|
| 3.0.30 | New stable JED-compatible download URL: index.php?option=com_subsmgr&task=download.latest&extension={slug}. Free extensions serve the latest ZIP directly; trial/paid extensions redirect to the detail page where registration/login gates the download. Suitable for JED "Free" and "Free but registration required at link" listing types. |
| 3.0.29 | Per-event activity tables (#__subsmgr_extension_hits, #__subsmgr_extension_downloads) enable time-windowed analytics: new Period filter (All Time / Last 7 days / Last 30 days) on the admin extensions list scopes hits and download counts accordingly. Dashboard KPIs refreshed: "Directory Views (7 days)" (tracks the site Extensions Directory landing page) and "Downloads (7 days)" replace the single "Downloads This Month" card; the Extensions KPI is removed in favour of a focused 4-card layout. Extension edit view now reads version from the installed Joomla manifest XML on every load (no longer shows stale DB value between deploys). |
| 3.0.28 | Component renamed to “Subscriptions Manager” (plural) across language strings, manifests, documentation and JED graphics. Download count now increments on all three download paths: free-extension direct downloads, key-authenticated downloads, and the Joomla update system package endpoint. Guest download support for free extensions (keyless one-click download flow from the site detail view). |
| 3.0.27 | GDPR email consent plugin: update and marketing consent checkboxes on registration, marketing opt-out toggle on profile edit, consent-based user groups for Joomla mass mail filtering, sendEmail management, consent audit trail in privacy consents table. |
| 3.0.26 | Fixed SQL installation error on MariaDB – removed unsupported ADD COLUMN IF NOT EXISTS syntax from installer SQL that caused fresh installs to fail |
| 3.0.25 | Hit counter tracking page views per extension detail page (admin list and edit view); manifest auto-detection populates copyright, author, author email, author URL and licence type from installed Joomla manifest XML; author email updated to |
| 3.0.24 | Automated security scanning added to release workflow – grep-based static analysis covers CSRF, XSS, SQL injection, input validation, information disclosure, and error handling across all extensions. Security testing card on extension detail page now shows “Tested” date in card footer. CTA subtitle output escaped for defence-in-depth. |
| 3.0.23 | Extensions directory polish: version number on its own metadata row, last-updated date display, Joomla version badges (J5, J6) parsed from compatibility data, extensions grouped by category with auto-generated headings and item counts |
| 3.0.22 | Smarter CTA cards: trial/paid extensions without payment plans now show a “Contact Us” card instead of incorrectly displaying “Free”; updated extension editor help to document all three access models |
| 3.0.21 | Unified pricing card structure: premium hero card, extensions list cards and extension detail card now share identical layout via shared PricingCardHelper; new payment trust line ("No payment required" / "Secure checkout by Stripe"); featured ribbon hidden when no label is set |
| 3.0.17 | In-component Help view with component-wide and per-view content, matching the pkg_payments pattern; help strings and view wiring updates |
| 3.0.16 | Split Stripe configuration checks into separate test/live sections in Setup Checklist for clearer visibility of which key set is configured |
| 3.0.15 | Multizone overlay refresh, data extract utility, and release notes housekeeping |
| 3.0.14 | Setup Checklist view: per-product configuration status with checklist items for extension directory and payment setup, KPI summary cards with threshold colouring, cross-component links to edit views |
| 3.0.13 | Cross-promotion panel, hide pricing button for free access model extensions |
| 3.0.12 | KPI backfill fixes, product feature filter improvements, cancel page tag corrections, safe multizone uninstall |
| 3.0.11 | Extension detail view redesign: pricing card matches list view pattern, tier comparison highlights featured tier, screenshots in full-width carousel, Requirements and Compatibility side-by-side, Documentation/Version History/Demo buttons in hero, Details button on premium view |
| 3.0.10 | Extensions list CTA card redesign with access model pattern, carousel chevron and indicator styling fixes, public changelogs for all extensions |
| 3.0.9 | Extensions directory redesign: responsive hero card replacing banner image, CTA pricing cards with trial days and download buttons, Bootstrap carousel with styled chevrons and indicators, consistent card widths, back link SEF URL fix, "Joomla Type" moved to extension info |
| 3.0.8 | Extension directory cards enriched with icons, category and licence badges, screenshot carousel, and copyright auto-detection from manifests |
| 3.0.7 | Featured tier pricing cards on extension detail view, payments plan unique key constraint fix |
| 3.0.6 | Publication changelogs for all extensions, SQL migration sync in postflight |
| 3.0.5 | Subscription widget link corrections, terminology alignment, grouped dashboard tile format migration and sizing fixes |
| 3.0.4 | Whole-number pricing display, Stripe tax label support, plans Stripe column additions |
| 3.0.3 | Active subscribers KPI, checkout improvements, success page account details |
| 3.0.2 | Bootstrap text-bg-* colour treatment across all site templates for theme compatibility |
| 3.0.1 | Dashboard house style standardisation, tier limits and pricing alignment across all products, grouped Home Dashboard tile |
| 3.0.0 | Major dashboard redesign with KPI cards, navigation cards, support pane, compact subscription status, and simplified tier limits |
| 2.9.9 | Bootstrap text-bg-* colour treatment across all site templates (premium, error, extension, extensions, dashboard) for theme compatibility |
| 2.9.8 | Per-row CTA buttons (Upgrade/Renew) for each subscription key, download button always visible |
| 2.9.7 | Theme compatibility fix for dashboard CTA card colours using Bootstrap 5.2+ text-bg-* utilities |
| 2.9.6 | Contextual CTA hero card on dashboard, domain usage column, streamlined subscription table with plural-aware headings |
| 2.9.4 | Tier comparison table on premium view, dev/prod URL isolation, multizone overlay manifest fix |
| 2.9.2 | Consolidated downloads into component admin folder, auto-detect version from download artifacts |
| 2.9.1 | Simplified download system with database-driven resolution, removed config-based URLs |
| 2.9.0 | Block unpublished extensions from direct URL, JED Checker compliance, idempotent multizone overlay |
| 2.8.10 | Fix in Extensions HtmlView |
| 2.8.9 | Removed internal tooling |
| 2.8.8 | JED Checker compliance: GPL licence fixes, deprecated API migration, language file deduplication |
| 2.8.7 | Mutually exclusive contact method fix, menu item param lookup for per-extension contact settings |
| 2.8.6 | Contact call to action for paid extensions, premium view contact scenario, and security hardening |
| 2.8.5 | Contact fixes |
| 2.8.4 | Theme compatibility refinements |
| 2.8.3 | Cassiopeia theme compatibility, contact conversion scenario |
| 2.8.2 | Security hardening across component |
| 2.8.1 | Product feature limit enforcement, branding updates |
| 2.8.0 | Site view restyling, extension directory with URL slugs, dashboard improvements |
| 2.7.0 | Product Features system, master mode validation, multizone data separation |
| 2.6 | Admin interface improvements and workflow refinements |
| 2.5 | Subscription key management enhancements |
| 2.4 | Email notification improvements and logging updates |
| 2.3 | Tier system refinements and performance optimisation |
| 2.2 | Extension directory and frontend improvements |
| 2.1 | Stripe payment integration via com_payments |
| 1.0 | Initial release — subscription key management with tiered system |