=== Catalog FAQ PRO ===
Tags: faq, woocommerce, product faq, catalog, accordion
Requires at least: 6.8
Requires PHP: 8.2
Tested up to: 7.1
Stable tag: 1.1.2
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Manage FAQ rules, product exceptions, coverage reports and reviewed bulk changes. A private add-on requiring Catalog FAQ Free.

== Description ==

Catalog FAQ PRO is a separately distributed, private add-on. It is not the Free WordPress.org submission package. Keep Catalog FAQ Free active; Pro requires Free 1.1.2 or newer with core API version 2. Use the matching 1.1.2 pair.

Pro adds these administrative workflows:

* Show or hide groups using categories, tags and supported parent product types.
* Give products local wording, hidden questions or explicit group choices.
* Review opposing decisions, priorities and placement explanations; simulate drafts before saving.
* Search products by name/SKU and categories/tags by name, without requiring numeric IDs.
* Resume coverage/impact scans, review bulk assignments or literal text edits, and conditionally revert journaled changes.
* Review private administrative activity and transfer rules/exceptions through the shared exchange.

Catalog controls need WooCommerce; shared FAQ reviews do not. Variation-specific rules, customer submissions, AI drafting, SEO outcomes and visitor analytics are outside this release.

Bulk execution and conditional revert are implemented in this add-on. Free supplies shared job storage, transactions, imports and indexing. This release adds no licence, payment or remote activation check.

== Installation ==

1. Install or update and activate Catalog FAQ Free 1.1.2 or newer with core API version 2.
2. Upload catalog-faq-pro.zip through Plugins > Add Plugin > Upload Plugin.
3. Activate Catalog FAQ PRO 1.1.2. For an existing pair, update Free first, then Pro; do not uninstall either. Old Pro cannot run on core API 2; new Pro cannot run on old Free. Your existing questions, groups, assignments and journals stay in place.
4. Open Catalog FAQ > Catalog coverage on a WooCommerce site, or review shared FAQ placements on an ordinary site.

Install manually by ZIP. This build has no publisher account connection, remote licence check, payment collection or custom update server.

== Frequently Asked Questions ==

= What happens if I deactivate PRO? =

Free continues reading its basic assignments. Pro rules and product exceptions stop applying: hidden questions may reappear, local wording returns to shared wording, and rule-only FAQs may disappear. Use the deactivation impact review before disabling Pro. Bulk execution pauses, and conditional revert is unavailable until compatible Pro is reactivated. Existing journals remain, but their original 30-day revert deadline continues; reactivation does not reset it. Deactivation and ordinary Pro uninstall preserve stored data and stop Pro's plan/activity cleanup tasks. Free's separately opted-in deletion behavior is not the same as uninstalling Pro.

= Does an expired update entitlement remove public answers? =

This build has no entitlement server or expiry-based content gate. Future commercial services are outside this description.

= Are report totals always exact? =

Reports show scope, generation and stale/partial state. Unindexed or arbitrary PHP-generated placements remain unknown. Large details may need product-by-product inspection; counts use the actual resolver.

= Does Remove direct assignment remove inherited FAQs? =

No. Category, tag, global, and rule sources can still keep the group visible. Previews distinguish metadata changes from visible question changes. Explicit product exclusions are a separate operation.

= Can I move rules and product exceptions to another site? =

With Pro active and appropriate permissions, JSON/CSV exports include the catalog-faq-pro/v1 extension. Groups/questions use UUIDs; taxonomy conditions use slugs. Products resolve by unique exact SKU, explicit override-UUID mapping or checked same-origin ID; cross-site numeric IDs are not used. Review unresolved products, missing terms and omissions before applying. Invalid rules remain editable but do not run on the storefront. Audit logs and job journals are excluded.

Each file allows at most 2,000 Pro records and 2 MB of Pro configuration within the core 4 MB limit. These are batch limits, not paid quotas. Free reports but does not execute an unhandled Pro extension.

Larger exchanges use the core ZIP bundle exporter’s bounded, ordered parts. Protect downloaded content/product references. This exchange is not a WordPress personal-data export.

= Can revert overwrite a later edit? =

With compatible Pro active, revert restores only eligible journaled changes. A later protected edit produces a conflict and remains intact. The job interface shows the original revert deadline, which is unchanged by updating or reactivating Pro.

== APIs and external content ==

Pro administrative screens call your site's WordPress REST API under catalog-faq-pro/v1 for rule/product searches, rule and exception editing, coverage/impact/simulation reports, saved scans, change previews, jobs and activity records. Bulk selectors also use catalog-faq/v1/choices from Free. Native forms submit to your site's WordPress admin-post.php. Requests carry the action’s selections, search text, drafts or commands, using WordPress authentication and permissions. They do not call a vendor API.

Pro supplies local PHP, JavaScript and CSS and implements no visitor analytics or vendor telemetry. This does not promise zero external traffic: site-authored FAQ answers use Free's rendering facilities. Owner-selected WordPress oEmbed content may cause WordPress to contact the chosen provider; allowed YouTube, Vimeo or Dailymotion iframes and remote images/media may cause visitors' browsers to contact their hosts. Those providers can receive connection and browser information under their own terms and privacy policies. Choose content and consent handling appropriate to your site. See Free's external-services disclosure for provider references. WordPress, themes and other plugins can also make their own requests.

== Privacy and local storage ==

Pro does not implement shopper/order collection. It stores site-authored FAQ configuration and administrative workflow records in your WordPress database: rules, local product wording, recent rule history, drafts, report snapshots, change previews and job/recovery journals. These records can contain FAQ text, product names/IDs/SKUs, relationships, timestamps and initiating WordPress user IDs.

The private activity log stores an actor user ID, UTC time, action/outcome, affected record/job references and a sanitized summary. It resolves the user's current display name when showing the log. Activity summaries intentionally omit full answer snapshots, request bodies and credentials; other workflow records do retain content needed for review or recovery. No audit IP-address, email-address or user-agent collection is implemented. Access to administrative records is permission protected; they are not published as visitor-facing logs.

Administrative selection tools keep selected record IDs in browser sessionStorage, scoped to the site and user, so selection can continue across pages. Labels are fetched again with current permissions. This is functional browser storage, not telemetry.

= How long are records kept? =

* Activity records default to 180 days, adjustable by an authorized administrator from 7 to 3,650 days. Each cleanup pass processes at most 100 expired records and 100 deduplication keys, with a time budget and scheduled continuation.
* Change previews expire for use after one day. Their database posts become cleanup candidates after two days; the daily Pro cleanup removes at most 50 per pass.
* Finished job journals and associated scan rows default to 90 days from creation, using Free's bounded cleanup. Only completed, cancelled, failed or reverted jobs with expired revert windows qualify. The default revert window is 30 days; unfinished or paused work can remain longer.
* Rule recovery history keeps the latest 20 configurations per rule without a separate age-based expiry. Short-lived worksets and failed-form recovery drafts use WordPress transients.

These are cleanup eligibility rules, not guaranteed deletion times. Cleanup depends on the relevant plugin and WordPress scheduled tasks running. Pro deactivation/uninstall stops its activity and preview cleanup while retaining data. Exports, site backups and browser-restored sessions are controlled separately. This build does not register a WordPress personal-data exporter or eraser for its Pro records.

== Source and licensing ==

Readable PHP, JavaScript and CSS are included; no compilation is required. Pro uses WordPress libraries and Free's API; catalog features also use WooCommerce. No third-party runtime library is bundled. See LICENSE for GPL-2.0-or-later terms.

== Changelog ==

= 1.1.2 =
* Move specialized bulk assignment, answer and conditional revert handlers into the separate Pro add-on; retain generic Free jobs, imports and data.
* Use core API 2 and matching Free 1.1.2 for the corrected Pro interface. Preserve old journals and the original revert deadline.
* Set the publisher Author URI to https://plugins.shop/.


= 0.2.3 =
* Own bulk command validation, execution and conditional revert in the Pro add-on.
* Require Free 0.2.3 or newer with core API 2; reject incompatible pairs before loading modules.
* Retain existing job journals and their original revert deadlines; reactivation restores available handlers.

= 0.2.2 =
* Keep saved rules within a keyboard-scrollable table on small screens.
* Verify picker request nonces, validate recovered form state and register translations on init.
* Use native screen identity and audit lookup; explain required SQL and domain configuration.
* Retain the private Update URI protection. Pro is not a WordPress.org submission package.

= 0.2.1 =
* Clarify private distribution, same-site APIs, authored external media and retention.

= 0.2.0 =
* Add resumable rule drafts, complete private scan results, reviewed bulk handoff, recent work and named selectors.
* Drain expired activity through bounded scheduled continuation.
