feat: Selective restore, archive browser, backup comparison + install fix (#58, #59, #64) #92

Merged
jmiller merged 4 commits from feat/batch-58-59-64 into main 2026-06-23 09:39:55 +00:00
Owner

Summary

Three features + install fix. Closes #58, closes #59, closes #64.

Install fix

Converted all // single-line comments to /* */ block comments in script.php. The build pipeline strips newlines, causing // comments to eat subsequent code on the concatenated line.

#58: Selective article restore from snapshot

  • Browse articles inside a snapshot via AJAX modal
  • Checkboxes to select individual articles
  • restoreSelectedArticles() merges by ID with related tables

#59: Backup archive browser

  • View files inside a backup without extracting
  • AJAX browseArchive() reads ZIP/tar.gz entries
  • Browse button on backup list + detail views

#64: Backup comparison

  • Select two backups → Compare toolbar button
  • Side-by-side modal showing size, files, tables, duration deltas
  • AjaxController compareBackups() endpoint

Test Plan

  • Package installs without FatalError (script.php fix)
  • Snapshot browse modal shows articles with checkboxes
  • Restore Selected restores only chosen articles
  • Archive browse shows file list from ZIP backup
  • Compare two backups shows delta table
## Summary Three features + install fix. Closes #58, closes #59, closes #64. ### Install fix Converted all `//` single-line comments to `/* */` block comments in `script.php`. The build pipeline strips newlines, causing `//` comments to eat subsequent code on the concatenated line. ### #58: Selective article restore from snapshot - Browse articles inside a snapshot via AJAX modal - Checkboxes to select individual articles - `restoreSelectedArticles()` merges by ID with related tables ### #59: Backup archive browser - View files inside a backup without extracting - AJAX `browseArchive()` reads ZIP/tar.gz entries - Browse button on backup list + detail views ### #64: Backup comparison - Select two backups → Compare toolbar button - Side-by-side modal showing size, files, tables, duration deltas - AjaxController `compareBackups()` endpoint ## Test Plan - [ ] Package installs without FatalError (script.php fix) - [ ] Snapshot browse modal shows articles with checkboxes - [ ] Restore Selected restores only chosen articles - [ ] Archive browse shows file list from ZIP backup - [ ] Compare two backups shows delta table
jmiller added the component: enginecomponent: admin labels 2026-06-23 09:39:27 +00:00
jmiller added 4 commits 2026-06-23 09:39:28 +00:00
The build pipeline strips newlines from PHP files during packaging.
Single-line comments (//) then eat everything after them on the
concatenated line, causing a FatalError on install. Block comments
(/* */) survive minification.
Browse articles inside a snapshot and restore individual items:
- SnapshotRestoreEngine::restoreSelectedArticles() merges by ID
- AjaxController::browseSnapshot() returns article list as JSON
- SnapshotsController::restoreSelected() handles selective restore
- Browse modal with checkboxes + Restore Selected button

Closes #58
AJAX-powered file browser in backups list and detail views:
- AjaxController::browseArchive() reads ZIP/tar.gz entries
- Browse button on each backup row + detail view
- Modal shows file list with names and sizes (first 500 entries)

Closes #59
feat: backup comparison — diff two backup records (#64)
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Joomla: Extension CI / Build RC Pre-Release (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Failing after 3s
Generic: Repo Health / Access control (pull_request) Successful in 3s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 8s
Universal: PR Check / Validate PR (pull_request) Failing after 8s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 13s
Universal: PR Check / Secret Scan (pull_request) Successful in 10s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 16s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Failing after 1s
Universal: Workflow Sync Trigger / Sync workflows to live repos (pull_request) Failing after 3s
Universal: Build & Release / Build & Release Pipeline (pull_request) Successful in 14s
8c66fd3260
Select two backups and compare side-by-side:
- AjaxController::compareBackups() returns metadata + deltas
- Compare toolbar button (requires 2 checkboxes)
- Modal shows size, files, tables, duration differences

Closes #64
jmiller merged commit e4de103a00 into main 2026-06-23 09:39:55 +00:00
jmiller deleted branch feat/batch-58-59-64 2026-06-23 09:39:56 +00:00
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#92