Added multi-site support for the Product Details field.
Added support for Item
Email notifications display with item
ShipStation orders are built with each item's adjusted unit price.
Fixed error that kept Product Details field from being used in Quick Post Dashboard widget.
Improved display of product options in email notification.
Removed field delta saving to avoid bugs.
Tidied up order notification email templates.
Fixed a type error that could prevent automatic quantity deprecation for non-shippable products. (#13)
Added support for Product Details delta saving in Craft 3.4+.
£ in some templates.
Added ability to force ShipStation re-feed attempts from the command line.
Improved logging for ShipStation re-feed attempts.
Console ShipStation verifier now has an optional
Added support for GBP
Console ShipStation verifier skips checking orders without shippable items.
Added support for test mode!
Added status constants to Snipcart Order model.
Fixed a template bug that could have wrongly indicated an expired discount.
Fixed an error when clearing the Snipcart API cache from the Clear Caches utility.
Fixed a few template template display bugs where some details may not be present.
Custom product options can now be plain text inputs. (No array of choices required.)
Added GraphQL support to Product Details fields.
Exposed shipping data re-feed attempt window as a configurable setting.
Minor code improvements.
Removed a changed API reference that caused an error in the Abandoned Cart list.
Fixed a query error that could prevent Product Details fields from saving.
Added support for Craft 3.2.0-RC2.
Fixed a template bug that caused the Customers search field to disappear when there were no results.
InventoryEvent::$entry is now deprecated. Use
Products::reduceProductInventory() is now deprecated. Use
Products::reduceInventory() instead, which takes a single Snipcart Item as an argument.
Orders::updateElementsFromOrder() is now deprecated. Use
Added Matrix support for Product Details field.
Added ability to provide a custom
getBuyNowButton(), which defaults to Entry or parent Entry's Title and URL.
Product Details SKU is now properly validated to be unique.
Added code to prevent Snipcart API changes from resulting in control panel errors.
Fixed minor control panel view inconsistencies.
Fixed an error that could occur if ModelHelper::stripUnknownProperties() received non-iterable data.
Fixed a bug that prevented API response cache from being disabled.
Added a new Discount property that might have thrown errors in the control panel.
Updated charting library and made minor stylistic and readability improvements.
Fixed a bug that affected chart's date range display.
Added store performance chart to the CP section and made date range editable.
Improved dashboard widget charts.
craft.snipcart.formatCurrency() for consistent currency display that honors default store currency setting.
Fixed minor padding issues for the very last elements in some control panel views.
getBuyNowButton() can now take an
cartLink() supports a
showCount setting for optionally removing the cart button's dynamic item count.
cartSnippet() now includes Snipcart's base theme stylesheet by default.
getBuyNowButton() now adds
.btn as a default that can be removed.
Added Twig template methods:
Added ability to override Twig
getBuyNowButton() price with support for multiple currencies.
getBuyNowButton() can now include custom options with negative price adjustments.
Currency setting is now saved properly.
Improved consistency of currency values displayed in the control panel and email templates.
Fixed UnknownPropertyException when viewing Discounts because of new
Fixed a bug where passing a
null value for Product Details
customOptions would throw a warning in PHP 7.2.
Fixed bug populating existing Element's product detail.
Added support for pre-3.1 versions of Craft CMS.
Fixed an issue that would cause a Section re-save task to fail after a Product Details field is added to an existing Section.
Product defaults are honored correctly per field setting on new and existing entries.
Fixed a JS error in Product Details field settings.
Removed beta tag! 🎉
Improved safety of CraftQL check.
Fixed Install migration to prevent blocking re-install.
Added a nicer configured+empty landing state graphic.
Cleaned up docblocks and variable names for consistency.
Required endpoint parameter for
delete() API service methods.
Fixed a bug that kept static config settings from counting toward a configured state.
Added pagination support to Abandoned Carts.
Added a friendlier CP section empty state before plugin is configured.
Ajaxified CP landing stat panels to speed up page load.
Spiffed up the Craft Commerce comparison table in the readme.
Fixed template error when
shipFrom settings are empty.
Fixed incorrect reference that interfered with subscription invoice creation webhook.
Invalid/unparsed environment variables won't count as a "configured" state for the plugin.
Added Notifications service.
Fixed bug in console Snipcart → ShipStation verification utility.
Added CraftQL support for field data.
Improved support for Webhooks plugin.
Isolated API caches with TagDependency.
Refactored webhooks into component.
Stopped inventory event from firing for products that don't store inventory.
Added support for additional AbandonedCart attributes.
Added Fields service.
Improved webhook resilience in some cases when incoming payloads contain unexpected attributes.
Added new Order and Item attributes.
Added inventory to the Product Details field type.
Added the ability to designate a custom admin order notification email template.
Webhook log now stores
Added support for displaying Subscriptions and cancelling them from the control panel.
Added Overview tab for control panel section.
Added Event hook for registering shipping providers.
Some settings now offer env and template suggestions.
Added environment variable support for Snipcart + ShipStation API keys.
Flattened migrations into single Install.
Improved several control panel views.
Optimized control panel assets.
Vastly improved speed and flexibility of Dashboard widget.
Refactored control panel views.
Deleted many SnipcartVariable methods after refactor.
Cleaned up Orders interface, removing several methods.
Removed ability to define custom product fields.
Removed unused Packaging Types.
Added Product Details field type for quick setup.
Added control panel views for Discounts, Abandoned Carts, and Subscriptions.
Added ability to create a Discount via control panel.
Improved plugin settings control panel layout.
Refactored and expanded Events.
WebhookEvent should now be
Refactored ShippingProvider to expose REST API methods.
Various code quality improvements.
Fixed incorrect item weights when converting a Snipcart order into a ShipStation order.
_getGiftNote() will no longer return empty values.
Breaking changes for everyone!
Massively refactored services and models, which will definitely break any services or models you're using directly.
Renamed all ShipStation models and moved them to their own namespace.
Renamed all Snipcart models.
packaging property is now
Abstracted ShipStation service into Shipments, meaning it's now accessed via
Snipcart::$plugin->shipments->shipStation. Note that the intent is for other services to interact directly with Shipments, to which
EVENT_BEFORE_RETURN_SHIPPING_RATES has moved. Listeners should subscribe to
Listeners should now subscribe to
Orders::EVENT_BEFORE_REQUEST_SHIPPING_RATES instead of
Listeners should now subscribe to
Products::EVENT_PRODUCT_INVENTORY_CHANGE instead of
Fixed missing ShipStation fields, prevent wrapping additional email prices.
Fixed token verification.
VerifyController requests un-cached Snipcart orders.
Spiffed up and added re-feed attempt status to order failure notifications.
Added explicit type coercion in a few places.
Fixed type error that impacted VerifyController.
Separated parts of SnipcartService into new ApiService.
Changed the way API exceptions are handled to reduce disruption and log failures.
Refactored SnipcartService to be cleaner.
Models now use proper DateTime values.
Improved ShipStation order verifier accuracy.
Updated webhook controller's
handleOrderCompletedEvent() to continue through problems and report errors by model. Any errors at all will result in
listAbandoned template variable to
Minor fix for mobile order email price wrapping.
Added package detail to Snipcart rate response.
Use billingAddressName instead of cardholderName in order notification emails.
Return JSON for all webhook requests.
Keep ShipStation service from failing if Snipcart order has
null value for custom fields.
Rename webhook controller's
Fix type issues with SnipcartOrder model.
Return magic variables when SnipcartOrder is treated as an array.
Respond calmly to missing webhook event names or content and don't allow logging.
Added weight property to SnipcartItem model.
Added hasPhysicalDimensions() for both Snipcart and ShipStation item models.
Changed ShipStation service method names to better reflect what they do.
Fixed incorrect docblock details.
ShipStationService's getWeightFromSnipcartData() is now getWeightFromSnipcartOrder().
Improved code quality throughout models.
Fixed SnipStation gift setting detection.
Made cosmetic fixes to console order verification tool.
ShipStation order model no longer limits string length; longer customer and gift messages won't cause webhook failure.
Fixed webhook and service bugs.
Improved class documentation.
Improved console verification tool.
Improved code quality with optimizations and type hints.
Fixed several incorrect references.
Initial GitHub release.