Skip to content

Releases: andrewbakercloudscale/wordpress-backup-restore-plugin

v3.2.327

09 Apr 16:53

Choose a tag to compare

Fix PHPCS prefix warnings: rename CloudScale_Backup_Utils → CSBR_Backup_Utils, prefix all uninstall.php global variables with csbr_

v3.2.189 — WordPress.org review compliance

29 Mar 19:09

Choose a tag to compare

Changes

  • Renamed to "CloudScale Backup & Restore" (removed "Free"); text domain updated to cloudscale-backup-restore; new slug cloudscale-backup-restore requested from WordPress.org
  • Removed Plugin URI header (was identical to Author URI — WordPress.org validation error)
  • curl → WP HTTP API: cs_get_imds_token() and cs_imds_get() converted from direct curl_exec to wp_remote_request()/wp_remote_get()
  • Removed versioned asset copies: cs_get_versioned_asset() deleted; assets enqueued as script.js/style.css with ?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.DirectDatabaseQuery annotations to include .DirectQuery, .NoCaching sub-rules; updated stale cs_verify_nonce() references in suppress comments to check_ajax_referer()

v3.2.178 — PCP compliance fixes

29 Mar 07:37

Choose a tag to compare

v3.2.178 — PCP compliance fixes

Critical

  • Replaced unlink() with wp_delete_file() in local free-space cleanup
  • Added phpcs:ignore to all 41 shell_exec() calls missing suppression
  • Added wp_unslash() to five $_POST reads using intval()/(float) without it (ami_max, cloud_backup_delay, cloud_max, retention, need_mb)

High

  • Added phpcs:ignore with safety explanation to all maybe_unserialize() calls (values written only by this plugin)

Medium

  • Added phpcs:ignore NonceVerification.Missing to cs_delete_oldest_cloud handler (nonce verified via cs_verify_nonce() helper)
  • Added phpcs:ignore for maybe_unserialize in 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 from total − used — fixes Dropbox over-quota returning INT64_MAX as 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

29 Mar 07:04

Choose a tag to compare

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_options via $wpdb, bypassing the object cache entirely.
  • Dropbox over-quota pre-check fixed — Dropbox reports INT64_MAX as free space when the account is over quota, bypassing the space check. Now computes free space as total - used which 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

22 Mar 18:08

Choose a tag to compare

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

22 Mar 17:59

Choose a tag to compare

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 S3AWS 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)

22 Mar 16:59

Choose a tag to compare

Standards fixes (PCP compliance)

  • Fix 6 critical PCP violationswp_die() calls in admin_post_cs_dropbox_download now use esc_html__() with the correct text domain, resolving EscapeOutput.OutputNotEscaped
  • Fix @since tags — corrected from 3.3.03.2.83 on cs_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

22 Mar 14:04

Choose a tag to compare

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

21 Mar 20:54

Choose a tag to compare

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-golden targeting <td> directly — colour is stable after Sync
  • generate-help-docs.sh excluded 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 to querySelectorAll
  • S3 history date/local fields now returned by refresh endpoint
  • Null guards on getElementById in csAmiSave, 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

18 Mar 09:42

Choose a tag to compare

What's new in v3.2.60

S3 & Google Drive retention enforcement

  • Error checkingaws s3 rm and rclone delete output 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 by build.sh on every build; maps to SVN trunk/
  • svn-assets/ — icons and screenshots for the WordPress.org plugin page; maps to SVN assets/
  • 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_check cron handler
  • Removed dead cs_s3_region option read from cs_enforce_s3_retention()
  • CHANGELOG.md updated with all versions 3.2.10–3.2.59