2162 Commits

Author SHA1 Message Date
github-actions[bot] b269e15618 chore(version): auto-bump patch 01.04.04 → 01.04.05 [skip ci] 2026-04-07 18:41:47 +00:00
jmiller da0c28bc33 fix(deps): update enterprise constraint dev-version/04.02.00 → dev-version/04.05 2026-04-07 13:40:59 -05:00
jmiller 9a9533fc0d fix: align workflow version headers with plugin version 02.00.00
The version consistency checker expects all VERSION: headers to match
the project version. Workflow files had 04.05.00 (MokoStandards
release version) which caused drift detection failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:25:40 -05:00
jmiller be38ab4ad8 feat: Atum template branding with shipped media assets
Replace CSS-based logo injection with proper Atum template param
enforcement. The plugin now sets logoBrandLarge, logoBrandSmall,
loginLogo, and favicon via #__template_styles params — both at
install time and enforced at runtime.

Media assets shipped with plugin:
- logo.png → sidebar brand (expanded) + login page logo
- favicon_256.png → sidebar brand (collapsed)
- favicon.svg → modern browser favicon (SVG preferred)
- favicon.ico → legacy browser fallback
- favicon_256.png → Apple/Android touch icon

Removed per-config media upload fields (admin_logo, login_logo,
custom_favicon) — images are now fixed in the plugin media folder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:17:34 -05:00
jmiller 241fe08c63 Create favicon.svg 2026-04-07 13:15:53 -05:00
jmiller cf4c1571b2 Create favicon.ico 2026-04-07 13:14:50 -05:00
jmiller f32bd945d7 Images 2026-04-07 13:10:58 -05:00
jmiller cd0dc658c0 feat: restore login support URL enforcement
The mokoconsulting.tech/support, /kb, and /news pages exist. Restore
runtime enforcement in MokoWaaS.php and install-time write in
script.php.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:05:20 -05:00
jmiller 0b52d50e8a refactor: defer login support URL enforcement to future release
Remove enforceLoginSupportUrls() from runtime and
updateLoginSupportUrls() from install script. Both write hardcoded
mokoconsulting.tech/support, /kb, /news URLs to mod_loginsupport
module params — these pages don't exist yet.

Login support TEXT overrides (MOD_LOGINSUPPORT_FORUM etc.) are kept
since they work locally without an endpoint. The underlying hrefs
will still point to joomla.org until the endpoints are built and
URL enforcement is restored.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 20:49:12 -05:00
jmiller d47ae15b34 refactor: defer heartbeat and license check to future release
Remove operational fieldset (heartbeat telemetry, license check) from
v02.00.00. These features need a proper backend dashboard before they
are useful. Removed config fields, language strings, onAfterRender
handler, checkLicense(), handleLicenseFailure(), sendHeartbeat(),
getTableCount(), and HttpFactory import.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 19:10:55 -05:00
jmiller d5953603f2 docs: add test suites 2.15-2.18 for visual, restrictions, security, ops
- Suite 2.15: Visual branding (10 test cases)
- Suite 2.16: Tenant restrictions (10 test cases)
- Suite 2.17: Security hardening (10 test cases)
- Suite 2.18: Operations (8 test cases)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 19:01:03 -05:00
jmiller 2c171deadf feat: visual branding, tenant restrictions, security, operations
Visual Branding:
- Custom admin logo, login logo, and favicon via media fields
- Admin color scheme via CSS custom properties (primary, sidebar,
  header, link colors)
- Custom CSS textarea injection

Tenant Restrictions:
- Block non-master users from: Extension Installer, System Info,
  Global Configuration, Template code editor
- Hide admin menu items (auto-hides restricted components)
- Disable install-from-URL for all users (safety net)
- onPreprocessMenuItems filters admin menu dynamically

Security Hardening:
- Force HTTPS redirect (supports reverse proxy)
- Configurable admin session idle timeout
- Password policy: min length, uppercase, number, special char
- Upload type and size restrictions via runtime config override

Operations:
- Heartbeat telemetry: POSTs site health to WaaS dashboard URL
- License check: validates subscription via remote URL with
  warn/lockout actions and interval caching
- Joomla Update left to Joomla's built-in ACL (super users only)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:36:10 -05:00
jmiller c363c6077d docs: add test suite 2.14 for maintenance actions
Suite 2.14a: Reset All Hits (5 test cases)
Suite 2.14b: Delete All Versions (7 test cases)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 15:53:47 -05:00
jmiller fdae5f2dec feat: add maintenance actions to reset hits and delete versions
New Maintenance fieldset in plugin config with two one-shot actions:
- Reset All Hits: zeros out #__content.hits across the site
- Delete All Versions: purges all #__history records

Actions execute on save via onExtensionAfterSave, then auto-reset
the toggle to No. Both actions are logged to mokowaas category.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 15:52:05 -05:00
jmiller 5ddb9b04a3 docs: add test suites for master user, emergency access, non-overwrite
- Suite 2.11: WaaS master user enforcement (create/delete/block/group)
- Suite 2.12: Emergency access two-factor flow (DB password + file)
- Suite 2.13: Override install respects existing user overrides
- Updated Suite 2.9: added RegularLabs Position fix, Powered by links,
  login URL verification, and NOT-overriding checklist for HEADING keys

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 15:07:22 -05:00
jmiller 92bc51dc3e fix: install respects existing user overrides
Changed mergeOverridesIntoFile to collect keys already defined outside
the MokoWaaS block and skip them when building the block. User-set
overrides are never overwritten — only keys not already present get
injected. On update, the block is rebuilt with only missing keys.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 14:36:21 -05:00
jmiller 24109a8141 fix: pin COM_MODULES_HEADING_POSITION to prevent RegularLabs misrender
RegularLabs Advanced Module Manager shows wrong tooltip text for the
Position column. Explicitly overriding the key forces the correct value.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 14:33:01 -05:00
jmiller 740942228b fix: remove HEADING overrides that break table column labels
COM_MODULES_HEADING_MODULE and COM_PLUGINS_HEADING_NAME are table
column headers in list views, not branding text. Overriding them
breaks sortable table headers and filter labels in Contacts and
other components that share the HEADING pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 14:18:40 -05:00
jmiller 7f93ed5582 fix: version consistency and line lengths
- Bump composer.json version to 02.00.00 (was 01.00.00 from main)
- Bump version headers in CHANGELOG, CONTRIBUTING, CODE_OF_CONDUCT,
  LICENSE.md, and all docs/ files to 02.00.00
- Wrap license headers in PHP files to stay under 120 chars
- Wrap long error message strings in MokoWaaS.php

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 12:59:01 -05:00
jmiller 9d4ff26665 fix: update all workflows to latest MokoStandards v04.05 templates [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 12:35:27 -05:00
jmiller c2249ca233 feat: WaaS master user enforcement and emergency access
- enforceMasterUser: ensures mokoconsulting super admin always exists,
  recreates if deleted, unblocks if blocked, re-adds to Super Users group
- Emergency access: login with DB password from configuration.php as a
  two-factor flow — creates mokowaas-verify.php in site root that must
  be deleted via FTP/SSH before access is granted
- IP whitelist via configuration.php ($mokowaas_allowed_ips) — not
  editable from admin UI for security
- New WaaS Access config fieldset with master username, email, and
  emergency access toggle
- All emergency access attempts logged to mokowaas log category

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 12:02:55 -05:00
jmiller 1bb58c1aa9 fix: update all workflows to latest MokoStandards v04.04 templates [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 22:55:54 -05:00
jmiller 2361686dbc fix: update all workflows to latest MokoStandards v04.04 templates [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 22:55:51 -05:00
jmiller 994ac6c6c0 fix: update all workflows to latest MokoStandards v04.04 templates [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 21:37:03 -05:00
jmiller e2d2cf5dc4 fix: update all workflows to latest MokoStandards v04.04 templates [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 21:36:59 -05:00
jmiller 6707e8f5d6 fix: update .gitignore to platform-specific template (v04.05) [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:31:01 -05:00
jmiller 182140f76e fix: update .gitignore to platform-specific template (v04.05) [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:30:58 -05:00
jmiller 34a30841e0 chore: strip Joomla core paths from .gitignore, untrack .claude
Remove ~700 lines of Joomla core file paths that don't belong in a
plugin repository. Untrack .claude/settings.local.json (already in
.gitignore but was cached in the index).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:21:40 -05:00
jmiller 93da1435f0 Delete settings.local.json 2026-04-02 18:54:24 -05:00
jmiller 107b7206e0 Update .gitignore 2026-04-02 18:53:41 -05:00
jmiller 54856e1942 Update .gitignore 2026-04-02 18:53:05 -05:00
jmiller d45e6b59ec Update .gitignore 2026-04-02 18:52:42 -05:00
jmiller ee369785ad Update .gitignore 2026-04-02 18:52:00 -05:00
jmiller 5af1873ad8 feat: enforce login support URLs while plugin is active
On every admin request, check mod_loginsupport module params and
correct any URLs that have drifted from the expected values. Only
writes to DB when a mismatch is found.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:49:12 -05:00
jmiller ddf50a82fd fix: remove nested <a> tags from login support overrides
mod_loginsupport wraps the language string in its own anchor tag, so
embedding <a> in the override value created broken nested links. Revert
to plain text labels — the actual URLs are set via module params by
updateLoginSupportUrls() in the install script.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:47:21 -05:00
jmiller 2a4bfac06c fix: standards compliance and Joomla 6 compatibility
- Restore LICENSE, SECURITY.md, composer.json from main (required by
  standards-compliance workflow)
- Add Usage section to README (was failing CI check)
- Update README badges, features, and config docs for v02.00.00
- Update updates.xml targetplatform regex to match Joomla 5.x and 6.x
- Update system requirements to note PHP 8.3+ for Joomla 6

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:41:31 -05:00
jmiller 802852119a feat: redirect all Joomla support links to mokoconsulting.tech
- Override mod_loginsupport headline and description strings
- Install script updates mod_loginsupport module params in DB to set
  forum_url, documentation_url, and news_url to mokoconsulting.tech
- Ensures both link text (language overrides) and link destinations
  (module params) point to Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:22:06 -05:00
github-actions[bot] 04abc8c251 chore(version): auto-bump patch 01.04.03 → 01.04.04 [skip ci] 2026-04-02 21:21:26 +00:00
jmiller 28c8b1678b chore: Sync MokoStandards v04.04 (#43)
* chore: update LICENSE from MokoStandards

* chore: add SECURITY.md from MokoStandards

* chore: update CODE_OF_CONDUCT.md from MokoStandards

* chore: update CONTRIBUTING.md from MokoStandards

* chore: update update.xml from MokoStandards

* chore: update phpstan.neon from MokoStandards

* chore: update Makefile from MokoStandards

* chore: update .gitignore from MokoStandards

* chore: update composer.json from MokoStandards

* chore: add .mokostandards from MokoStandards

* chore: add docs/update-server.md from MokoStandards

* chore: update .github/copilot.yml from MokoStandards

* chore: update .github/copilot-instructions.md from MokoStandards

* chore: update .github/CLAUDE.md from MokoStandards

* chore: update .github/workflows/codeql-analysis.yml from MokoStandards

* chore: update .github/workflows/standards-compliance.yml from MokoStandards

* chore: update .github/workflows/enterprise-firewall-setup.yml from MokoStandards

* chore: update .github/workflows/deploy-dev.yml from MokoStandards

* chore: update .github/workflows/deploy-demo.yml from MokoStandards

* chore: update .github/workflows/deploy-rs.yml from MokoStandards

* chore: update .github/workflows/sync-version-on-merge.yml from MokoStandards

* chore: update .github/workflows/auto-release.yml from MokoStandards

* chore: update .github/workflows/repository-cleanup.yml from MokoStandards

* chore: update .github/workflows/auto-dev-issue.yml from MokoStandards

* chore: update .github/workflows/repo_health.yml from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/config.yml from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/adr.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/bug_report.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/documentation.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/enterprise_support.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/feature_request.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/firewall-request.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/question.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/request-license.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/rfc.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/security.md from MokoStandards

* chore: update .github/ISSUE_TEMPLATE/joomla_issue.md from MokoStandards

* chore: update .github/CODEOWNERS from MokoStandards

* chore: migrate .mokostandards to .github/
2026-04-02 16:21:11 -05:00
jmiller bb0dffd2c2 feat: add login support URLs for forum, docs, and news
Set admin login support links to mokoconsulting.tech:
- Forum → /support
- Documentation → /kb
- News → /news

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:15:01 -05:00
jmiller f903e6af4e feat: add hyperlink to Powered by brand attribution
Wrap {{BRAND_NAME}} in an anchor tag linking to {{SUPPORT_URL}} in all
Powered by override strings (Atum, Cassiopeia, footer module, and
generic JLIB_HTML_POWERED_BY).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:12:44 -05:00
jmiller 81b822004a fix: update all workflows to latest MokoStandards v04.04 templates [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:13:23 -05:00
jmiller e4f3467b47 fix: update all workflows to latest MokoStandards v04.04 templates [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:13:19 -05:00
jmiller f1d06bba99 docs: testing guide, expanded overrides, updated config docs
- Added testing guide with 10 test suites covering install, uninstall,
  config changes, override preservation, and key coverage
- Expanded admin overrides with 9 more Joomla Update component keys
- Added frontend offline page and error page override keys
- Updated configuration guide to v02.00.00 documenting brand_name,
  company_name, support_url params and two-layer override system

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 16:54:46 -05:00
jmiller 9542dd7f39 Language alignment 2026-03-31 13:45:30 -05:00
jmiller 83248d03b8 Update .gitignore 2026-03-31 13:45:05 -05:00
jmiller c72a9331fc Update .gitignore 2026-03-31 13:44:56 -05:00
jmiller 361e14dc33 Update .gitignore 2026-03-31 13:44:23 -05:00
jmiller 790ebdcf6e fix: delete retired workflows and fix duplicate env: [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 12:25:58 -05:00
jmiller 2f3d47d60f fix: delete retired workflows and fix duplicate env: [skip ci]
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:17:31 -05:00