=== Snap Showroom Basic ===
Tags: product catalogue, quote request, showroom, rfq, external images
Requires at least: 6.0
Requires PHP: 8.0
Stable tag: 1.0.4
Tested up to: 7.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A quote-only product showroom for WordPress with products, categories, variants, local or external images, CSV import and RFQ requests.

== Description ==

Snap Showroom Basic is a lightweight product catalogue for businesses that want customers to browse products and request a quotation without running a full e-commerce store.

Core customer journey:

Browse catalogue -> choose a product -> select size/colour where applicable -> choose quantity -> add to Quote Request -> enter name and email (other details optional) -> business receives an RFQ email.

The core plugin deliberately does not provide:

* Public prices or supplier costs
* Stock quantities or automatic stock-status claims
* Checkout or Buy Now flows
* Online payments
* Shipping calculations
* Customer accounts
* Automatic quotation acceptance

Features in the free core:

* Catalogue products and hierarchical categories
* Product detail pages
* Size and colour options
* Quote Request basket and RFQ submission
* CSV and packaged ZIP import
* Repeat-safe product matching by reference/SKU, supplier code or exact title
* Local Media Library images
* External supplier/CDN image URLs without downloading the files
* External-image verification and controlled local-media cleanup
* Strict local image matching for multi-image product views
* Basic Rank Math-compatible SEO metadata
* Product and catalogue structured data without price/Offer schema
* Business identity, local logo colour extraction with automatic contrast, and optional manual brand-colour settings

== Installation ==

1. Back up the test WordPress site.
2. Upload the plugin ZIP under Plugins -> Add New -> Upload Plugin.
3. Activate Snap Showroom Basic.
4. Open Snap Showroom Basic -> Settings and enter the test business details.
5. Visit the automatically created /catalogue/ and /quote-request/ pages.
6. Import sample-products.csv or create products manually.
7. If product URLs return 404, open Settings -> Permalinks and click Save Changes once.

Activation creates only two public pages when they do not already exist:

* /catalogue/ using [snapshba_catalogue]
* /quote-request/ using [snapshba_quote_req]

Snap Showroom Basic does not replace the homepage, set the front page, create industry pages or rewrite unrelated site content.

== Catalogue import ==

Upload either:

* A CSV file; or
* A ZIP containing one CSV plus product image files in an images folder.

Supported CSV columns:

category,subcategory,product_name,reference,brand,description,short_description,applications,features,standards,sizes,colours,pack_info,image_filename,image_url,supplier,supplier_code,seo_title,meta_description,focus_keywords

Required columns:

* category
* product_name

Supplier and supplier_code are private admin fields and are not shown in the public catalogue.

Remote image_url values are stored as external links and are not downloaded into the WordPress Media Library. Packaged image files are stored locally.

== Import validation feedback ==

The importer reports created, updated, skipped and externally linked products. If rows are skipped, a warning lists spreadsheet row numbers, product references, reasons and corrections. Existing valid rows are still imported. If more than 5,000 rows are supplied, a warning explains that remaining rows were not processed.

The importer does not include a preview or rollback. Re-imports preserve existing product descriptions, images, optional metadata (including subcategory when the parent category is unchanged), and draft status when an optional column is missing or blank. Use the product editor for deliberate deletion. Product Code is the preferred persistent identifier; ambiguous matches are rejected with correction instructions.

== Product matching on re-import ==

1. Unique Product Code / SKU
2. Unique Supplier + Supplier Product Code
3. Unique exact Product Name, if identifiers are absent

Conflicting identifiers and ambiguous existing records are skipped rather than overwritten. Repeated rows in a single uploaded file are skipped and reported.

== External image storage ==

Snap Showroom Basic can display a product image directly from a supplier or CDN URL. The Image Storage screen can:

1. Verify remote image links in batches.
2. Release verified local image references while recording rollback information.
3. Restore released local references while files still exist.
4. Restore local attachment references if needed. Permanent Media Library deletion is disabled in the Basic plugin.

No media files are permanently deleted by the Image Storage screen.

== Privacy ==

Quote requests store submitted contact details, any optional business information, and selected products in the site's WordPress database. The plugin also sends RFQ notification emails to the configured business email and a confirmation email to the requester. Site administrators control retention and deletion of saved requests; the plugin does not automatically remove them, and the site owner must provide the applicable privacy and retention notice. Email copies may also remain in mailboxes after a WordPress record is deleted. The plugin does not provide a dedicated privacy export/erase integration in this candidate.

Remote product images are loaded from URLs deliberately supplied by the administrator (for example, a supplier or image CDN). Visitors viewing those images connect directly to the selected third-party image hosts, whose terms and privacy policies depend on the host. This plugin does not send site telemetry, analytics or licence checks to its developer.

== Changelog ==

= 1.0.4 =
* Migrate legacy metadata keys with WordPress metadata APIs instead of custom UPDATE/JOIN queries.
* Preserve existing metadata IDs and values, including recovery of conflicts after interrupted upgrades.


= 1.0.3 =
* Bind legacy migration metadata keys directly in the database update query for WordPress.org security checks.


= 1.0.2 =
* Migrate legacy short identifiers to snapshba_ keys (products, categories, quotation requests, options, metadata, pages and shortcodes).
* Preserve existing catalogue post IDs, term IDs, RFQ records, linked media and settings during an automatic, repeat-safe upgrade.
* Update companion integration contract while preserving existing page URLs.


= 1.0.1 =
* Move the Snap Showroom Basic admin menu below the standard WordPress menus, as requested during directory pre-review.
* No catalogue, importer, quotation or persistent-data changes.

= 1.0.0 =
* Initial stable release of the free catalogue and RFQ plugin.
* CSV/ZIP import, safe repeat imports, responsive product displays and logo-derived brand colours.
* Customer quote requests, email notifications, local/external product images and optional size/colour variants.
* Completed WordPress.org Plugin Check corrections, text-domain resources and release packaging.

== Brand colours ==

Upload a PNG, JPG or WebP logo in Snap Showroom Basic -> Settings. Auto colour mode extracts a local colour palette and generates high-contrast dark headers, accent text, buttons and neutral surfaces. If the plugin has no uploaded logo, the WordPress Site Logo is used when available. No external analysis service is contacted. Hosts without GD or Imagick use neutral colours; manual colours remain available.


== Plain-language CSV examples (rc5) ==

The Import Products screen offers two CSV examples, using readable headings such as Category, Product Name, Product Code, Description, Sizes, Colours and Image Link. Only Category and Product Name are required. The importer also accepts legacy snake_case headers, and maps Product Code to reference and Image Link to image_url. Duplicate aliases for one field are rejected. The files are CSV UTF-8, not XLSX.
