=== SitePorter – Backup, Restore & Migration ===
Contributors: makeanythingsimple
Tags: backup, migration, restore, scheduled-backup, recovery
Requires at least: 6.2
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 2.2.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Create verified WordPress restore points, preview migrations, automate protection, and recover through a guided staged workflow.

== Description ==

SitePorter is a WordPress protection, backup, restore, and migration plugin developed by MAKE ANYTHING SIMPLE. It creates portable `.siteporter` restore points with resumable processing and integrity verification.

Protection and recovery features:

* Recovery Score with actionable readiness checks.
* Restore Point library with verification, preview, lock, rename, restore, download, and retention controls.
* Dry-run restore preview for URL, environment, database-driver, disk-space, and site-mode changes.
* Update Shield restore points before plugin and theme updates.
* Multiple independent protection plans.
* Activity timeline and optional email notifications.
* Resumable file and database export.
* Low-memory sequential `.siteporter` archive format.
* Store, Deflate, and Gzip compression, with optional Zstandard support when available.
* Chunked browser uploads and resumable extraction.
* Staged restore with a pre-restore rollback package.
* Automatic rollback attempt after a destructive restore failure.
* URL, path, database-prefix, serialized-data, nested-serialized-data, and escaped JSON replacement.
* Retention by count, age, and total local size. Locked restore points are excluded from automatic cleanup.
* Optional delivery to a writable off-site directory or mounted backup volume.
* Extensible storage-provider API for separately distributed integrations.
* WP-CLI export, import, retention, schedule, backup listing, and reset commands.
* MySQL, MariaDB, and supported SQLite wpdb drop-in detection.
* Avada/Fusion and Oxygen generated-cache cleanup after restore.
* Archive traversal, duplicate-entry, symlink, checksum, disk-space, and job-lock protections.

The WordPress.org core contains its complete local backup and single-site migration functionality. Network-specific migration features are distributed separately.

= Add-ons =

Open **SitePorter > Settings > Add-ons** to review optional SitePorter products. The available product list, descriptions, versions, icons, feature highlights, documentation links, and purchase-page links are loaded dynamically from the MAKE ANYTHING SIMPLE product catalog. Installed plugin state is detected locally, so each card can show Active, Installed but inactive, or Not installed. SitePorter never downloads, installs, or activates another plugin automatically, and add-on-specific tabs appear only while the related add-on is active.

== Installation ==

1. Upload and activate SitePorter.
2. Open **SitePorter > Dashboard** to review recovery readiness.
3. Use **Create Backup** to make a verified restore point.
4. Use **Restore & Migrate** to inspect and restore a portable package.
5. Test the first restore on staging and keep an independent hosting/database backup.

== External services ==

The WordPress.org core does not contact third-party storage, licensing, analytics, telemetry, or update services. Its built-in off-site destination copies a completed restore point to a directory chosen by the administrator on the same server or a mounted filesystem.

When an administrator opens or manually refreshes **SitePorter > Settings > Add-ons**, SitePorter requests the current add-on catalog from MAKE ANYTHING SIMPLE. The request contains the SitePorter and WordPress version in a generic user agent and does not intentionally include the website URL, backup content, database content, credentials, email address, license key, analytics, or telemetry. The response supplies public product metadata and links. The last successful response is cached so installed add-ons remain manageable during a temporary catalog outage. Service privacy policy: https://makeanythingsimple.com/privacy-policy/ . Service terms: https://makeanythingsimple.com/terms-conditions .

Separately installed storage add-ons may register third-party destinations. Those add-ons are responsible for displaying their own service disclosures and terms before an administrator configures them.

== Privacy ==

A restore point can contain personal and confidential information from the WordPress database and uploaded files. SitePorter stores local packages in a randomized protected directory under `wp-content` and restricts access using server protection files where supported. Administrators are responsible for access control, retention, and the privacy terms of any configured remote destination.

The core stores only the configured off-site directory path. Separately installed storage add-ons may protect their credentials using installation-specific WordPress salts; changing those salts can make saved add-on credentials unreadable.

== WP-CLI ==

* `wp siteporter export [--compression=<store|deflate|gzip|zstd>] [--database-only] [--files-only]`
* `wp siteporter import <file> --yes [--home=<url>] [--siteurl=<url>]`
* `wp siteporter backups`
* `wp siteporter retention`
* `wp siteporter scheduled`
* `wp siteporter reset <content|settings|site|plugin> --yes [--delete-backups]`
* `wp siteporter verify <file> [--deep]`
* `wp siteporter preview <file>`
* `wp siteporter score`

== Frequently Asked Questions ==

= Does SitePorter modify the live site during preview? =

No. Preview inspects the package and destination environment without importing database rows or replacing files.

= Why can a restore point be locked? =

A locked restore point is protected from automatic retention and accidental deletion. Unlock it before deleting it manually.

= Does uninstalling remove restore points? =

No. Restore points are retained to avoid accidental data loss. Delete them from **SitePorter > Backups > Restore Points** or use the plugin-data reset option before uninstalling.

= Can I restore directly on a live site? =

A restore overwrites files and database content. Keep an independent hosting/database backup and test each migration on staging first.

== Changelog ==

= 2.2.0 =
* Added server-limit-aware free uploads.
* Added premium transfer mode unlocked by any active, entitled SitePorter add-on.
* Added best-effort high-memory and long-running operation profile for premium transfers.
* Kept add-on discovery dynamic through the MAS Plugins API.


= 2.1.4 =
* Connected the Add-ons catalog to the separate MAS Plugins API at `/api/mas-plugin/v1/products`.
* Rotated the catalog cache so older mixed-endpoint responses are not reused.
* Added a catalog protocol header for easier server diagnostics.

= 2.1.3 =
* Replaced the hardcoded add-on list and purchase links with a dynamic MAKE ANYTHING SIMPLE catalog API.
* Added cached catalog fallback, a manual refresh action, and catalog connection diagnostics.
* Merged remote product metadata with locally detected plugin activation state.
* Added support for list, keyed, nested, and paginated product API response formats.
* Kept installed SitePorter add-ons visible when the catalog is temporarily unavailable or a product is no longer listed.
* Added configurable catalog URL, request, cache-duration, product, and outbound-link filters.
* Ensured the core never downloads, installs, activates, updates, or deactivates add-ons.

= 2.1.2 =
* Reduced the WordPress sidebar to Dashboard, Backups, and Settings.
* Grouped restore points, backup creation, restore, and network tools into the Backups workspace.
* Grouped automation, add-ons, cloud storage, recovery tools, and diagnostics into Settings tabs.
* Preserved legacy admin URLs without showing extra menu items.

= 2.1.1 =

* Kept SitePorter admin screens free from global WordPress and third-party notices.
* Scoped notices to their original admin contexts instead of rendering them inside the Protection Portal.
* Added a late-injection CSS safeguard while preserving SitePorter's own contextual portal messages.

= 2.1.0 =

* Added an Add-ons catalog with Active, Installed, and Not installed states.
* Added purchase, plugin-management, feature, and license links for SitePorter add-ons.
* Added conditional Cloud Storage and Network Migration menus that appear only when their add-ons are active.
* Added a core mounted-folder configuration panel when the Cloud Storage add-on is not active.
* Removed hardcoded cloud destinations from newly created protection plans.
* Preserved multiline custom exclusion rules during backup creation.
* Fixed restore-point deletion reporting success when the backup file could not be removed.
* Improved JavaScript translation coverage for backup, restore, and schedule actions.

= 2.0.1 =

* Added automatic database-schema repair when upgrading by replacing plugin files.
* Added runtime verification for the jobs, restore-point, and activity tables.
* Added a manual database repair action in System Diagnostics.
* Prevented backup and restore jobs from starting before required tables exist.
* Improved Multisite table-prefix consistency.
* Fixed the Plugin state reset option value.

= 2.0.0 =

* Added the Protection Portal and Recovery Score.
* Added a recovery library with verification, preview, protection lock, rename, and activity metadata.
* Added dry-run restore previews.
* Added multiple protection plans, Update Shield, notification controls, and an activity timeline.
* Added verified snapshot catalog and off-site copy status.
* Added a provider registry so commercial storage integrations remain separate from the WordPress.org core.
* Added high-water database cursor boundaries and scheduled-job overlap protection.
* Added WP-CLI verification, preview, and Recovery Score commands.
* Refined the backup, restore, automation, storage, tools, and diagnostics experiences.
* Improved large-download support with HTTP range responses.
* Hardened archive manifest compatibility, cleanup, and restore-point deletion rules.

= 1.6.1 =

* Added temporary-workspace fallbacks and decompression diagnostics.
* Added checked workspace writes, unique ZIP-entry workspaces, and restore-token expiration.

= 1.6.0 =

* Added the low-memory streaming archive, scheduled backups, retention, remote-storage adapters, WP-CLI commands, and interrupted-restore recovery.

= 1.0.0 =

* Added staged restore, rollback, and serialized-safe replacement.
