• jmiller released this 2026-07-04 06:42:56 +00:00

    Added

    • Mirror Domains & Staging — repeatable subform table in DevTools plugin for configuring domain aliases with per-alias offline bypass, robots directive, and labels
    • Daily Support PIN — HMAC-SHA256 rotating PIN shown on cpanel module, component dashboard, and HQ site cards
    • Support PIN in status bar — cache/temp module now shows PIN request button instead of domain; click to request, click again to copy
    • Frontend link in status bar — cache/temp module now has 4 buttons: Site (frontend link), PIN, Cache, Temp
    • Help buttons — all admin views link to Gitea wiki pages via toolbar help button
    • Support PIN in heartbeat — core system plugin includes current PIN in heartbeat payload to HQ
    • HQ config sync — client stores HQ-configured support_pin_hours from heartbeat response, PIN TTL now configurable from HQ

    Changed

    • Support PIN UI unifiedSupportPinHelper::renderBadge() and renderScript() replace 3 separate inline implementations (dashboard, cpanel module, cache module) with click-to-copy on all PIN badges
    • Admin sidebar menu module now loads component-local language files (fixes untranslated keys for MokoSuiteCross and other components)
    • Support PIN TTL is now configurable via HQ global options instead of hardcoded 72 hours
    • Removed MokoSuiteHQ from extension catalog (internal app, not for client sites)
    • SupportPinHelper — shared helper centralises PIN generation across dashboard, cpanel module, cache module, and AJAX controller
    • Current IP display — firewall plugin settings show admin's IP with copy button
    • Heartbeat monitor — consolidated into core plugin from retired monitor plugin, with diagnostic logging on all bail-out points
    • Backup bridge plugin — discovers MokoSuiteBackup's BackupStatusHelper and sends status in heartbeat payloads
    • Activity log — blockchain-style hash chain for tamper detection in MokoSuiteHQ
    • Dev domain in heartbeat — client sends dev alias to HQ for display on dashboard
    • Login app badges — recent logins table shows Admin/Site badge parsed from Joomla action log message JSON

    Changed

    • Plugin install — self-healing: extracts plugin zips from package on every update, creates missing extension records with namespace
    • Menu naming — MokoSuiteClient displays as "MokoSuite", MokoSuiteHQ as "MokoHQ", others stripped of prefix
    • Menu ordering — HQ first, MokoSuite second, others alphabetical
    • Cpanel module — always starts collapsed, access level 3 (Special), pretty plugin badge labels
    • Module namespaces — fixed cpanel (MokoSuiteCpanel → MokoSuiteClientCpanel) and cache (MokoSuiteCache → MokoSuiteClientCache)
    • Health checks — return status:error on exceptions instead of false status:ok; MokoSuiteBackup detection queries correct table
    • Heartbeat — correct URL (suite.dev), correct API route (mokosuitehq), correct headers (X-MokoSuite-*), fresh RSA key pair
    • Date formats — all templates use Joomla locale-aware DATE_FORMAT_LC2/LC4
    • Domains — updated from waas.dev to suite.dev.mokoconsulting.tech throughout
    • Dashboard info bar — reverted stacked layout; info items back to horizontal row
    • Extension version bar — full-width auto-sized strip with equal-width cells and border separators
    • Recent logins — exact match on LOGGED_IN key (excludes logout noise), limit increased to 10

    Removed

    • Helpdesk/tickets — migrated to MokoSuiteCRM (issue #67)
    • Monitor plugin — retired, config consolidated into core plugin
    • Backup bridge — temporarily removed from package manifest (build pipeline issue)
    • Update server migration — removed migrateUpdateServerUrls, cleanupStaleUpdateSites, fixUpdateRecords, enableUpdateServer calls

    Fixed

    • Regular Labs import — destination tables missing from SQL update files; sites that upgraded never got the tables, causing "No data found" on import
    • Regular Labs import banner — detection now requires both source AND destination tables before showing the import button
    • DB-IP auto-enrichment — all IPs in <code> tags in admin backend now show country flag emoji and geo tooltip on hover
    • MokoSuiteBackup quick action — dashboard now includes MokoSuiteBackup button when component is installed
    • PIN copy — fixed duplicate click handlers (4 toast messages), "Copied!" not reverting, added "Click to copy" hover tooltip
    • Health endpoint cron check SQL error — orphan setQuery(getQuery(true), 0, 5) produced bare LIMIT 5, returning 503 for all health polls
    • License plugin missing src/ and language/ directories causing install failure
    • PIN generation inconsistency — controller used floor(now/TTL) while display used floor(requestedAt/TTL)
    • Plugin files installing to group root instead of element subdirectory (ALTER TABLE DEFAULT '' + empty element cleanup)
    • Orphan extension rows with empty element or display-name-as-element
    • Module not publishing (ensureAdminModule direct DB update bypasses checked_out)
    • RSA key pair had Windows line endings causing signature verification failure
    • Heartbeat connection failing due to wrong domain, route, and header names

    Sign in to download release files.