- Removed unnecessary warning log when transforming model data.
- Fixed encoded onload value when loading Snipcart's JS.
- Fixed some Control Panel screens using the incorrect currency symbols.
- Saving product details on non-default sites cleared the field data (#31)
- Fixed composer and package plugin version number.
- Fixed aliases to use new
@fostercommerce
instead of@workingconcept
. Thanks @mattstein.
{warning} Links to deprecated classes have been removed. Be sure to update any custom modules or plugins relying on Snipcart prior to 1.4.0.
- Changed
workingconcept
namespace tofostercommerce
.
- Removed deprecated class links to get rid of composer warnings.
- Fixed an issue preventing new webhook events from being logged.
- Added support for
order.refund.created
andorder.notification.created
webhooks. - Added template hooks:
cp.snipcart.cart.detail
,cp.snipcart.customer.detail
,cp.snipcart.discount.detail
,cp.snipcart.order.detail
,cp.snipcart.subscription.detail
.
- Uninstalling now properly removes all plugin data.
- Fixed an issue that prevented plugin from uninstalling successfully.
- Fixed a bug that kept the Product Details currency symbol from being displayed.
- Fixed a bug that could have misidentified duplicate SKUs in Craft 3.5. (#21)
- Updated Codeception setup, added simple unit tests.
- Refactored format helper to do a better job returning an explicitly-requested currency’s symbol.
- Exposed order item subscription details in control panel views.
- Various minor improvements for control panel templates.
- Product details
getBuyNowButton()
no longer requires a|raw
Twig filter.
- Recent Orders summary displays order completion dates rather than creation dates.
- Fixed custom email notifications.
- Order notification email subjects are now translatable.
- Admin order email notifications will only display a ShipStation ID when it’s not empty.
- The Recent Orders summary now uses relative timestamps rather than
m/d
format.
{warning} This release re-namespaces some classes for PSR-4 compliance. If you’re using event hooks or other custom code relying on the
workingconcept\snipcart\models\*
orworkingconcept\snipcart\providers\*
namespaces, you may need to update those references.
- Product Details price is displayed and saved properly when a user’s preferred language is German. (#17)
- Code quality improvements: cleanup, formatting, and minor refactoring.
workingconcept\snipcart\models\Dimensions
is nowworkingconcept\snipcart\models\snipcart\Dimensions
.workingconcept\snipcart\models\Item
is nowworkingconcept\snipcart\models\snipcart\Item
.workingconcept\snipcart\models\Address
is nowworkingconcept\snipcart\models\snipcart\Address
.workingconcept\snipcart\models\OrderEvent
is nowworkingconcept\snipcart\models\snipcart\OrderEvent
.workingconcept\snipcart\models\DigitalGood
is nowworkingconcept\snipcart\models\snipcart\DigitalGood
.workingconcept\snipcart\models\Category
is nowworkingconcept\snipcart\models\snipcart\Category
.workingconcept\snipcart\models\Order
is nowworkingconcept\snipcart\models\snipcart\Order
.workingconcept\snipcart\models\Notification
is nowworkingconcept\snipcart\models\snipcart\Notification
.workingconcept\snipcart\models\Plan
is nowworkingconcept\snipcart\models\snipcart\Plan
.workingconcept\snipcart\models\Product
is nowworkingconcept\snipcart\models\snipcart\Product
.workingconcept\snipcart\models\Domain
is nowworkingconcept\snipcart\models\snipcart\Domain
.workingconcept\snipcart\models\Discount
is nowworkingconcept\snipcart\models\snipcart\Discount
.workingconcept\snipcart\models\Customer
is nowworkingconcept\snipcart\models\snipcart\Customer
.workingconcept\snipcart\models\AbandonedCart
is nowworkingconcept\snipcart\models\snipcart\AbandonedCart
.workingconcept\snipcart\models\SubscriptionEvent
is nowworkingconcept\snipcart\models\snipcart\SubscriptionEvent
.workingconcept\snipcart\models\Tax
is nowworkingconcept\snipcart\models\snipcart\Tax
.workingconcept\snipcart\models\ShippingEvent
is nowworkingconcept\snipcart\models\snipcart\ShippingEvent
.workingconcept\snipcart\models\PaymentSchedule
is nowworkingconcept\snipcart\models\snipcart\PaymentSchedule
.workingconcept\snipcart\models\CustomField
is nowworkingconcept\snipcart\models\snipcart\CustomField
.workingconcept\snipcart\models\ShippingRate
is nowworkingconcept\snipcart\models\snipcart\ShippingRate
.workingconcept\snipcart\models\ProductVariant
is nowworkingconcept\snipcart\models\snipcart\ProductVariant
.workingconcept\snipcart\models\TaxesEvent
is nowworkingconcept\snipcart\models\snipcart\TaxesEvent
.workingconcept\snipcart\models\UserSession
is nowworkingconcept\snipcart\models\snipcart\UserSession
.workingconcept\snipcart\models\CustomerStatistics
is nowworkingconcept\snipcart\models\snipcart\CustomerStatistics
.workingconcept\snipcart\models\Refund
is nowworkingconcept\snipcart\models\snipcart\Refund
.workingconcept\snipcart\models\ShippingMethod
is nowworkingconcept\snipcart\models\snipcart\ShippingMethod
.workingconcept\snipcart\models\Subscription
is nowworkingconcept\snipcart\models\snipcart\Subscription
.workingconcept\snipcart\models\Package
is nowworkingconcept\snipcart\models\snipcart\Package
.workingconcept\snipcart\providers\ShipStation
is nowworkingconcept\snipcart\providers\shipstation\ShipStation
.
- Added support for using Product Details fields in element queries.
- Improved precision of price, weight, and dimensions by storing as decimals rather than floats.
- Orders without any shippable items are not sent to ShipStation.
- Fixed minor styling issues with price field in Craft 3.4.
- Fixed CSS inliner call during email rendering.
- Exceptions will be thrown if Snipcart’s API is erroring or unresponsive.
- Fixed error that could occur if a failed request did not include a response.
- Weightless Snipcart orders now report
0
weight to ShipStation rather thannull
.
- Added support for Swiss Franc (CHF).
- Added
ShipStation::EVENT_BEFORE_SEND_ORDER
event for modifying the ShipStation order before it’s sent to their REST API.
- ShipStation orders now include
carrierCode
only if aserviceCode
is provided for the shipping method. This makes it possible to request custom shipping methods not provided by any carrier.
- Fixed various date format issues in the control panel. (User’s preferred format is now honored.)
- Fixed Customer list search field display in Craft 3.4.
- Updated pagination style in control panel listings.
- Added multi-site support for the Product Details field.
- Added support for Item
pausingAction
andcancellationAction
properties.
- Email notifications display with item
unitPrice
andtotalPrice
. - 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+.
- Fixed missing
£
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
limit
argument. - Added support for GBP
£
.
- Console ShipStation verifier skips checking orders without shippable items.
- Added support for test mode!
- Added
Discounts::updateDiscount()
. - 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. UseInventoryEvent::$element
instead.Products::reduceProductInventory()
is now deprecated. UseProducts::reduceInventory()
instead, which takes a single Snipcart Item as an argument.Orders::updateElementsFromOrder()
is now deprecated. UseOrders::updateProductsFromOrder()
instead.
- Added Matrix support for Product Details field.
- Added ability to provide a custom
name
andurl
ingetBuyNowButton()
, 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.
- Added
FormatHelper::formatCurrency()
andcraft.snipcart.formatCurrency()
for consistent currency display that honors default store currency setting.
- Optimized AssetBundles.
- Fixed minor padding issues for the very last elements in some control panel views.
getBuyNowButton()
can now take animage
parameter.cartLink()
supports ashowCount
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:
craft.snipcart.getCustomer()
,craft.snipcart.getOrder()
andcraft.snipcart.getSubscription()
. - 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
normalizedRate
property.
- Fixed a bug where passing a
null
value for Product DetailscustomOptions
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
get()
,post()
,put()
, anddelete()
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
mode
. - 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.
- References to
WebhookEvent
should now beShippingRateEvent
.
- Refactored ShippingProvider to expose REST API methods.
- Various code quality improvements.
- Fixed incorrect item weights when converting a Snipcart order into a ShipStation order.
- ShipStation’s
_getOrderNotes()
and_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.
WebhookEvent
’spackaging
property is nowpackage
.- 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 whichEVENT_BEFORE_RETURN_SHIPPING_RATES
has moved. Listeners should subscribe toShipments::EVENT_BEFORE_RETURN_SHIPPING_RATES
. - Listeners should now subscribe to
Orders::EVENT_BEFORE_REQUEST_SHIPPING_RATES
instead ofSnipcartService::EVENT_BEFORE_REQUEST_SHIPPING_RATES
. - Listeners should now subscribe to
Products::EVENT_PRODUCT_INVENTORY_CHANGE
instead ofSnipcartService::EVENT_PRODUCT_INVENTORY_CHANGE
.
- 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.
- Reverted ShipStationOrderItem
fields()
.
- 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.
- Renamed SnipcartService’s
processShippingRates()
togetShippingRatesForOrder()
. - 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 insuccess: false
. - Renamed
listAbandoned
template variable tolistAbandonedCarts
.
- 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
badResponse()
tobadRequestResponse()
.
- 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.