GadgettPhotoBuilder 1.1.0 migration and operations

This package does not modify any live store or automatically import legacy files.
Deactivate the legacy plugin before activating this renamed plugin. Keep an offline
backup of its source, database and uploads. Never activate both codebases together.

Retained identifiers: all wpb_* option keys, _wpb_* product/order/item meta keys,
printed_product product type, photo_print_upload shortcode and WPB PHP namespace.
New folder, entrypoint and translation domain: gadgettphotobuilder.
WordPress treats a changed plugin folder/entrypoint as a separate installation;
this is not an automatic update path from the old private plugin.

New photos go only to WPB_PRIVATE_STORAGE_DIR outside every document root. The
fallback uses a site-specific directory under sys_get_temp_dir. A changed site URL
or WordPress auth salt changes that fallback location and session identifiers.
Production should use an explicit persistent private path with owner-only access.
Changing that path requires a deliberate offline move and verification of metadata.

Legacy wp-content/uploads/photo-print-temp and photo-print-orders can still be
publicly readable independently of this plugin. Old JPG/PNG/WebP/PDF links are not
revoked by installing this update. Before a live upgrade, deny HTTP access to those
two paths in the actual web server (Nginx does not read .htaccess), verify GET returns
403/404 for known sample files, then copy them to a restricted backup. Confirm
retention obligations, production needs and restore path before deleting anything.

The new plugin deliberately does not serve, email or Drive-upload old arbitrary
absolute paths from _wpb_pdf_file. Legacy image names lack the new random-ID JSON
records, so they are not accepted by new crop/download handlers. A follow-up importer
must map order ownership, validate/re-encode each image, issue new IDs/records, set
new private PDF metadata and verify media through the authorized endpoint. Original
public URLs must not remain reachable. No such importer is run by this package.
Existing old token-bearing upload links require a nonempty token (32+ characters)
and a positive required-photo count. Tokens are not returned in REST status payloads.

No fixed vendor/customer-data email is sent. The old production-mail action reports
that it is disabled. Optional Google Drive settings are retained; existing enabled
connections must be reviewed by the operator before reactivation because opt-in
remains enabled if the store previously enabled it. Disconnect deletes local tokens;
revoke the grant in Google as needed. Remote Drive data is not erased by local cron.

Operational requirements: WP6.4+, PHP7.4+, WooCommerce8.2+, GD/Imagick (supported by
WordPress image editor), ZipArchive for ZIP downloads, persistent private disk,
working WordPress cron. Photos expire after 24h temporary/90d order directory age;
monitor jobs and available space. Private downloads are no-cache and require either
the owning WC session, a manager/order customer, or the one-hour signed order cookie.
The UI, uploads and media endpoint must share the same site and cookie context.

HPOS support uses WooCommerce CRUD and both legacy/HPOS order screens. Classic
checkout is the supported path; do not advertise Blocks compatibility until tested.
WordPress.org submission still needs a confirmed account owner, contributor username,
product/support URLs, independently reviewed security/runtime results and full Plugin
Check review. No acceptance or universal compatibility is claimed by this package.
