Releases: andrewbakercloudscale/wordpress-backup-restore-plugin
Releases · andrewbakercloudscale/wordpress-backup-restore-plugin
v3.2.327
v3.2.189 — WordPress.org review compliance
Changes
- Renamed to "CloudScale Backup & Restore" (removed "Free"); text domain updated to
cloudscale-backup-restore; new slugcloudscale-backup-restorerequested from WordPress.org - Removed Plugin URI header (was identical to Author URI — WordPress.org validation error)
- curl → WP HTTP API:
cs_get_imds_token()andcs_imds_get()converted from directcurl_exectowp_remote_request()/wp_remote_get() - Removed versioned asset copies:
cs_get_versioned_asset()deleted; assets enqueued asscript.js/style.csswith?ver=query param — writing versioned copies to the plugin directory is not permitted by WordPress.org - readme.txt: added
== External services ==section documenting Amazon S3, Google Drive via rclone, and AWS EC2 IMDS; Privacy Policy corrected to reflect optional external connections;docs/excluded from distribution zip - phpcs: expanded incomplete
phpcs:ignore WordPress.DB.DirectDatabaseQueryannotations to include.DirectQuery, .NoCachingsub-rules; updated stalecs_verify_nonce()references in suppress comments tocheck_ajax_referer()
v3.2.178 — PCP compliance fixes
v3.2.178 — PCP compliance fixes
Critical
- Replaced
unlink()withwp_delete_file()in local free-space cleanup - Added
phpcs:ignoreto all 41shell_exec()calls missing suppression - Added
wp_unslash()to five$_POSTreads usingintval()/(float)without it (ami_max,cloud_backup_delay,cloud_max,retention,need_mb)
High
- Added
phpcs:ignorewith safety explanation to allmaybe_unserialize()calls (values written only by this plugin)
Medium
- Added
phpcs:ignore NonceVerification.Missingtocs_delete_oldest_cloudhandler (nonce verified viacs_verify_nonce()helper) - Added phpcs:ignore for
maybe_unserializein Utils log compaction loop
Also included (v3.2.177)
- Free-space loop targets 15% above required size to avoid stopping right at the edge
cs_rclone_free_bytes()now computes free fromtotal − used— fixes Dropbox over-quota returningINT64_MAXas free space, bypassing the space check- Async cloud sync and backup jobs now use
register_shutdown_function()+fastcgi_finish_request()— eliminates the CloudFront loopback redirect issue that prevented background jobs from ever running - Activity Log panel, verbose job lifecycle logging, direct DB job storage bypassing broken Redis cache
v3.2.174 — Activity log, working async backups, Dropbox space fix
What's new in v3.2.174
Major fixes
- Async cloud sync now works — the HTTP loopback used to fire background jobs was blocked by a CloudFront 301 redirect on port 80. Jobs were queued but never ran. Replaced with
fastcgi_finish_request()so the response flushes to the browser immediately and the upload runs in the same PHP-FPM process. - Job state persistence fixed — with Redis configured but unavailable, WP transients were stored in in-process PHP memory only, lost when the background worker started in a new process. Jobs now write directly to
wp_optionsvia$wpdb, bypassing the object cache entirely. - Dropbox over-quota pre-check fixed — Dropbox reports
INT64_MAXas free space when the account is over quota, bypassing the space check. Now computes free space astotal - usedwhich correctly returns 0 when over-quota.
Activity Log
- New dark terminal-style Activity Log panel at the top of every page
- Auto-refreshes every 5 seconds with timestamped, colour-coded entries
- Green = OK/complete, Red = errors/failures, Teal = starting/running
- Refresh and Clear buttons
- All sync and backup events logged with timing and file size
Other improvements
- Copy Last Backup to Cloud buttons changed to bright green
- Single shared timer for all cloud sync polls (one AJAX request per second covers all providers)
- Per-provider space check on Copy Last Backup buttons
- Poll error handler surfaces an error after 5 consecutive failures instead of running forever
- Loopback timeout increased from 10ms to 3s
v3.2.109 — stable tag bump
Stable tag updated to 3.2.109. See v3.2.109 release for full changelog.
v3.2.109 — UI/UX improvements, AWS branding, Dropbox Beta
What's new
Button & label renames
- "Sync Local Backup Now" → "Copy Last Backup to Cloud" (button label, progress messages, and all Explain modals)
- "Run Backup Now" → "Create Local Backup Now"
AWS branding
- All S3 and AMI labels consistently prefixed with AWS (AWS S3 Remote Backup, AWS EC2 AMI Snapshot, etc.)
Cloud tab card order
- Google Drive → Dropbox → AWS S3 → AWS EC2 AMI (both AWS providers together at the bottom)
Explain modals
- S3, Google Drive, Dropbox: new Buttons section explaining every button including Copy Last Backup to Cloud
- Cloud Schedule Explain: clarifies that S3/GDrive/Dropbox copy the last local zip — not a new backup
- AMI Explain: full AWS CLI install guide + both IAM Role (Option A) and Access Keys (Option B) setup
Backup History
- Orange row highlight + 🗑 delete badge for backups that will be removed on the next run
- Warning banner above the table when any backups are over the retention limit
Cloud Schedule
- Test Connection / Save on any provider now auto-enables that provider's checkbox in Include in cloud backup and removes the "Not configured" label
Tab styles
- Active and hover tab colour changed to dark grey
Widget
- All four cloud providers always shown (S3, Drive, Dropbox, AMI) — "Not configured" in grey if unset
- Cloud sync rows displayed two-per-line
Bug fixes
- Duplicate IDs (
cs-ami-refresh-all,cs-ami-golden-count,cs-ami-msg) fixed — Refresh All and golden count moved to Cloud Backup History panel only - Cloud Backup History panel only visible on Cloud tab
v3.2.95 — Standards fixes (PCP compliance)
Standards fixes (PCP compliance)
- Fix 6 critical PCP violations —
wp_die()calls inadmin_post_cs_dropbox_downloadnow useesc_html__()with the correct text domain, resolvingEscapeOutput.OutputNotEscaped - Fix
@sincetags — corrected from3.3.0→3.2.83oncs_sync_to_dropbox(),cs_dropbox_refresh_history(),cs_enforce_dropbox_retention() - CHANGELOG.md — backfilled entries for all versions v3.2.83–v3.2.95
v3.2.93 — Dropbox support, unified cloud history, widget improvements
What's new
Dropbox Backup (Beta)
- Full Dropbox support via rclone — save settings, test connection, sync, download, delete, golden image, tags
- Setup guide in the Explain modal (install rclone, configure Dropbox remote, OAuth)
- Marked as BETA until fully tested in production
Unified Cloud History Panel
- Single history panel inside the Cloud Backups tab with a provider dropdown (S3, Google Drive, Dropbox, AMI)
- History only visible on the Cloud tab
Dashboard Widget
- Cloud sync age rows — S3, Drive, Dropbox, AMI last sync time with traffic-light colouring
- Two cloud rows per line for compact display
- Dropbox always shown — "Not configured" in grey if remote not set
- Renamed "Run Backup Now" → "Create Local Backup Now"
- CloudScale Backup & Restore button changed to blue
UI cleanup
- All provider setup instructions moved behind Explain buttons (clean cards)
- AMI Explain modal includes full AWS CLI install + IAM role setup guide
- All Explain modals now scroll (max-height 65vh)
- Site Online badge removed from header; Help button style updated
- Run Backup Now (now "Create Local Backup Now") is first section in Local tab
v3.2.82 — Golden images, S3/GDrive history, tab fix
What's new in 3.2.82
New features
- AMI Tags — attach a free-text label to any snapshot (inline pencil editor, Enter/Escape shortcuts)
- Golden Images ⭐ — mark up to 4 AMIs, S3 files, or Drive files as permanently protected; never auto-deleted, excluded from Max Cloud Backups to Keep quota
- S3 Backup History — live view of all zips in your S3 bucket: Sync from S3, Tag, Golden Image, Download (streams to browser), Delete
- Google Drive Backup History — same features via rclone lsjson
- AMI Snapshot Restore — triggers EC2 replace-root-volume-task with a two-step confirmation warning of permanent data loss
Improvements
- S3 and GDrive history merged into their parent settings cards (no separate panels)
- History auto-populates on first Cloud tab open
- All Explain buttons rewritten to cover golden images, tags, and every action button
- Header items (Site Online, Help, andrewbaker.ninja) get hover effects
- Uniform row heights across all tables
- Golden rows use CSS class
.cs-row-goldentargeting<td>directly — colour is stable after Sync generate-help-docs.shexcluded from distribution zip (WordPress.org requirement)
Fixes
- JS syntax error (missing brace in
updateRow) that broke Cloud Backups tab click handler - Tag save bug: jQuery
$('#id')selector breaks on filenames with dots — switched toquerySelectorAll - S3 history date/local fields now returned by refresh endpoint
- Null guards on
getElementByIdincsAmiSave,csAmiCreate,csGDriveSave - WordPress.org PCP compliance pass: escaped output, i18n wrappers,
wp_add_inline_style
v3.2.60 — S3/GDrive retention error checking, remote count tracking, SVN infrastructure
What's new in v3.2.60
S3 & Google Drive retention enforcement
- Error checking —
aws s3 rmandrclone deleteoutput is now inspected. Successful deletions print confirmation; failures log a warning and are not counted as removed - Accurate remote count — after every sync the confirmed remote file count is stored (
cs_s3_remote_count/cs_gdrive_remote_count) so the display always reflects what's actually in the bucket/Drive, not just the local log - Display updated — S3 and Google Drive cards now show "X in bucket · Y local" and "X in Drive · Y local" respectively
WordPress.org SVN infrastructure
repo/— distribution copy of the plugin, kept in sync bybuild.shon every build; maps to SVNtrunk/svn-assets/— icons and screenshots for the WordPress.org plugin page; maps to SVNassets/MANUAL-deploy-svn.sh— one-command SVN deploy: syncs trunk + assets, commits, and tags the release. Ready to run the moment WordPress.org approves the plugin.
Code quality (from /wp-plugin-standards-review)
- Fixed wrong DocBlock on
cs_get_latest_backup_path()(wrong description, wrong@return, wrong@since) - Added DocBlock to
cs_ami_delete_checkcron handler - Removed dead
cs_s3_regionoption read fromcs_enforce_s3_retention() - CHANGELOG.md updated with all versions 3.2.10–3.2.59