Release v01.43 — multi-remote, MokoRestore, snapshots, MokoSuiteClient #156

Closed
jmiller wants to merge 33 commits from fix/ssh-key-indicator into main
Owner

Summary

Rolls up all dev work since v01.27 into main. Major features and fixes:

Features

  • Multi-remote storage — multiple upload destinations per backup profile (#97)
  • MokoSuiteClient bundled — added as git submodule, included as nested package in release ZIP
  • Standalone MokoRestore — separate restore script that scans for backup ZIPs (#107)
  • MokoRestore enhancements — post-restore resets, per-table conflict resolution, Joomla detection warning, multi-zip selector
  • Content snapshots — scheduled tasks, CLI commands, REST API, selective article restore, custom fields/tags (#54-58)
  • Dashboard widgets — snapshot widget, backup trend chart, storage breakdown (#61)
  • SFTP key file upload — auth type dropdown, security hardening, SFTP browser (#96, #98)
  • Data sanitization — password hashing, email masking, session clearing (#129)
  • Archive browser — view files without extracting (#59)
  • Backup comparison — diff two backup records (#64)
  • Stepped restore engine — AJAX-based restore for large sites (#62)
  • ACL enforcement — complete config.xml, access.xml, controller audit (#137)
  • Purge, CPanel module, 7z format (#105, #119, #122)
  • Clickable placeholder pills for backup dir and archive name fields
  • Auto-verify backup integrity after creation (#65)

Fixes

  • SSH key indicator detection and missing delete language key
  • Remotes table schema alignment (config→params, composite index, remove keep_local)
  • Add restore_script_name column to profiles
  • Bootstrap 5 modal conversion
  • Profile list ordering
  • MokoRestore error handling and stack trace logging
  • Placeholder resolution in checkDir AJAX
  • SFTP showon field fixes
  • Graceful remote upload failure degradation (#66)

Infrastructure

  • Nested package build support in release_package.php (mokocli)
  • Submodule checkout + main branch update in CI workflow template (Template-Generic)
  • SQL update files for schema version alignment

Test plan

  • Install fresh from release ZIP — verify MokoSuiteClient installs alongside
  • Run full backup with default profile
  • Run SFTP backup with key auth — verify upload completes
  • Test standalone MokoRestore generation
  • Verify content snapshot create/restore cycle
  • Check dashboard widgets render correctly
  • Confirm ACL permissions enforce correctly for non-super-admin users
## Summary Rolls up all dev work since v01.27 into main. Major features and fixes: ### Features - **Multi-remote storage** — multiple upload destinations per backup profile (#97) - **MokoSuiteClient bundled** — added as git submodule, included as nested package in release ZIP - **Standalone MokoRestore** — separate restore script that scans for backup ZIPs (#107) - **MokoRestore enhancements** — post-restore resets, per-table conflict resolution, Joomla detection warning, multi-zip selector - **Content snapshots** — scheduled tasks, CLI commands, REST API, selective article restore, custom fields/tags (#54-58) - **Dashboard widgets** — snapshot widget, backup trend chart, storage breakdown (#61) - **SFTP key file upload** — auth type dropdown, security hardening, SFTP browser (#96, #98) - **Data sanitization** — password hashing, email masking, session clearing (#129) - **Archive browser** — view files without extracting (#59) - **Backup comparison** — diff two backup records (#64) - **Stepped restore engine** — AJAX-based restore for large sites (#62) - **ACL enforcement** — complete config.xml, access.xml, controller audit (#137) - **Purge, CPanel module, 7z format** (#105, #119, #122) - **Clickable placeholder pills** for backup dir and archive name fields - **Auto-verify backup integrity** after creation (#65) ### Fixes - SSH key indicator detection and missing delete language key - Remotes table schema alignment (config→params, composite index, remove keep_local) - Add restore_script_name column to profiles - Bootstrap 5 modal conversion - Profile list ordering - MokoRestore error handling and stack trace logging - Placeholder resolution in checkDir AJAX - SFTP showon field fixes - Graceful remote upload failure degradation (#66) ### Infrastructure - Nested package build support in release_package.php (mokocli) - Submodule checkout + main branch update in CI workflow template (Template-Generic) - SQL update files for schema version alignment ## Test plan - [ ] Install fresh from release ZIP — verify MokoSuiteClient installs alongside - [ ] Run full backup with default profile - [ ] Run SFTP backup with key auth — verify upload completes - [ ] Test standalone MokoRestore generation - [ ] Verify content snapshot create/restore cycle - [ ] Check dashboard widgets render correctly - [ ] Confirm ACL permissions enforce correctly for non-super-admin users
jmiller added 31 commits 2026-06-27 00:29:19 +00:00
chore: sync main into dev (#145)
Universal: Auto Version Bump / Version Bump (push) Successful in 16s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 19s
726291995c
fix: convert inline modals to Bootstrap 5, fix language keys, ntfy default, and MokoRestore error handling
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Failing after 5s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 19s
Universal: PR Check / Secret Scan (pull_request) Successful in 9s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 29s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
3742477aef
- Convert 10 inline CSS modals to Bootstrap 5 (backups: 7, snapshots: 3)
- Replace style.display show/hide with Bootstrap Modal API
- Fix JFIELD_ORDERING_LABEL_ASC → JFIELD_ORDERING_ASC in profile filter
- Add COM_MOKOJOOMBACKUP_CONFIGURATION key for Options page title
- Change ntfy default server to ntfy.mokoconsulting.tech
- Add profile ID to dropdown labels across backups, dashboard, cpanel module
- Add error handling to MokoRestore post() and runPreflight() to prevent UI stalling
- Remove outdated SSH auth pattern references from field descriptions
chore(version): pre-release bump to 01.43.03-dev [skip ci]
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 1s
ec1c3486c5
Merge pull request 'fix: Bootstrap 5 modals, language keys, ntfy default, MokoRestore error handling' (#146) from fix/bootstrap-modals into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 18s
88e53c5698
fix(mokorestore): add Joomla detection warning, multi-zip selector, and standalone backup scan
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 13s
836d1bc8b7
- Preflight now detects existing Joomla installation (configuration.php / Version.php)
  and shows a yellow warning — does not block, but alerts the user
- Standalone mode: backup archive check scans for all ZIPs instead of hardcoded name
- Multi-zip selector integrated into extract step with radio buttons
- Selected backup file passed through to extract action
- Added warn-style CSS class (yellow) for preflight warnings
chore(version): pre-release bump to 01.43.08-dev [skip ci]
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
f97cd30c95
Merge pull request 'fix(mokorestore): Joomla detection, multi-zip selector, standalone backup scan' (#148) from fix/mokorestore-improvements into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 18s
3488434f28
fix: remove run/backup buttons, move actions to detail view, custom restore script name, version bump 01.43.11-dev
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 10s
07fb4dcc24
- Remove Run Backup / Backup Now buttons from profiles list, profile edit toolbar, and backup records view
- Move download, browse archive, and view log from backup list rows into individual backup record detail view
- Add download button to backup detail toolbar
- Link profile column in backup records list to profile edit
- Complete restore script filename customization across BackupEngine, SteppedBackupEngine, and MokoRestore
- Remove ordering field from profiles, default sort by ID ascending
- Fix untranslated JFIELD language keys
- Bump all manifests to 01.43.11-dev
chore(version): pre-release bump to 01.43.13-dev [skip ci]
Branch Cleanup / Delete merged branch (pull_request) Successful in 1s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
f26d58504e
Merge pull request 'fix: UI cleanup, custom restore script name, version bump 01.43.11-dev' (#150) from fix/ui-cleanup-restore-name into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 10s
10467835ac
fix(db): add 01.43.11 schema update file to resolve version mismatch
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 10s
e67eedbc93
Joomla's database checker requires a SQL update file matching the manifest
version. Missing file caused schema version to stay at 01.41.00.
chore(version): pre-release bump to 01.43.17-dev [skip ci]
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
2338ba5197
Merge pull request 'fix(db): add 01.43.11 schema update file' (#152) from fix/schema-version-file into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 23s
35e5fc1503
fix: add SQL update file to match manifest version
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Secret Scan (pull_request) Successful in 6s
Universal: PR Check / Validate PR (pull_request) Failing after 4s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Failing after 7s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 46s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
f0da0c02b4
Joomla's Database view requires a SQL update file matching the manifest
version. Missing file causes persistent schema version mismatch warning.
Merge pull request 'fix: add SQL update file to match manifest version' (#153) from fix/schema-version-file-2 into dev
Universal: Auto Version Bump / Version Bump (push) Has been skipped
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 19s
1cfe7c6c6e
fix: add SQL update file to match manifest version
fix: SSH key indicator detection and missing delete language key
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 9s
93f0fa0a47
- SshKeyField: detect base64-encoded keys from DB so the "Key loaded"
  badge displays correctly after initial upload
- Add COM_MOKOJOOMBACKUP_BACKUPS_N_ITEMS_DELETED language keys for
  Joomla's AdminController delete feedback message
fix: align remotes table schema, add restore_script_name column, profile ordering
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 10s
a177dfdcf9
- install.mysql.sql: rename `config` → `params` and drop `keep_local` from remotes
  table to match update file 01.41.00 and RemoteTable.php code (fixes Joomla
  database maintenance "one problem")
- install.mysql.sql: fix idx_enabled index to use composite (profile_id, enabled)
- install.mysql.sql: add restore_script_name column to profiles table
- 01.43.22.sql: ALTER TABLE to add restore_script_name for existing installs
- DashboardModel: order profile dropdown by ID instead of ordering column
- SteppedBackupEngine: add stack trace logging around MokoRestore standalone
  generation to debug str_replace FATAL on SFTP profiles
feat: bundle MokoSuiteClient as nested package in release ZIP
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Secret Scan (pull_request) Successful in 6s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 12s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 29s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
5b8a1bca77
- Add MokoSuiteClient as git submodule under source/packages/
- Add pkg_mokosuiteclient entry to pkg_mokosuitebackup.xml
- Fix duplicate <version> tag in package manifest
jmiller added 1 commit 2026-06-27 00:33:30 +00:00
docs: update README with multi-remote, MokoSuiteClient, sub-extension count
Universal: PR Check / Branch Policy (pull_request) Failing after 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 4s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: PR Check / Validate PR (pull_request) Failing after 3s
Universal: PR Check / Secret Scan (pull_request) Successful in 6s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 15s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 31s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 33s
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been cancelled
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been cancelled
Joomla: Extension CI / Build RC Pre-Release (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report Issues (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
465b551e3c
jmiller added 1 commit 2026-06-27 00:33:46 +00:00
jmiller closed this pull request 2026-06-27 00:34:25 +00:00

Pull request closed

Please reopen this pull request to perform a merge.
Sign in to join this conversation.
No Reviewers
Priority -
Type -
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoSuiteBackup#156