=== Printcart Canvas – Canvas Print Designer & Edge-Wrap Preview for WooCommerce ===
Contributors: printcart
Tags: canvas print, web to print, product designer, print-on-demand, woocommerce
Requires at least: 6.5
Tested up to: 7.1.2
Requires PHP: 7.4
Stable tag: 4.3.6
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Let WooCommerce customers design canvas prints, preview the edge wrap, choose from 34 photo layouts and get a print-quality check before checkout.

== Description ==

Printcart Canvas – Canvas Print Designer & Edge-Wrap Preview for WooCommerce

**Printcart Canvas is a canvas print designer for WooCommerce** that lets customers upload photos, choose a size, layout and edge style, and preview the gallery wrap before they buy. Every photo gets an automatic print-quality check, prices are calculated on the server, and paid orders reach production with every canvas detail attached.

**Turn your WooCommerce store into an online canvas print shop.**

* Live edge-wrap preview in 5 edge styles
* 34 photo layouts, from one photo to six on a single canvas
* Sizes grouped by shape, plus a custom size field
* Automatic print-quality (DPI) check before checkout
* Secure server-side pricing
* Print sheet calculated for every size and depth, with no template per size
* Artwork review queue with a quality verdict for every file
* Paid orders sent to Printcart automatically, with retry
* Guided product setup with one readiness verdict per product

= What is Printcart Canvas? =

Printcart Canvas is a WooCommerce plugin from Printcart built only for canvas and wall-art products. It adds a canvas designer to your product page, where customers upload photos, pick a size, layout and edge style, and see how the picture wraps around the frame. Unlike a general product designer, every part of it is built around canvas: frame depth, edge wrap, image resolution, print sheet and printer roll width.

= Perfect for selling =

* Gallery-wrapped canvas prints
* Photo canvas gifts: family, pets, weddings and travel
* Photo collage canvases with two to six photos
* Square, portrait, landscape and custom-size canvases
* Wall art and art reproductions for artists and galleries

= Who is it for? =

* **Canvas print shops** selling gallery-wrapped canvases online
* **Photo labs and print studios** adding canvas to an existing WooCommerce store
* **Print-on-demand and wall-art brands** that need accurate edge previews at scale
* **Printshops using Printcart** that want a dedicated canvas workflow

= Key features for customers =

* **See the edge before buying.** The canvas updates as the customer changes size or edge style, and Printcart renders an edge-wrap preview image of the finished piece.
* **Five edge styles:** Image Wrap (the photo continues around the sides), Mirror Wrap, Blurred Mirror, Blurred Wrap and Solid Colour.
* **34 photo layouts.** One photo or up to six, from full-bleed to hero-and-grid arrangements.
* **Easy photo placement.** Fit, fill or reset each photo, zoom, and replace any photo in its cell.
* **Honest quality feedback.** Every photo is rated on a five-step quality scale against the chosen size, so customers know before ordering whether a phone photo is sharp enough.

= Key features for store owners =

* **Your options, your products.** Sizes, depths and edge styles come from your Printcart printing option, including sizes grouped by shape and a custom size field.
* **DPI Profiles.** Set the minimum quality per product type and decide what happens below it. By default customers are warned, never blocked.
* **Prices you can trust.** Printcart calculates the price on the server and holds it as a single-use, 30-minute reservation, re-priced when the item is added to the cart. A price sent by the browser is never trusted.
* **No blank canvases.** A canvas cannot be added to the cart with an empty face unless you allow it.
* **Print sheets without templates.** The print sheet is calculated from the face size and depth. An optional production profile adds back-wrap and staple allowances and checks every sheet against your printer's roll width.
* **Canvas templates.** Save size, wrap, print sheet, defaults and pricing rules once and apply them to many products.
* **Setup that tells you what to do next.** Product Setup gives each product one readiness verdict and the next action to take.
* **Artwork queue.** Review every customer file with its quality verdict, then approve it or request a replacement.
* **Production-ready orders.** Each order line records size, depth, edge style, layout, preview and design file. Paid orders are sent to Printcart automatically, with a retry on the Orders screen, and sending can be turned off on the Connection screen.
* **Support-friendly.** Diagnostics checks the environment and connection and builds a support bundle with every credential removed. Store credentials never reach the browser.

= How it works =

**Step 1: Set up your canvas products (admin)**

* Install and activate the plugin, then connect your Printcart account under PC Canvas > Connection
* Link a WooCommerce product to its Printcart printing option
* Follow the readiness verdict in Product Setup until the product is ready to sell
* Choose your quality rules under DPI Profiles

**Step 2: The customer designs a canvas**

* The Printcart designer opens over your product page
* The customer uploads photos, picks a layout, a size and an edge style
* The preview and quality rating update as they go
* The customer adds the canvas to the cart and checks out

**Step 3: The order goes to production**

* Every canvas choice is saved on the WooCommerce order line
* The artwork appears in the Artwork queue with its quality verdict
* The paid order is sent to Printcart with its design file and print sheet

= Good to know =

* The preview is a rendered image of the finished canvas, not a rotatable 3D model.
* Multi-panel canvases (one picture split across several frames) are not available yet.
* A Printcart account is required. Preview renders use 1 Printcart token each and quality checks use 2 tokens per check, taken from the store's Printcart wallet, never from the customer. See External services below.

= Part of the Printcart family =

* Selling T-shirts, mugs, business cards or stickers as well? [Printcart Store](https://wordpress.org/plugins/printcart-integration/) is our web-to-print product designer for every other product type.
* Need a complete canvas or wall-art store built for you? See [solution.printcart.com](https://solution.printcart.com).

= Need help? =

* Ask on the [support forum](https://wordpress.org/support/plugin/printcart-canvas-print/)
* Email support@printcart.com

== Installation ==

1. Make sure WooCommerce is installed and active.
2. Install the plugin from **Plugins > Add New**, or upload the ZIP through
   **Plugins > Add New > Upload Plugin**, and activate it.
3. Go to **PC Canvas > Connection**. Enter your Printcart Store SID, Secret and
   Unauth Token, and run the connection test.
4. In your Printcart store, create the printing option for your canvas
   products: an edge style, optionally an edge depth, and a size. PC Canvas
   reads it from Printcart, so there is nothing to recreate in WordPress.
5. Open **PC Canvas > Products**, choose a product, and follow **Product
   Setup**: link the Printcart product and side, map the printing option, set
   the size and wrap depth, and bind a canvas template for the price.
6. When the product's readiness verdict says Ready, the button appears on its
   product page.
7. Review incoming designs under **PC Canvas > Orders** and **PC Canvas >
   Artwork**.

== Frequently Asked Questions ==

= Is Printcart Canvas free? =

The plugin is free. It needs a Printcart account, which powers the designer, the edge-wrap preview and the print-quality check. Preview renders use 1 Printcart token each and quality checks use 2 tokens per check, taken from the store's Printcart wallet. Your customers never pay for them.

= Do I need WooCommerce? =

Yes. Canvas prints are sold as WooCommerce products, and every canvas choice is saved on the WooCommerce order.

= Do I need Printcart Store (PC Designer) as well? =

No. Printcart Canvas is a standalone plugin with its own PC Canvas menu. Use [Printcart Store](https://wordpress.org/plugins/printcart-integration/) if you also sell T-shirts, mugs, business cards or other products.

= Which canvas edge styles are supported? =

Five: Image Wrap (the photo continues around the sides), Mirror Wrap, Blurred Mirror, Blurred Wrap and Solid Colour in any colour you choose. You decide which ones each product offers through its Printcart printing option.

= Is the preview a real 3D model? =

No. The canvas in the designer updates as the customer changes size or edge style, and Printcart renders an edge-wrap preview image of the finished canvas. It shows the face and the wrapped sides, but it is an image, not a model the customer can rotate.

= How does the print-quality (DPI) check work? =

Each photo is rated on a five-step scale against the canvas size: when it is uploaded, when the size changes, and again at add to cart. Zooming or moving a photo does not trigger a new paid check. On the DPI Profiles screen you set the minimum quality per product type and what happens below it. By default customers are warned but never blocked. If the store's token balance runs out, the rating is still shown as an estimate and no sale is blocked.

= Which sizes and depths can I sell? =

Any size and depth your Printcart printing option offers, including sizes grouped by shape (square, portrait, landscape) and a custom size field. Each side can be from 3 to 120 inches, and frame depth from 0.25 to 3 inches.

= Can customers put several photos on one canvas? =

Yes. Customers choose from 34 photo layouts, from a single photo to six photos on one canvas. Multi-panel canvases, where one picture is split across several frames, are not available yet.

= How are prices calculated? =

Printcart calculates the price on the server from the customer's selection and holds it as a single-use, 30-minute reservation, re-priced when the item is added to the cart. A price sent by the browser is never trusted.

= What does my production team receive? =

Each order line records the size, depth, edge style, layout, preview image and design file. The print sheet is calculated for that size and depth, and the file appears in the Artwork queue with its quality verdict for approval.

= Are orders sent to Printcart automatically? =

Yes. Paid orders are sent to Printcart for production in the background, and any failed send can be retried from the Orders screen. You can turn automatic sending off on the Connection screen.

= What data is sent to Printcart? =

Only what each feature needs, such as the photo and canvas settings for a preview, or the order number, status and design file for production. Customer names, emails and addresses are not stored in the canvas order data. Every service and the data it receives is listed in the External services section.

= Is it compatible with WooCommerce HPOS? =

Yes. Order data is read and written through WooCommerce's HPOS-compatible order APIs.

= What happens if Printcart is unreachable? =

The customer sees a short message with a retry option, and checkout keeps working. If a product is not fully set up, the canvas designer stays hidden from customers and Product Setup shows what is missing.

= Can Printcart build a complete canvas store for me? =

Yes. Printcart also builds complete canvas and wall-art stores. See [solution.printcart.com](https://solution.printcart.com).

= How do I get support? =

Ask on the [support forum](https://wordpress.org/support/plugin/printcart-canvas-print/) or email support@printcart.com. The Diagnostics screen can build a support bundle with every credential removed, so you can share it safely.

== Screenshots ==

1. Dashboard: connection status, store readiness and the issues that need attention.
2. Products: every canvas product with its readiness verdict and next action.
3. Product Setup: the overview and setup steps for one canvas product.
4. Artwork: the design files customers produced, with their file checks.
5. Connection: Printcart credentials, the connection test and the "Send paid orders to Printcart automatically" switch.
6. The customer's view: the Printcart designer in a full-screen overlay on the product page.

== External services ==

This plugin connects your WooCommerce store to **Printcart**, a third-party
print-production service. It cannot work without it: the designer, preview,
print-quality check, pricing and order hand-off run on Printcart. Nothing is
sent to Printcart until you enter your Printcart credentials on PC Canvas >
Connection and link a product to Printcart.

The plugin never sends your customers' names, email addresses, phone numbers,
billing addresses or shipping addresses to Printcart. Like any server-to-server
request, each call also carries your server's IP address and the standard
WordPress user agent, which includes your site address and WordPress version.

**1. Printcart API: https://api.printcart.com/v1**

Called by your server, never by the browser. It is the only host that receives
your SID and Secret. The address can be changed with the "API base URL" field
on the Connection screen.

*In wp-admin, when you act.*

* Connection test: reads your store details and plan (`GET /stores/store-details`, `GET /account/wordpress-plan`) and checks the Unauth Token (`GET /products`).
* Product setup: looks up the Printcart product for a WooCommerce product by its WooCommerce product ID, reads products, sides, side geometry, 3D settings and production readiness, and reads your printing options (`/printing-options/resolve`, `/printing-options/{id}/wordpress`). No customer data.
* When you ask for it: creates a Printcart product from the WooCommerce product name (`POST /products`), writes side sizes (`PUT /sides/{id}`) and saves the 3D profile (edge style and depth).
* Test preview: uploads a test image and renders it, as below, at the same token cost.
* Support export: the same read-only checks plus `GET /integration/woocommerce/sync-health`. The export is shown to you to copy; it is not sent anywhere.

*In the background.* When a product's saved copy of its printing-option
fields is older than 15 minutes, WP-Cron reloads it
(`GET /printing-options/{id}/wordpress`) in its own request. No customer data.

*When a customer asks for a preview* (the designer asks automatically when the
customer changes an option the preview depends on):

* `POST /images`: a PNG snapshot of the design (up to 10 MB) and its file name, so Printcart can host it.
* `POST /3d/edge-preview`: the Printcart product and side IDs, the hosted image address, the edge style and colour, the output size, and the customer's size and depth.
* **Metered: 1 token per render** Printcart performs, from the store owner's wallet, billed to you. A render Printcart serves from its cache is free, but a repeat of the same design is not guaranteed to be served from cache. Refused on Printcart's free plan. Any visitor who opens the designer on an enabled product can trigger renders.

*When a customer's image is checked for print quality* (on upload, on a size
change and before add to cart):

* `POST /customizer/preflight/dpi`: the Printcart product and side IDs, the canvas size in pixels and inches, and each placed image's pixel dimensions (up to 100 images). No image and no image address are sent.
* **Metered: 2 tokens per request** from the store owner's wallet, billed to you. If the wallet is empty the customer keeps the local estimate and the designer stops asking for that session.

*When a customer confirms a design and adds it to the cart:*

* `POST /printing-options/{id}/calculate`: the quantity, canvas size and unit, and the customer's option choices, so Printcart can price the line.

*Automatic order sync, on by default.* When an order that contains a designed
canvas line is paid (WooCommerce status processing or completed), the order is
sent in the background with `POST /integration/woocommerce/orders`, never
during checkout. Bank-transfer and cheque orders wait until you mark them
paid. A failed send is retried twice.

* Order: order ID and number, status, currency, total, subtotal, shipping total, tax total and creation date.
* Each canvas line: line ID, WooCommerce product and variation IDs, product name, quantity, the design file and preview addresses, and the canvas details (Printcart product, side and profile IDs, size, geometry, edge style, colour, depth, layout and panel count).
* **Not sent:** customer name, email, phone, billing or shipping address, customer ID, payment details, order key and customer note.
* Turn it off: untick "Send paid orders to Printcart automatically" on PC Canvas > Connection. Retry sync on PC Canvas > Orders still sends a line by hand.

Terms of Service: https://solution.printcart.com/tos/licenses-and-terms
Privacy Policy: https://printcart.com/privacy-policy

**2. Printcart designer: https://customizer.printcart.com**

When a customer clicks "Customize with PC Canvas", their browser loads the
Printcart designer in an iframe. Its address carries your shop address, your
store's Unauth Token, the Printcart product and side IDs, the WooCommerce
product and variation IDs, and a short description of the canvas. From then
on the designer is Printcart's application: it loads its own files from
Printcart, and the photos the customer uploads and the design they make go to
Printcart. The address can be changed with the `PC3D_APP_URL` constant.

The Unauth Token is readable by any visitor to an enabled product page, by
design. It cannot change your products' canvas geometry, but it is not a
read-only key: Printcart accepts it for some write requests, such as saving
design templates. It can appear in browser history, server logs and `Referer`
headers. You can rotate it from your Printcart account.

Terms of Service: https://solution.printcart.com/tos/licenses-and-terms
Privacy Policy: https://printcart.com/privacy-policy

**3. Printcart file hosting**

Uploaded design images and rendered previews are stored by Printcart and
served from the address Printcart returns for them. The customer's browser and
your wp-admin load those images from there.

Terms of Service: https://solution.printcart.com/tos/licenses-and-terms
Privacy Policy: https://printcart.com/privacy-policy

API reference: https://docs.printcart.com/rest-api-reference/

== Changelog ==

= 4.3.6 =

Listing:

* New plugin icon and banner on the WordPress.org listing.
* The listing title, short description, Description and FAQ are rewritten to
  say what the plugin does in plain language: the edge-wrap preview, the 34
  photo layouts, the print-quality check and server-side pricing.
* "Tested up to" is now 7.1.2.

No plugin code changes. Nothing in the shopper or admin workflow is affected.

= 4.3.5 =

Security:

* The admin screen loader validates the request origin before it reads any
  other part of the request: the permission check, then the nonce for the
  screen the request names, then the screen query. A nonce issued for one PC
  Canvas screen can no longer load another.
* Admin actions are gated by one nonce check for both request transports,
  instead of a check chosen by transport.
* Every PC Canvas screen checks the user's permission before it verifies the
  nonce, so a nonce is never the only thing authorising a request.
* The Connection screen routes a submission by the form it names, so its two
  nonce checks cannot overlap.

= 4.3.4 =

Security:

* Admin view query values, including nested values, are sanitised immediately
  after WordPress decodes them and before any screen renders.

= 4.3.3 =

Security:

* Admin actions now verify permission and intent before request values are
  normalised into an explicit payload. Downstream helpers no longer read raw
  request globals.
* Values decoded from JSON are passed through WordPress core sanitizers before
  use, while encoded image URLs remain intact.
* Test artwork uploads now use the WordPress upload handler with PNG-only MIME
  validation and remove the temporary local copy after use.

Fixed:

* Malformed list values in admin actions are rejected safely instead of
  reaching scalar-only functions.

= 4.3.2 =

Fixed:

* The notice shown when WooCommerce is missing appeared on every admin screen
  for every user. It now appears only for someone who can activate plugins, and
  only on the Plugins and Dashboard screens.
* Saving Connection settings could fail with a PHP error if a field arrived as
  a list instead of a value.
* The dimension-unit notice no longer shows a close button that did nothing.
  The "Dismiss" link beside it is unchanged and still remembers.

Security:

* Form and URL values are sanitised where they are read, and data decoded from
  JSON is sanitised before it is used. No behaviour changes for merchants or
  shoppers.

= 4.3.1 =

Fixed:

* The "Send paid orders to Printcart automatically" switch on Connection
  could not be turned off in 4.3.0. It now stays off when you untick it.
* The dimension-unit notice now stays dismissed.
* The notice shown after a Product Setup action is no longer decoded twice.

Security:

* Each visitor is limited to 20 previews a minute (360 an hour) and 12 quality
  checks a minute (240 an hour), so the Printcart tokens they spend cannot be
  drained. Developers can change the limits with the `pc3d_buyer_rate_limits`
  filter.
* Database queries are fully prepared, and form values are sanitised as they
  are read.

Added:

* Compatibility with WooCommerce High-Performance Order Storage and the cart
  and checkout blocks.
* The product-page button's "Opening PC Canvas…" and "Try again" labels can be
  translated.

Changed:

* WordPress 6.5 or later is required.
* The External services section now lists the token cost of previews and
  quality checks, every field order sync sends, and how to turn it off.

Upgrading:

* If you turned automatic order sync off on 4.3.0, it stayed on. After
  updating, check the switch on PC Canvas > Connection.

= 4.3.0 =

Added:

* Paid canvas orders are sent to Printcart on their own, in the background
  and never during checkout. An order is sent once WooCommerce counts it as
  paid (processing or completed); a bank-transfer or cheque order waits until
  you mark it paid. A failed send is retried twice; after that, or at once
  when Printcart refuses the order (for example on a plan without order
  sync), the line shows "Sync failed" with the reason and the order gets a
  note. A line already sent is never sent twice.
* A switch on Connection, "Send paid orders to Printcart automatically". It
  is on by default and works with JavaScript off.
* A warning on Product Setup, Products, the product box and the Dashboard
  where PCDesigner - Web 2 Print Solution is still switched on for a canvas
  product. The product stays on sale through PC Canvas.

Changed:

* "Design Files" is now "Artwork" in the menu, titles, buttons and the
  Dashboard. Page addresses are unchanged.
* Retry sync on Orders and Order Detail runs the same code as the automatic
  send, and a failed retry now shows Printcart's reason.
* PC Canvas now notices PCDesigner - Web 2 Print Solution, only to keep it out
  of the way on canvas products. It never changes PC Designer's settings.

Fixed:

* With PCDesigner - Web 2 Print Solution also active, canvas products set up
  before 4.0.0 could open its old designer. On every product PC Canvas serves,
  PC Designer's "Start Design" button and its after-add-to-cart editor
  redirect are now kept out of the way; other products are unchanged.
* Every order was marked "needs review". The order line now carries the
  preview the plugin rendered for the canvas the buyer ordered.
* The cart showed the canvas price as a sale. A canvas line now shows one
  plain price. The amount charged is unchanged.
* Retry sync could not have reached Printcart. It now sends the whole order
  once.
* The Artwork check now accepts the formats Printcart produces (SVG, PNG, PDF,
  JPG, WEBP). Uploads are still PNG only.
* Order Detail listed optional fields as missing; they now read "Not
  applicable".
* Keyboard focus is now visible on Product Setup's section links and on
  breadcrumbs.

Security:

* Review statuses, the input hash and the product setup status posted by the
  browser at add-to-cart are ignored. A preview address from the browser is
  used only when the server has no matching render, and only if it is an
  https Printcart address.
* The order sent to Printcart carries no customer name, email, phone or
  address.

Upgrading:

* Automatic order sync is on after upgrading. To keep sending orders by hand,
  untick "Send paid orders to Printcart automatically" on PC Canvas >
  Connection.

= 4.2.0 =

* Added: admin screens load and save in place, with a status line; everything
  still works with JavaScript off.
* Added: Canvas templates hold a canvas's size, depth, edge, material, finish,
  frame, print sheet and price, and can be applied to products.
* Added: Product Setup in four steps after an Overview, with one next action.
* Added: store dimension unit and roll limit on Connection; Products views with
  counts and reasons.
* Changed: one readiness verdict everywhere; the menu is ordered by task.
* Changed: the Dashboard says "Connected" only after a passing connection test.
* Fixed: saving Product Setup with JavaScript off; the 3D edge template save
  redirect; a refused Price save showing a green notice; an invisible "Skip to
  section" link.
* Security: credentials appear only as their last 4 characters, on Connection
  only.
* Upgrading: pricing and 3D edge templates are merged into Canvas templates the
  first time a store manager opens a screen that reads them. Nothing is
  overwritten.

= 4.1.3 =

* Fixed: first-time guest shoppers could not add a designed canvas to the
  cart; they were told the price quote had expired.

= 4.1.2 =

* Fixed: canvas products could stop being orderable about 15 minutes after
  setup. The plugin now keeps a last-known-good copy of each product's
  Printcart field list and refreshes it in the background with WP-Cron.

= 4.1.1 =

* Fixed: on Product Setup > Mapping, "Save Mapping" and the "PC Canvas
  enabled" checkbox did nothing for a product whose Printcart field list had
  not been loaded.

= 4.1.0 =

* Added: automatic print-quality (DPI) checking, and a DPI Profiles screen.
  Each check costs the store owner 2 Printcart tokens; an empty wallet never
  blocks a sale.
* Added: Printing Options setup for a fresh store; mapping of style, material,
  finish, hanging hardware and add-ons; production sheet geometry; the
  print-roll limit; multi-panel canvases (not yet priced as a set).
* Added: a Connection setting, "Artwork", that refuses a blank canvas at
  add-to-cart. On by default.
* Changed: text domain is now `printcart-canvas-print`.
* Fixed: a finished design never reached the cart; every customer preview
  failed with "No artwork received"; uninstall left seven product settings
  behind.

Releases before 4.1.0 are not repeated here. 4.0.0 made PC Canvas a
standalone plugin with its own product-page button and designer overlay.

== Upgrade Notice ==

= 4.3.6 =

Listing only: new icon, banner and rewritten Description and FAQ. No code changes, nothing to do after updating.

= 4.3.5 =

Security hardening for the WordPress.org review: the admin screen loader checks permission and nonce before it reads a request, and every PC Canvas screen checks permission before nonce. No shopper workflow changes.

= 4.3.4 =

Security hardening for admin view queries. Encoded input is sanitised after decoding and before any PC Canvas screen renders.

= 4.3.3 =

Security hardening for WordPress.org review: request data is verified and sanitised at explicit boundaries, and test artwork uses the WordPress upload handler. No shopper workflow changes.

= 4.3.2 =

Housekeeping release. The "WooCommerce is missing" notice no longer shows on every admin screen to every user, saving Connection settings cannot fail with a PHP error, and input is sanitised where it is read. Nothing changes for shoppers or for how your orders reach Printcart.

= 4.3.1 =

Update now: the automatic order sync switch could not be turned off in 4.3.0. After updating, check "Send paid orders to Printcart automatically" on PC Canvas > Connection. Also limits how many token-spending previews and checks one visitor can run.

= 4.3.0 =

Paid canvas orders now reach Printcart automatically (switch it off on PC Canvas > Connection). Update if you also run PCDesigner - Web 2 Print Solution: canvas products could open its old designer instead of PC Canvas.

= 4.2.0 =

A rebuilt admin: in-place loading and saving, Canvas templates, and Product Setup in four steps. Your pricing and 3D edge templates are merged into Canvas templates automatically; the old data is kept.

= 4.1.3 =

Update now: first-time guest shoppers could not add a designed canvas to the cart; they were told the price quote had expired.

= 4.1.2 =

Update now: canvas products could stop being orderable about 15 minutes after setup, because the saved Printcart field list expired and customers were offered no sizes.

= 4.1.1 =

Update if you run 4.1.0. On products whose Printcart field list had not been loaded, Product Setup > Mapping could not be saved and PC Canvas could not be enabled there.

= 4.1.0 =

Adds print-quality (DPI) checking, multi-panel canvases, production sheet geometry and Printing Options setup for new stores. A blank canvas is now refused at add-to-cart; turn that off under PC Canvas > Connection > Artwork.
