=== PRT Feed for idealo ===
Contributors: prtdev
Tags: woocommerce, idealo, product-feed
Requires at least: 6.7
Tested up to: 7.1
Requires PHP: 8.2
Stable tag: 2.2.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Complete PRT plugin for WooCommerce, including feeds, PWS, configuration, assistant, statistics and reports.

== Description ==

PRT Feed for idealo connects WooCommerce to PRT's external catalog service. PRT servers retrieve native product data over authenticated HTTPS, evaluate the catalog, generate XML/CSV and host the current feeds. The PRT scheduler rebuilds every 15 minutes and after detected product changes, independently of visits or WordPress cron. Your HTTPS store must remain reachable with this connector active.

This is the complete distribution downloaded directly from PRT, outside WordPress.org. Install one ZIP and activate one plugin. Connection, native export, aggregate counting, PWS transport, advanced configuration, assistant, statistics and reports are bundled in this package. The modules under premium/ are part of this plugin, not a second installable plugin. No additional PRT component is downloaded or installed.

The separately maintained WordPress.org connector and its optional PRT component remain different distributions. This complete ZIP must not be uploaded to the WordPress.org connector submission.

The interface supports Italian, English, German, French and Spanish. PRT provides an independent integration. No endorsement by idealo or WooCommerce is implied.

= Paid PRT service =

The existing subscription is EUR 9 per month including VAT, with automatic renewals until cancelled and one 21-day trial per eligible store. Initial approved checkout includes the configuration/statistics option, 300 authorized clicks per paid cycle and EUR 0.03 per additional authorized click. Trial clicks are not billed. Installing either component alone never authorizes payment or changes an existing option. Stripe checkout requires the manager's explicit acceptance.

The configuration/statistics option supplies the bundled advanced features and their access controls. Disabling its option retains the same EUR 9 base subscription, continues feed and PWS with base rules, and preserves customizations for later restoration. New events during the disabled interval are not retroactively charged. Anonymous aggregate counts are distinct from consented attribution and billing events.

Deactivating or uninstalling the complete plugin cancels the PRT subscription after successful reconciliation of authorized usage. If PRT is unreachable, the operation stops with an error instead of claiming cancellation succeeded. Updating the plugin does not deactivate it or cancel the subscription.

Product information: https://www.prtflow.com/idealo-woocommerce
Service terms: https://prtdev.com/apps/idealo-woocommerce/legal.php?document=terms&lang=en
Privacy: https://prtdev.com/apps/idealo-woocommerce/legal.php?document=privacy&lang=en
Support: https://prtdev.com/apps/idealo-woocommerce/legal.php?document=contacts&lang=en

== Requirements ==

* WordPress 6.7 or later, WooCommerce 9.5 or later and PHP 8.2 or later.
* PHP sodium, mbstring, DOM and XMLWriter. WooCommerce Action Scheduler.
* A reachable HTTPS store and an active PRT subscription for hosted feed generation.
* Your own idealo account and verified credentials for optional PWS.

HPOS compatible. Third-party pricing, tax, shipping, multilingual and currency extensions require verification with the actual catalog. Currencies are not automatically converted. Review product eligibility and industry-specific required attributes before publishing.

== Installation ==

1. Install and activate WooCommerce, then this connector.
2. Open WooCommerce, idealo di PRT. Local connection settings are available without purchasing or connecting a service.
3. If you want the PRT hosted service, review its terms and cost summary and explicitly proceed to Stripe.
4. Configure the catalog and use the included assistant, statistics and reports as permitted by the existing service choice. No second plugin is needed.
5. Set your market, shipping, delivery and payment conditions. Review the current hosted feed before sharing its private link with idealo.
6. For PWS, enter your idealo credentials, verify them and explicitly authorize sending offers. Agree the feed/PWS channel with idealo.

To update an existing complete idealo-prt installation, upload this ZIP and choose WordPress's replacement/update action. The plugin basename, store identity, settings and existing subscription are preserved. If using the separate WordPress.org connector/component distributions, contact PRT for a controlled migration. Deactivating the old connector cancels the subscription and is not an update or migration shortcut.

== External services and data ==

= PRT =

Endpoint: https://prtdev.com/apps/idealo-woocommerce/api.php

Public update checks retrieve the signed version manifest without registering the store, exporting its catalog or authorizing a payment. Catalog-service registration starts only after the administrator accepts the service summary and presses Proceed. Registration transmits the installation ID, HTTPS store URL, authentication token, private feed-token hash, connector version and return URL. After registration, authenticated scheduled requests synchronize native product titles, identifiers, prices, stock, images, product links and export conditions. The service evaluates and groups offers, hosts the XML/CSV output and returns a signed data-only mirror. Feed links contain access tokens, so share them only with authorized recipients.

PRT receives subscription choices, explicit authorizations and previously authorized usage event IDs/times during reconciliation. The connector can reconcile outstanding events created by the separate component even if that component is no longer active. It does not send raw orders, customer names, addresses, visitor IP addresses or PWS credentials to PRT. No visitor identifier or unique browsing history is created by its aggregate counter.

Terms: https://prtdev.com/apps/idealo-woocommerce/legal.php?document=terms&lang=en
Privacy: https://prtdev.com/apps/idealo-woocommerce/legal.php?document=privacy&lang=en

= Stripe =

Payment and subscription management use https://checkout.stripe.com and https://billing.stripe.com . The PRT server communicates with Stripe. This plugin does not receive card details or a Stripe secret key.

Terms: https://stripe.com/legal
Privacy: https://stripe.com/privacy

= idealo PWS =

PWS authenticates with https://api.idealo.com and sends offer data to https://import.idealo.com only after the administrator configures, verifies and authorizes the connection. Credentials are encrypted locally. This local adapter is not license-gated. It operates on a fresh authenticated service mirror and stops when that data is unavailable or stale. API acceptance is not proof of final publication on idealo. Bulk removals require explicit confirmation.

API documentation: https://idealo.github.io/idealo-partner-api-docs/
Feed documentation: https://idealo.github.io/csv-importer/en/csv/
Merchant agreements: https://business.idealo.com/

== Privacy ==

The local counter records hourly product access totals from valid signed idealo landing links. It does not store visitor cookies, sessions, IP addresses, user agents or unique visitor records. Staff, recognizable bots and prefetches are excluded. It is an aggregate count, not a guaranteed unique human-click measurement. Ordinary hosting logs are separate.

Optional consented attribution, the assistant and reports are bundled in this package. Cookie/session attribution and billable events use the existing WP Consent API checks. Assistant questions and export-setting summaries are sent to PRT and then OpenAI. Do not enter secrets or customer information. Suggestions require confirmation before application. Customer and order data remain in WooCommerce. Optional email reports use the store's configured mail provider only after the manager enables them and chooses a recipient. The provider receives the report and recipient. Review the service privacy notice and your own obligations before enabling data sharing.

OpenAI terms: https://openai.com/policies/business-terms/
OpenAI privacy: https://openai.com/policies/privacy-policy/

== Frequently Asked Questions ==

= Is the PRT service free? =

No. Downloading the connector does not create a free service plan. The paid PRT service performs substantive catalog processing and feed publication on PRT servers. The local connector code is fully available without a license check.

= Does the complete plugin require a second component or subscription? =

No. All modules are bundled in one plugin and use the same installation identity, configuration and existing PRT subscription. Installing or updating the plugin does not create or modify a payment authorization.

= Are old feed generations used if a refresh fails? =

No. Invalidated or expired results are not served as current. Restore connectivity and rebuild rather than relying on stale offers.

= Do updates require visitors? =

No. The PRT server schedules hosted builds. WooCommerce's queue supports local maintenance and timely change notifications and should run regularly.

= Are feeds public? =

The links use private access tokens. Treat each full link as a credential.

== Source code and packaging ==

All PHP, JavaScript and CSS source files are included in this plugin. The files in assets/ are the human-readable, directly maintained runtime sources, not compiled or minified bundles. The bundled modules include Chart.js and Tagify, with notices, licenses and exact source links in premium/NOTICE.txt and premium/assets/. No npm, webpack, transpilation, minification or external source download is needed to modify or run it.

assets/admin.js handles only the language form's native POST submission. assets/clean-link.js removes the signed product landing parameters from the visible browser address after the server has processed the request. CSS files contain the shared PRT interface styles and the WordPress host adapter.

The complete packaging source is tools/build-package.py. From this plugin directory, run:

python3 tools/build-package.py

This uses only the Python 3 standard library and creates a ZIP beside the plugin directory, with one idealo-prt/ root. An optional output ZIP path may be supplied as the final argument. Packaging copies these same readable sources without compiling, obfuscating or transforming them. A JavaScript formatter may be used while editing; it is not a build dependency and no generated counterpart is required.

== Request security ==

Administrative changes use POST forms with wp_nonce_field('prt_idealo'). The handler rejects other HTTP methods, checks current_user_can('manage_woocommerce') and validates check_admin_referer('prt_idealo') before processing input. Payment actions also require their own explicit confirmation. Visiting an admin screen or reading a return selector does not authorize checkout, cancellation, consent or configuration changes.

The server-to-server connector is not a browser-admin action. It requires a bounded POST JSON body, an installation-bound HMAC, an exact installation identity and a five-minute timestamp window. A WordPress session nonce is not an authentication mechanism for an external scheduler. The ownership challenge is read-only and returns only a keyed proof. Feed redirects require the private feed token. Public product counts require the exact product HMAC and the eligibility checks documented above. None of these machine/public routes relies on a privileged browser cookie.

== Signed updates ==

This complete distribution retrieves https://prtdev.com/apps/idealo-woocommerce/releases/complete-latest.json . Updates require a valid signature, an approved PRT download URL and a matching ZIP hash. Version checks may send WordPress's normal HTTP client metadata. They do not register a store or authorize payment. The legacy direct update channel and the WordPress.org packages are maintained separately.

== Changelog ==

= 2.2.5 =
* Bundle the current connector and all advanced modules in one installable plugin.
* Preserve the existing complete-plugin basename, store identity and subscription.
* Keep the WordPress.org connector and its optional component separate and unchanged.

= 2.1.3 =
* Align the name, directory, main file, text domain, packaging and component dependency with PRT Feed for idealo.


= 2.1.2 =
* Align the plugin name, directory, main file, text domain and package tooling with Feed for idealo and feed-idealo.
* Preserve existing store identity, saved settings and subscription behavior.

= 2.1.1 =
* Distribute readable JavaScript and CSS sources and a standalone packaging script.
* Remove unused report and statistics JavaScript from the directory connector.
* Explicitly restrict administrative mutations to POST before capability and nonce validation.
* Document browser, public and authenticated machine request security.

= 2.1.0 =
* Separate the open connector from the independently distributed advanced component.
* Preserve the existing store identity and single subscription.
* Receive data-only evaluated catalog results from the hosted PRT service.
* Keep feed/PWS base rules and saved customizations consistent across mode changes.
