Commerce is a powerful e-commerce solution for MODX, allowing you to sell online exactly the way you want. Install even more functionality with 20+ plug & play extensions, or build your own.
[checkout] Default frontend/checkout/payment-method.twig template now has an {% else %} condition to show an error when no payment options are available
[core] New Markdown service added for simple parsing of markdown text or inline snippets.
[core] Switch license check to a POST instead of GET to avoid 414 Request-URI Too Long issues
[core] Load commerce:messages lexicon by default in all requests
[core] When sending an email, it will now by default write the fully-parsed HTML content to the order message table. To disable that, for example while customising email templates, disable the new commerce.save_sent_message_content system setting.
[core] Alter the order message content field from text (max 64kb) to mediumtext (max 16mb) to allow storing large parsed emails with complex markup structures or inline data images
[core] Prevent recursive loop triggered by FreePro duct module
[core] Make sure context-specific lexicon (cultureKey) is loaded when processing status changes from either a payment webhook or back-end status change in different manager_language [#566]
[core] Support ClientConfig settings in multi-context mode when loading an order-specific context for processing from the back-end
[checkout] Fix retrying a pending payment not working [#592]
[dashboard] Support an extra level of nested transaction information when viewing transaction details
[dashboard] Fix z-index conflict causing modals to pop below the MODX header when used alongside Redactor 3 [#599]
[dashboard] Process MODX tags in the email preview in the manager [#584]
[dashboard] Prevent autocomplete on password fields
[dashboard] Fix license check in configuration checklist having poor performance and/or incorrect result
[gateways] New ConditionallyAvailableGatewayInterface allows gateway implementations to evaluate if an order can use a payment gateway
[gateways] Mollie gateway now exposes its client
[gateways] Prevent Stripe attempting to create negative transactions in edge-cases
[gateways] Make sure Stripe does not reuse a payment intent on the payment step if it already succeeded [#585]
[gateways] Make sure values passed to Stripe are stripped of spaces that may break validation [#593]
[gateways] Make sure Mollie gateway shows localised method names and descriptions [S23052]
[messages] Add a setting (commerce.default_message_type) to control what order message type to use by default when creating an order message
[messages] Add new templated order message type, use that for sending emails to customers wrapped in a professional template
[modules] Make it possible to add actions to transactions from a module using new event (\Commerce::EVENT_DASHBOARD_TRANSACTION_ACTIONS)
[products] Matrix now shows infinite stock products accordingly - if you have custom Twig templates for matrices in the front-end, you may need to also address this issue in your own template by checking `product.stock_infinite` [#577]
[products] Reduce minimum length of row/column names to 1 character instead of 3 [#576]
[reports] Fix Addresses export; now exports addresses used in processing/completed orders rather than addresses saved on a user profile [#632]
[reports] New option on the "Orders" export that lets you also export associated item information in extra rows [#626]
[reports] Update Products export with multi-currency prices, infinite stock, and other missing fields [#526]
[setup] Make sure installation is marked as failed if requirements aren't met
[setup] Check the database connection is still alive after unpacking files, and automatically reconnecting if not. [#600]
[shipments] Get weight unit from the first product rather than a hardcoded kg default
[taxes] Correct EUVat caching lifetime to 12 hours
[taxes] You can now prefix tax rule conditions with "shipping_address.", "billing_address.", and "order." to target specific objects as needed. [#137]
[taxes] You can now prefix tax rule conditions with "properties." to look in object properties. Can be combined with the object prefix, e.g. "shipping_address.properties." [#137]
[taxes] TaxJar integration has been updated: now uses shipping instead of billing address, no longer restricted exclusively to US (use tax rule conditions to limit if needed), update tax rate names from lexicon, provide email as customer_id (to manage customer exemptions in TaxJar), provide street + city for rooftop accuracy, support street + city in nexus
[taxes] EUVat tax rate names will now be updated when used, allowing improved localisation [#362]
[tvs] Prevent product pricing TV from breaking and refusing to save data if the TV had a numeric value before
Dependency updates:
commerceguys/addressing updated from v1.0.7 to v1.0.8
commerceguys/intl updated from v1.0.5 to v1.0.6
composer/ca-bundle updated from 1.2.5 to 1.2.7
guzzlehttp/guzzle updated from 6.4.1 to 6.5.5
mollie/mollie-api-php updated from v2.17.0 to v2.18.0
taxjar/taxjar-php updated from v1.9.0 to v1.10.3
symfony/polyfill-ctype updated from v1.13.1 to v1.17.1
twig/twig updated from v1.42.4 to v1.42.5
symfony/polyfill-php70 updated from v1.13.1 to v1.17.1
symfony/polyfill-mbstring updated from v1.13.1 to v1.17.1
symfony/http-foundation updated from v3.4.36 to v3.4.42
symfony/polyfill-php72 installed in version v1.17.0
symfony/polyfill-intl-idn installed in version v1.17.1
[taxes] IMPORTANT: the jsonvat.com service previously used in the EUVat rate provider was shut down all of a sudden. We've set up a new private API with the current rates instead, and updated the EUVat rate provider to use that.
[core] Silence deprecation warnings for core modules - those have all been updated.
[taxes] IMPORTANT: the jsonvat.com service previously used in the EUVat rate provider was shut down all of a sudden. We've set up a new private API with the current rates instead, and updated the EUVat rate provider to use that.
[invoices] Fix incorrect placeholder causing VAT registration numbers to be missing from the invoices [S22494]
[invoices] Make sure invoice generation organises by year based on the created date, not the current date
[invoices] Provide a utility to regenerate all invoices from SSH
[emails] Add nl2br filter to the payment/shipping method email note in the default order-received template
This release is a hotfix to correct issues with the Authorize.net and other payment gateways, resulting from out-of-date TLS certificate bundles. For more information, please see the announcement: https://forum.modmore.com/t/commerce-v1-1-3-simplecart-authorize-net-2-0-2-hotfix/2059
[core] During package installation automatically update root certificates for legacy implementations of guzzle/guzzle, including Authorize.net gateway and possibly other implementations of the pre-1.1 BaseGateway [S22401]
[core] Relax minimum PHP requirements back down to v7.1+
[core] Increase the size of comOrderItem.name and comOrderItem.link fields [#571]
[countries] Fix isInEuropeanUnion check (countries availability, taxes) using incorrect "UK" and "EL" country codes, that should have been (and now is) "GB" and "GR" [#542]
[modules] Basic Custom Fields: spaces around the field name are now ignored [F1981]
[payments] Expired Mollie transactions are now recognised as having failed
[payments] Improve Stripe webhook logic to be able of identifying transaction records for already completed transactions [#551]
[invoices] Render MODX tags in invoices [S22302]
[settings] Fix reference to time_format instead of commerce.time_format for the time formatter
[taxes] Rewrote most of the EU VAT Validator to better account for UK/GB and EL/GR country codes and improve automated tests
Dependencies:
commerceguys/addressing updated from v1.0.6 to v1.0.7
mollie/mollie-api-php updated from v2.12.1 to v2.17.0
Commerce now requires at least PHP 7.1 or higher. See: https://www.modmore.com/blog/2019/minimum-php-requirements/
This release also implements data sharing that allows us to analyse how Commerce is implemented. This can be configured to only share the data you are comfortable sharing, and defaults to only technical information. For detailed information, see Configuration > Data Sharing in the dashboard.
There are also a lot of code cleanups and some minor breaking changes in this release. See https://docs.modmore.com/en/Commerce/v1/Upgrades/v1.1.html for details.
New features:
[checkout] New Basic Order Fields module to make it easier to accept custom data (without writing a module)
[checkout] Custom order fields are now available as {{ order_fields.KEY }} in checkout templates and the ajax response
[pricing] [BC] PriceTypeInterface::getFields() signature change to include passing the Commerce instance
[pricing] Price types can now provide a `select` field with `options => [value => label]`
[products] Products can now have infinite stock, simply check the new checkbox when editing a product
[products] Added new User and User Group price types for product pricing [F1669]
[payments] Stripe gateway updated using Payment Intents, Elements and Customers for SCA/3DS compatible payments
[payments] Mollie gateway updated based on v2 API, supporting multi-currency, new "show" payment option to show all options on-site, issuers shown for all options with issuers with image
[payments] Braintree gateway updated to Drop-in UI v3, supporting customers (= vaulted payment methods), Vault Manager, 3DS (SCA), and PayPal
[payments] New comTransaction-related events for created, cancelled, processing, failed and completed events.
[payments] New CommercePayments.onSubmit utility to ease payment form submit-based callbacks
[shipping] New comShippingMethod->getShippingForm method to let you render a form for a shipping method
[shipping] [BC] comOrderShipment->setShippingMethod method now has an extra argument array $data, which will contain submitted values from the checkout, and accepts a string return value to indicate an error to the customer
[shipping] New comOrderShipment->getShipmentDetails() method to define key => value pairs of information to show in the order items grid
[shipping] New comOrderShipment->getTrackingURL() method to define a customer-facing Track & Trace URL, available everywhere shipments are available as tracking_url
[shipping] You can now exclude countries in shipping methods by prefixing them with a dash (-) [#122]
[shipping] You can now add "EU" or "-EU" to country conditions to target the entire EU at once
[snippets] get_matrix now has access to {{ resource.FIELD or TV }} placeholders [S20375]
[snippets] get_products now supports &offset and pagination with getPage/pdoPage
[snippets] get_products has a new &wrapperTpl property to set a chunk [F1855]
[templates] New strftime Twig filter for locale-dependant date formatting
[dashboard] New Number($min, $max) validation for admin fields
[dashboard] Allow paid extensions (from the modmore provider) to re-use the license check in the checklist
Improvements:
[core] A new ViewInterface (+ TwigView implementation) replaces core and module interaction with Twig.
[core] comOrderItem::getOrder will now return the session order if no persisted order is set yet
[core] Formatted dates now take into account the MODX server_offset_time system setting [#413]
[dashboard] When clicking a link/button that opens in a modal, the modal is now immediately opened showing a loading spinner, to indicate something is happening
[dashboard] The dashboard will now process inline javascript when using ajax navigation and in modals
[dashboard] Expand checklist for shipping methods to check if shipping methods exist for each delivery type
[dashboard] Generic "text" type for price type subfields added
[dashboard] Show IDs for products, statuses, payment methods, shipping methods, delivery types, and tax groups in the dashboard
[dashboard] DescriptionField now uses slightly different markup so the title is in the left column, and description to the right
[dashboard] DescriptionField now supports `raw` - when provided the description is not escaped when added into the form
[dashboard] Ajax navigation now updates the browser URL without waiting for a response
[dashboard] Better catch fatal errors in the dashboard
[emails] The email note is now available for each transaction (transaction.email_note) and shipment (shipment.email_note) separately
[frontend] Default styles updated for Mollie payment gateway and MyParcel shipping method (separate extension)
[invoices] Default invoice/web.twig template now only adds the img tag when a logo url is set, falling back to the site name
[invoices] Fixed incorrect usage of order.created_on instead of order.received_on for the order date
[invoices] Invoice meta block is now aligned right
[modules] Changed the way modules are loaded for better error handling in the initialisation of modules. If a module causes an error or exception when initialising, that is now stored with the module record and shown in the module configuration
[modules] Checkout event now has the request method, so you can choose to only act on GET/POST
[setup] The Euro currency now defaults to a period (.) for the decimal separator and comma (,) for thousands instead of the reverse
[payments] Manual payment gateway has been refactored to the new GatewayInterface
[payments] Payment Methods can now scope their input fields as "payment_method[ID]" to only get their own values, preventing conflicts [#219]
[reports] Sales report will now fill up days without a date at the start of the result range
[snippets] Snippets now use $commerce->getChunk instead of $modx->getChunk for easier enhancements
[snippets] The get_product snippet now includes the resource it's called from in the log message when product information can't be found [#430]
[snippets] Add &where and &logSql properties to get_orders and get_products
[shipments] tracking_url and weight_formatted now available in emails and elsewhere shipments are loaded
Bug fixes:
[checkout] Only process available Payment Methods in the Payment step when the checkout is not about to redirect (e.g. payment already complete)
[dashboard] Make sure removed shipping methods are not considered valid in the checklist
[dashboard] Fix "commerce.num_rules" incorrect lexicon on Configuration > Tax Groups
[dashboard] Fix product price not being shown in Products List TV
[dashboard] Fix markup being shown in order messages grid for unsent messages
[dashboard] On Status Change Action grid, only include derivative types where $visibleType is true in the add menu
[dashboard] Fix image display in order items grid
[dashboard] Link product to their front-end page in order items grid if a link is set
[dashboard] Fix missing lexicon when editing status change actions [#438]
[gateways] Webhook handler now sets the working context [#441]
[orders] Make sure comOrder::getInvoices returns the latest invoice first by ordering on created date
[products] Make sure default_delivery_type and default_tax_group settings affect default selection in the create product form
[reports] Fix Sales report basing periods of the created, rather than received date
[templates] Make sure the MODX core:default lexicon topic is loaded
Potential breaking changes:
comOrderMessage->getPlaceholders() signature change; it is now final and defines the array return type
Commerce::EVENT_ORDER_PAYMENT_RECEIVED and modmore\Commerce\Events\Payment are no longer being triggered. For actions that need to fire when a transaction is completed, use the new Commerce::EVENT_TRANSACTION_COMPLETED event, or for actions that need to fire when an order is paid and moving into processing, use Commerce::EVENT_STATE_CART_TO_PROCESSING.
comOrderShipment->setShippingMethod method signature change; now accepts an extra parameter with submitted data.
PriceTypeInterface::getFields() signature change; is now passed the Commerce instance
Functionality that will be removed in the future:
Commerce::$twig, replaced with the new ViewInterface instance available from Commerce::view(). If you're using Twig functionality not available in the ViewInterface, you can (temporarily) retrieve the Twig\Environment via Commerce->view()->twig() but please contact support to explain your use case so we can improve the ViewInterface instead.
Commerce::loadTwig(), replaced with the new ViewInterface available from Commerce::view()
Commerce::registerServices(), was never implemented and will be removed in v1.2
modmore\Commerce\Pricing\Renderer\TwigRenderer now accepts either a \Twig\Environment or ViewInterface instance; support for \Twig\Environment will be removed in v1.3.
The BaseGateway class has been deprecated. This has been replaced with a new GatewayInterface, which no longer relies exclusively on OmniPay. A new base class, Omnipay2Gateway, can still be used for Omnipay 2 gateways, while direct implementations are now also supported.
\Commerce::EVENT_ORDER_PAYMENT_RECEIVED and modmore\Commerce\Events\Payment no longer triggered, will be removed in v1.3.
Removed deprecated event constants:
comAddress::EVENT_VALIDATE, use Commerce::EVENT_ADDRESS_VALIDATE
comOrder::EVENT_BEFORE_CALCULATE, use Commerce::EVENT_ORDER_BEFORE_CALCULATE
comOrder::EVENT_AFTER_CALCULATE, use Commerce::EVENT_ORDER_AFTER_CALCULATE
comOrder::EVENT_ITEM_ADDED, use Commerce::EVENT_ORDERITEM_ADDED
comOrder::EVENT_ITEM_UPDATED, use Commerce::EVENT_ORDERITEM_UPDATED
comOrder::EVENT_ITEM_REMOVED, use Commerce::EVENT_ORDERITEM_REMOVED
comOrder::EVENT_BEFORE_STATUS_CHANGE, use Commerce::EVENT_ORDER_BEFORE_STATUS_CHANGE
comOrder::EVENT_AFTER_STATUS_CHANGE, use Commerce::EVENT_ORDER_AFTER_STATUS_CHANGE
comOrder::EVENT_AFTER_PAYMENT_RECEIVED, use Commerce::EVENT_ORDER_PAYMENT_RECEIVED
comOrder::EVENT_GET_ORDER_ACTIONS, use Commerce::EVENT_ORDER_GET_ACTIONS, use Commerce::EVENT_DASHBOARD_ORDER_ACTIONS
comOrder::EVENT_CART_TO_PROCESSING_STATE, use Commerce::EVENT_STATE_CART_TO_PROCESSING
comOrder::EVENT_CART_TO_CANCELLED_STATE, use Commerce::EVENT_STATE_CART_TO_CANCELLED
comOrder::EVENT_PROCESSING_TO_COMPLETED_STATE, use Commerce::EVENT_STATE_PROCESSING_TO_COMPLETED
comOrder::EVENT_PROCESSING_TO_CANCELLED_STATE, use Commerce::EVENT_STATE_PROCESSING_TO_CANCELLED
comOrderAddress::EVENT_ADDED, use Commerce::EVENT_ORDER_ADDRESS_ADDED
comOrderItem::EVENT_BEFORE_CALCULATE, use Commerce::EVENT_ORDERITEM_BEFORE_CALCULATE
comOrderItem::EVENT_AFTER_CALCULATE, use Commerce::EVENT_ORDERITEM_AFTER_CALCULATE
Commerce::EVENT_ORDER_GET_ACTIONS, use Commerce::EVENT_DASHBOARD_ORDER_ACTIONS
Commerce::EVENT_DASHBOARD_GET_PAGES, use Commerce::EVENT_DASHBOARD_INIT_GENERATOR
modmore\Commerce\Admin\Generator::COLLECT_PAGES_EVENT, use Commerce::EVENT_DASHBOARD_GET_PAGES
modmore\Commerce\Admin\Generator::COLLECT_MENU_EVENT, use Commerce::EVENT_DASHBOARD_GET_MENU
modmore\Commerce\Admin\Page::EVENT_BEFORE_GENERATE, use Commerce::EVENT_DASHBOARD_PAGE_BEFORE_GENERATE
modmore\Commerce\Admin\Configuration\Checklist::EVENT_GET_CHECKS, use \Commerce::EVENT_DASHBOARD_CHECKLIST_GET_CHECKS
modmore\Commerce\Frontend\Checkout\Process::BEFORE_PROCESS_STEP, use \Commerce::EVENT_CHECKOUT_BEFORE_STEP
modmore\Commerce\Frontend\Checkout\Process::AFTER_PROCESS_STEP, use \Commerce::EVENT_CHECKOUT_AFTER_STEP
modmore\Commerce\Reports\ReportInterface::EVENT_GET_REPORTS, use \Commerce::EVENT_DASHBOARD_REPORTS_GET_REPORT
[core] Fix shipping method change due to cart/address changes not updating the order total until a second refresh [S20379]
[core] To prepare for Commerce 1.1, you'll now see log entries for modules that rely on deprecated events and usage of deprecated methods that have been cleaned up in 1.1
[core] Make sure comOrderAddress is loaded into memory
[modules] Commerce::EVENT_ORDER_PAYMENT_RECEIVED has been deprecated and will no longer work in Commerce 1.1. For modules that should fire when an order is paid, use Commerce::EVENT_STATE_CART_TO_PROCESSING instead.
[dashboard] Fix JS error on MODX3 [#410]
Dependencies:
commerceguys/addressing updated from v1.0.3 to v1.0.4
[dashboard] Remove the beta warning now that we're officially stable :party:
[dashboard] Fix smart date formatting with UTF-8 characters
[products] Prevent numeric/bool TV values for the resource product pricing TV from causing errors
[products] Remove Pricing field from Resource Products; those should be managed on the resource now.
[payments] Fix payment exception being triggered when a Mollie payment is still pending when the customer returns to the checkout (e.g. bank transfers); that now redirects the user to the mollie checkout page [#302]
[core] comSessionCartOrderItem->getOrder() can now return a db-persisted order as well
[core] New ProductPriceIndex table has been added which contains an index of standard product prices, to ease filtering and querying against currency-specific prices
[checkout] Cart and checkout now respond with "application/json" content type header when returning JSON [#387]
[dashboard] Fix modal sizes not adjusting when selecting/removing a product image [S19891]
[modules] DefaultAddress and AutoFillGeoIP modules now also fire on the order calculate event, so integrations outside checkout can access expected address
[orders] Make sure the right context gets set [S19862]
[orders] Fix dates < 24 hours ago being shown as today, even if it was yesterday [#385]
[shipping] Fix weight getting truncated when larger than 1000 in certain locales
[snippets] get_matrix_price now fetches prices from the ProductPriceIndex
[snippets] &sortby=`price` on get_products and get_matrix_first_product now uses the ProductPriceIndex
[snippets] Add commerce.render_taxed_price snippet that can be used to render the real price of a product for the customer, including tax and discounts
Dependencies:
symfony/event-dispatcher updated from v2.8.49 to v2.8.50
symfony/http-foundation updated from v2.8.49 to v2.8.50
[core] Add more logic in comSessionCartOrderItem to prevent errors getting logged and to allow more dynamic in-memory tax-calculation
[dashboard] Fix typo in column for the order logs
[products] Add comProduct->getPricingInstance method to allow custom products to manually build pricing instances
[products] Fix price_formatted missing the actual formatting [S19768]
[products] New/Updated price placeholders: [[+price]] now has current (regular or sale) price, [[+regular_price]] has normal price, [[+rendered_price]] contains HTML with the current and (if set) normal price, [[+price_valid_until]] contains a unix timestamp for when the sale price expires.
[products] New setRawPricing method to complement getRawPricing for custom products
[pricing] Added TimeBoundPriceTypeInterface to indicate that price types have a from/until date
[pricing] Added set/getValidUntil to PriceInterface; used with TimeBoundPriceTypeInterface to indicate when a price expires
[pricing] Allow using var_dump/print_r on any comSimpleObject and pricing-related objects (in PHP 5.6+) without running out of memory
Dependencies:
commerceguys/addressing updated from v1.0.2 to v1.0.3
commerceguys/intl updated from v1.0.2 to v1.0.4
symfony/polyfill-ctype updated from v1.10.0 to v1.11.0
Instead of the old "Price", products now have powerful per-currency "Pricing" with a "Regular Price" and additional "Price Types" that enables time-based sale prices, quantity discounts, and custom price types.
The new pricing is supported on the Product Matrix TV, Product List TV, product bundles, and standard products.
The cart and checkout now check the price is still accurate each time the item is calculated, making sure the right price is always charged.
Enable additional currencies via Configuration > Currencies to e.
Enable the different price types via Configuration > Modules; search for Price.
If you have a Custom Product, check out the pricing developer documentation to learn more about how your custom product type can interact with these new features, and what functionality has been deprecated.
Anywhere products are available, you can now use `pricing_regular` and `pricing_regular_formatted` placeholders for the regular price in the current (based on context) currency. These will in most cases replace `price` and `price_formatted` respectively.
Products shown in the dashboard (e.g. Products tab, Matrix/List TV) will now show the regular price in the current currency, or the regular prices of each configured currency.
Other new features:
[core] Add a ClassUtility service to easily check if a class (by its name) implements a given interface
[core] Add a Countries service to get/validate/list countries
[discounts] You can now automatically give away free products based on order totals. Enable the Free Products module and navigate to Discounts to use it.
[discounts] Allow setting User Discounts for anonymous users
[invoices] It's now possible to create PDF invoices for orders. This requires a new PDF Writer (e.g. PDFCrowd available as extension) and some configuration. See: https://docs.modmore.com/en/Commerce/v1/Invoices.html
[permissions] New "invoice" permission to control who can download invoices
[snippets] Add support for downloading PDF invoices
Improvements:
[core] Price objects now always return an integer default price, which may be 0 instead of the previous null
[dashboard] Modals are now a little wider to make more room for wider fields
[dashboard] Modals should now be the right size when the content height changes
[dashboard] New modmore\Commerce\Admin\Util\Column class to help you better define array columns; legacy array syntax is still supported
[security] All grid values are now automatically htmlencoded to protect against XSS vulnerabilities.
[statuses] Status Change actions now have a sort order allowing you to define the order they run in
Bug fixes:
[core] Add missing index on comOrder.reference_incr
[core] Catch exception when trying to format an address that does not have a country set
[matrix] (Re)loading of data via AJAX in the Product Matrix now preserves the working context (e.g. currency)
[productstv] (Re)loading of data via AJAX in the Products List TV now preserves the context (e.g. currency)
Deprecated:
On comProduct: field price, method getPrice(); both replaced by pricing/getPricing
On comSimpleObject: protected variables $cacheOptions, $cacheExpiry; methods prepareForCache(), restoreCollectionFromCache(), restoreObjectFromCache()
Potentially breaking changes:
Pricing. The new pricing will require you to update templates.
Gateways are now expected to return \Omnipay\Common\ItemInterface instances from preparePurchaseItems()
Modules that used CommerceGuys\Intl\Country\CountryRepository need to change to CommerceGuys\Addressing\Country\CountryRepository
GridWidgets now automatically htmlencode all values shown in a grid. To prevent this, add a `'raw' => true` to your array column definition, and use `$this->encode($value)` to manually encode all user input.
CountryField.getCountries signature changed; no longer requires a Commerce instance
Dependencies updated:
braintree/braintree_php updated from 3.23.1 to 3.39.0
commerceguys/addressing updated from v0.8.4 to v1.0.2
commerceguys/intl updated from v0.7.4 to v1.0.2 - note: breaking changes. Country information was moved to commerceguys/addressing.
guzzlehttp/psr7 updated from 1.4.2 to 1.5.2
guzzlehttp/guzzle updated from 6.3.0 to 6.3.3
mexitek/phpcolors updated from 629eb54 to edf1342
omnipay/authorizenet updated from 2.5.0 to 2.6.0
omnipay/manual update from 2.2.1 to 3.0.0
omnipay/paypal updated from v2.6.3 to v2.6.4
omnipay/sagepay updated from 2.4.0 to 2.6.0
omnipay/stripe updated from v2.4.6 to V2.4.7
paragonie/random_compat updated from v2.0.11 to v2.0.18
phpoffice/phpexcel updated from 1.8.1 to 1.8.2
ralouphie/getallheaders installed in version 2.0.5
symfony/http-foundation updated from v2.8.22 to v2.8.49
symfony/event-dispatcher updated from v2.8.22 to v2.8.49
symfony/polyfill-ctype installed in version v1.10.0
symfony/polyfill-php55 updated from v1.4.0 to v1.10.0
symfony/polyfill-php54 updated from v1.4.0 to v1.10.0
symfony/polyfill-mbstring updated from v1.4.0 to v1.10.0
[checkout] Only show addresses in the checkout with the pre-0.12 "remember" flag enabled
[dashboard] Fix number fields removing leading 0's, preventing use of decimals < 1 [S19168]
[dashboard] Fix search by customer not working in the orders tab [#328]
[dashboard] The internal key for order item adjustments is now available as title on the detailed item calculation
[dashboard] DeleteFormWidget instances can now override a deleteRecord method to affect how a record is removed
[dashboard] Enhanced select fields no longer sort client-side, leaving sort order to be determined by server side
[dashboard] Make sure that overflowing buttons break on full words [#323]
[discounts] Fix user(group) discounts applying based on admin user, instead of customer user, when editing order items
[matrix] All resource fields, and TVs configured in the commerce.matrix.load_tvs setting, are now available to SKU/name templates on a matrix [#327]
[matrix] Fix base weight matrix configuration using the currency input
[matrix] Fix the "Manage Matrix Options" button not being updated with a new link when a copied matrix was moved/duplicated or a new matrix was created
[orders] The order log now tracks the user that triggered an action
[orders] Adding/removing/changing quantity of items, and adding/modifying addresses in the dashboard now triggers the appropriate log message
[package] Now checking new MODX and PHP version minimum policy: https://www.modmore.com/blog/2019/minimum-php-requirements/
[payments] Fix billing information not being sent to payment gateways
[products] Weight unit field now uses the order following the units defined in the allowed_weight_unit setting [#326]
[products] Validate weight units to prevent errors, unrecognised units now fall back to kg [#325]
[products] Make sure a product bundle has been saved before trying to create the related product links [S19468]
[reports] Now setting the proper Content-Type header when downloading reports, to fix issue with .html extension added by Safari [#320]
Potential breaking changes:
comOrder.log() has a new parameter $actionBy. Any derivative order types that override the log method will need to update the method signature.
[addresses] Make sure addresses are not stored on a user profile until they validated
[core] Revolution Adapter's getOption method now passes through to Commerce->getOption which is context-aware
[core] Prevent E_NOTICE error when providing comOrderItem->get with an array
[checkout] AJAX requests to cart/checkout now receive additional formatted values
[dashboard] Fix invalid license not being shown as such in the checklist
[dashboard] When viewing/managing orders, the stored context is now used to make context-specific setting available
[dashboard] Order overview now offers a context filter if orders from multiple contexts exist
[dashboard] Fix incorrect timezone used in order details
[dashboard] Fix the MODX header expanding to full size on Firefox
[dashboard] Fix incorrect icon for Add Product button [S19468]
[frontend] Add !default to Sass settings so you can import and change the default styles more easily [S19296]
[products] Make products in a matrix visible again in the products list, with links to the resource the matrix is on
[products] When using the matrix, it will now identify when the resource was duplicated and offer to start with an empty matrix/copy the products/move the products.
[snippets] Fix incorrect error message in get_product snippet [S19223]
[snippets] Add get_matrix_price and get_matrix_first_product snippets to help build your catalog when using the Product Matrix
[taxes] Fix EU VAT Rate Provider using the incorrect country code for the United Kingdom. Previously used "UK", now the proper "GB" per ISO-3166. If you relied on the incorrect behavior, you may need to tweak your tax rules.
[templates] Use new commerce.account.remember_me lexicon for the "rememberme" text in account.twig
[tvs] Fix "dom is null" error when loading a resource with a Commerce TV
[tvs] Fix edited/inserted products having nested markup
[tvs] Work around obscure issue in Firefox 65 causing the inability to save a resource after unlinking a product in a list TV
[dashboard] Make sure the actions/status changes on the order detail wrap nicely if you have lots of them
[dashboard] Fix taxes row being larger than other rows on the order detail
[dashboard] Add total excluding tax to calculation of order items with inclusive taxes
[dashboard] Strict code fixes: Fix "PHP notice: Undefined index: usage" on coupons grid, "PHP notice: Undefined index: code" on discount grids, and "PHP warning: call_user_func() expects parameter 1 to be a valid callback" in the UserDiscount module
[discounts] Make sure User(group) Discounts are created as comOrderItemDiscountAdjustment objects, and restrict comOrderItem->getDiscount appropriately. This fixes "Instantiated a derived class comOrderItemAdjustment that is not a subclass of the requested class comOrderItemDiscountAdjustment" errors
[messages] Fix "Exception Twig_Error_Loader for Twig template from email_note" being logged when no email note is set
[installer] Made the upgrade notices a bit more verbose
[installer] Make sure that the automatically created order references matches the default value of the setting on first upgrade
[products] Make sure the default product price is returned when currencies are mixed up (e.g. system set to USD while editing an order in the backend which is EUR)
Please see https://docs.modmore.com/en/Commerce/v1/Upgrades/v0.12.html for optional manual upgrades in 0.12.
New features:
[orders] New order references for incremental, templated, order numbering - see https://docs.modmore.com/en/Commerce/v1/Orders/Reference.html [#280]
[orders] New received_on date on orders, which is different from the created_on by containing the date the (concept) order was marked as processing
[dashboard] Add or edit order addresses from the order detail view [#168]
[dashboard] New smart_date twig filter to format relative dates in a human friendly way, and thumbnail filter to create a thumbnail (in the manager)
[templating] New format_currency, str_pad_left and str_pad_right twig filters added - see https://docs.modmore.com/en/Commerce/v1/Templates/Filters_Functions.html
Improvements:
[addresses] Refactored comAddress/comOrderAddress. comOrderAddress now contains a full, independent copy of the address for the order. comAddress is for the "address book" functionality.
[dashboard] Orders overview has been redesigned
[dashboard] Order detail view has been redesignedAd
[dashboard] Refresh the full order view when changing the status [#307]
[dashboard] Order log now defaults to reverse order, so latest entries are first in the list
[reports] Add type and properties to the address export
[reports] Orders report now also includes: billing and shipping address, reference, usernames (instead of IDs), received date, status name instead of ID
[reports] ProductCustomers report now formats dates and includes the username, first/lastname and order reference
Bug fixes:
[dashboard] Fix clicking an icon link/button not opening in a modal window when it should
[reports] Fix "PHP notice: Undefined index: completed_on" when exporting orders
[modules] Fix EnforceStock module unsetting order items after payment
[modules] Fix ItemData module showing labels for empty values in the order detail view
[package] Fix installation in MODX3
Breaking changes:
Some refactoring to addresses may lead to breaking changes in modules. Where methods like comOrder->getBillingAddress would previously return a comAddress instance, those now return a comOrderAddress instance instead. The same fields (except user and remember) are still available on the new objects, but type checking may no longer work as expected.
Order references have been added, which will automatically be used in various templates instead of the ID. You may need to tweak your custom templates and email configuration, as detailed at https://docs.modmore.com/en/Commerce/v1/Upgrades/v0.12.html
[core] Add new comSimpleObject::$visibleType to allow derivatives to indicate they should not be shown in ClassFields. If its value is set to a hidden type, the ClassField will be hidden.
[core] If a comProduct has $visibleType set to false, it wont show up in the products listing
[checkout] Add shop_resource system setting to point to the root of the shop (defaults to site_start) [#294]
[checkout] Make sure the frontend/checkout/wrapper.twig template has access to the full order
[discounts] Add user & user group discounts module
[dashboard] Commerce now has a set of 24 permissions to restrict dashboard access (sponsored by DEGOYA medienkommunikation, thank you!)
[dashboard] Add search to Configuration > Modules [#272]
[emails] Payment and shipping methods now have an email note field, allowing you to set per-method specific messages to include in the customer email [#284]
[products] New product matrix TV lets you manage products that are a combination of two attributes [#301]
[reports] New Tax Summary report to quickly summarise the taxes you've charged [#165]
[snippets] New commerce.get_matrix snippet to help you output a Product Matrix, includes 3 sample templates (see documentation)
[orders] Support for custom order fields [#252]
[orders] Context is now tracked when an order is created in the checkout [#224]
Improvements:
[core] Adapter now has a query method to execute SQL statements
[core] Make sure models don't define the engine type (MyISAM/InnoDB)
[core] The default and frontend lexicons are now always loaded when Commerce is initialised
[checkout] When submitting a form on the cart, you now stay on the cart resource, and clicking Cart on the checkout also goes to the cart page
[dashboard] Submenus can now add classes to the nav, add sub-level-2 for nested submenus
[dashboard] Add tabs to the shipping methods form
[dashboard] New TaxGroupField for use by products
[lexicons] New commerce.add_to_cart lexicon to use in your own templates
[products] New commerce.default_product system setting to control the default product type [#291]
[package] The installable transport package is now secured with encryptedVehicle 2.0 and slight fixes to build order
[reports] Slightly reorder columns in Top Products report to make more sense
[reports] Allow filtering by context on Orders, Top Products, Daily Sales and Taxes Collected reports (orders from < 0.12 will all be web)
[reports] Taxes Collected report now always has 0 or 1 for the Tax Inclusive value
[reports] The order context is included in Orders and Taxes Collected reports
Bug fixes:
[lexicons] Add a few missing lexicons for settings
[coupons] Fix wrong default sort direction on Coupon Usage grid
[dashboard] Only show the payment gateway-specific tab if gateway-specific options are defined
[coupons] Fix coupons being removed when the discount puts the order total below the minimum order total for the coupon [#182]
[customers] Fix customer total of orders not showing up MySQL strict (only_full_group_by) mode [S18536]
[dashboard] SelectField now has a new emptyOption to prefix optionsClass results with a "(none)" option
[products] Fix Resource Product type casting, leading to MySQL validation issues preventing objects from being saved, seemingly introduced in 0.11.3 [S18576]
[reports] Daily Sales and TopProducts report now always groups on currency; resolves issue with MySQL strict (only_full_group_by) mode [#281]
[reports] BaseReport now has a applyFromUntilFilter method to easily apply from/until filtering
[reports] Fix incorrect headings in Transactions report
[reports] Orders report now formats timestamps (DATE_ATOM instead of Unix timestamps)
[reports] Orders report now has a new column for guest checkout, guest_checkout is removed from properties
[reports] Orders report now has a Status filter [#288]
[reports] Orders, Top Products and Daily Sales reports now have a from/until date selector
[reports] Allow Top Products report to be grouped by country [S18536]
[snippets] The get_product snippet will now use the first valid product when provided a list of product IDs
[tvs] Fix Products TV not loading all the appropriate assets/configuration through the Generator [#304]
[cart] Fix potentially incorrect shipping method being shown in the cart on first view after adding a product.
[core] Allow NULL values on comProduct fields description, stock, weight, weight_unit, image, tax_group, delivery_type and target to prevent "Attempt to set NOT NULL field to NULL" errors
[core] Create tables as InnoDB by default
[gateways] Pass order placeholder into the Braintree template to allow further customisation [#289]
[templates] Fix incorrect for attribute on the label for the VAT registration in billing-address-fields.twig
[checkout] Fix shipping total excl taxes being sent to payment gateways, potentially preventing payments from being captured if shipping is taxed [S16939]
[checkout] Fix shipping not being included in total if the delivery type's tax group does not return a valid rate provider [#273]
[dashboard] Log message to the MODX error log if a record can't be handled by a FormWidget because it is the wrong type
[dashboard] Make sure barcode field is a number, otherwise might cause SQL errors on strict mode
[dashboard] Respect Section::$priority for ordering of sections when generating pages
[dashboard] Sections without a set priority now get one set automatically when calling addSection, in multiples of 5
[dashboard] Add commerce-ignore-jsnav class to add to links or nav items to make them bypass the javascript navigation [#277]
[core] Fix "comOrderShipment: Attempt to set NOT NULL field order to NULL" getting logged [#276]
[core] Fix issue getting total number of sold products from the database with only_full_group_by MySQL mode [#275]
[cart] New cart_header_single lexicon to allow proper linguistics in the cart when 1 item is in the cart [S16659]
[core] Add missing index on comOrderItem->delivery_type
[core] comOrderItem now has a tax_group field, automatically set from the product, and getTaxGroup() method to load the instance. Non-product-items can now also have a tax group and taxes applied to it.
[checkout] Make completed transaction information available in the checkout [S16678]
[dashboard] New media settings to configure the media source and directory the media browser opens in when selecting a product image [#269]
[dashboard] Fix "call to getAttribute on null" error on invalid click targets
[dashboard] Update Payment Methods form to use the new tabs and lexicons
[dashboard Image field now has a delete button to remove the image [S16660]
[dashboard] Finish refactoring action definitions (started in rc1) from arrays to Action util classes (payment methods, status workflow, tax groups, tax rules, coupons, order items, transactions, messages, orders, products) [#248]
[emails] Make completed transaction information available in email messages [S16666]
[events] Make sure \Commerce::EVENT_ORDER_PAYMENT_RECEIVED is fired before the status workflow executes [S16052]
[orders] Fix "PHP warning: count(): Parameter must be an array or an object that implements Countable" in comOrder line 632
[payments] You can now limit payment methods based on the chosen shipping methods (e.g. make a "Pay in store" payment method only available when "Pickup" was selected)
[products] Fix "PHP warning: count(): Parameter must be an array or an object that implements Countable" in comProductBundle line 38
[products] Add $product->getBarcode method to products to allow extended products to load it from elsewhere [#271]
[products] Add barcode field support to resource products
[cart] Commerce now automatically selects the first available shipping method, as soon as the cart is shown [#195]
[cart] New ItemData module allows arbitrary data submitted to the cart to be stored (and shown) with the order item
[cart] New \Commerce::EVENT_ITEM_ADDED_TO_CART to allow modules to intercept cart additions (with submitted options)
[cart] Shipping costs are now taxed according to a tax group set on the delivery type [#13]
[checkout] Delivery types now determine if the shipping step should be shown in the checkout [#244]
[checkout] Address validation now provides structured errors with field name and message for use in AJAX
[coupons] Used coupon code is now available in order messages as {{ coupon.code }} [S13477]
[coupons] Coupons can now be limited to specific products [#236]
[dashboard] New \Commerce::EVENT_DASHBOARD_ORDER_ITEM_DETAIL events for displaying additional information in the dashboard
[dashboard] Email order messages now have a checkbox to immediately send the email (on by default)
[dashboard] Add order shipments to the order overview with ability to add tracking code and change shipping method
[dashboard] Now supports JavaScript modules that can hook into the dashboard rendering
[dashboard] Dashboard now supports dynamically-generated tabs in forms, the products form has been updated to use this new feature.
[emails] New email_header_url and email_footer_text settings let you configure a 500x120px image and footer text for order emails [#260]
[gateways] Now storing additional information per transaction (e.g. credit card/bank ref) for: Authorize.net, Braintree, Mollie, MultiSafePay, Paymill
[generator] Modules can now register JavaScript, CSS and HTML fragments to the dashboard in the \Commerce::EVENT_DASHBOARD_INIT_GENERATOR event
[modules] New Commerce::EVENT_DASHBOARD_ORDERSHIPMENT_ACTIONS event to add actions to a shipment from a module
[products] Add a primary image to a product to show it in the cart/checkout, supports the core media browser and inserting by URL
[products] Ability to duplicate a product from the products grid action dropdown [#205]
[products] New barcode field added to standard products
[products] comProduct derivatives can now define a getOrderDetailRow method to add information to the dashboard order view
[productstv] Products TV now has a product type input property allowing you to set the default product type for new products
[shipments] Custom order shipments, defined by delivery type, are now supported. UserGroupShipment available separately.
[snippets] The get_cart and get_products snippets now have a new &separator property to define the separator between each result
[messages] Modules can now listen to the \Commerce::EVENT_ORDER_MESSAGE_PLACEHOLDERS event to add additional placeholders to order messages (emails)
[modules] The Payment event class now provides the OmniPay response object via getResponse()
Improvements:
[checkout] Automatically select the first payment or shipping method when none were previously selected [#254]
[dashboard] Simplify the way addresses are displayed on an order
[dashboard] You can now set the default tax group from Configuration > Tax Groups [#226]
[dashboard] Refactor grid actions from being defined as arrays (backwards compatible) to instances of modmore\Commerce\Admin\Util\Action
[dashboard] Setting default currency/tax group now returns nicely formatted response
[dashboard] Added delivery type filter to Products grid if you have more than one delivery type
[dashboard] Customer info on order view now has additional classes/IDs for modules like the Dymo Address Label to use
[emails] Tweak default order-received.twig template to include discount and shipments
[payments] Braintree gateway now shows a loading text until the gateway widget has been instantiated [#232]
[shipping] Refactored comShippingMethod/+ByWeight to check if they are available by order shipment (see 0.8.0)
[shipping] Refactored comShippingMethod/+ByWeight/+ByCountry to determine price per shipment (see 0.8.0)
Bug fixes:
[cart] Make sure that item-specific links are used in the cart, instead of product-specific
[checklist] Fix missing URL in HTTPS check when receiving a status code error
[dashboard] Fix link in bundle product detail row, on order page, not opening in modal window
[dashboard] Fix links with target="_blank" being hijacked by the ajax navigation [#249]
[dashboard] Fix incorrect tax total shown on the order view when using inclusive tax mode
[dashboard] Fix transaction property with a boolean false value being shown as "yes"
[dashboard] Some slight javascript and template cleanups
[dashboard] Fix [esc] not closing open modals due to scope issue
[dashboard] Make sure changes in fields (including new image and multiselect) resizes the modal to fix overflowing [#261]
[gateways] Remove stray console.log in braintree form
[gateways] Tighten generation of the notifyUrl for background payment confirmations (e.g. Mollie) in subfolders [#258]
[gateways] Allow continuing a pending transaction that requires a POST redirect (e.g. Adyen) [#257]
[products] Make sure comProduct->getDeliveryType is called when adding a product to the cart
[taxes] Fix empty field on tax rule conditions (e.g. "always") causing the condition to not get executed
[taxes] Fix lowercased country in the EU VAT rate provider not working
Possibly breaking changes:
We've adjusted and added new requirement classes to the Checkout process and steps to better control the flow. If you
have a custom process class or custom steps, make sure the checkout still works as expected, and especially compare the
loadRequirement methods of custom step classes with the standard ones. These changes have limited impact on templates.
Some slight changes were made to the frontend/checkout/cart/items.twig template to show the primary image.
BaseGateway->markTransactionSuccessful signature changed to expect the ResponseInterface instead of AbstractResponse
Deprecations:
modmore\Commerce\Frontend\Checkout\Process->completeOrder() has been replaced with comOrder->triggerPaidStatusChange()
Some template changes are included in this release that you may want to apply to your own templates as well. Please see https://docs.modmore.com/en/Commerce/v1/Upgrades/v0.11.html for detailed changes.
[checkout] Logged-in customers can now choose to remember addresses, which are offered during checkout [#167]
[dashboard] The dashboard is now progressively enhanced to use AJAX for navigation [#104]
[dashboard] New CountryField input type which is filled with a country list
[dashboard] New commerce.show_beta_warning setting that allows you to hide the beta warning [#204]
[dashboard] Enhance select fields with Choices.js to allow searching through options
[emails] New commerce.email_reply_to and commerce.email_from settings to control the outgoing addresses [#198]
[modules] New Default Address module to specify a standard state and country to use
[payments] It's now possible to register custom payment methods [#177]
[shipping] The shipping cost threshold (min/max) order field can now be configured with the shipping_total_field setting [#200]
Improvements:
[checkout] Country field now defaults to an empty value instead of Afghanistan if no country is known
[core] comOrderItem now has a delivery_type field.
[core] Added additional indices to comAddress
[dashboard] Fix action buttons breaking out of modal after save or fields being enhanced
[dashboard] Automatically scroll to the top of the modal when opened/submitted instead of lurking in the middle
[modules] Basic Address Validation module now properly uses lexicons for the billing/shipping address name when presenting an error [S14678]
[orders] Default address modules no longer (have to) set placeholders for the address to be picked up in the checkout
[orders] New method comOrder->getCurrency() added as more fault-tolerant way to access the current currency, and set it if missing (primarily in tests or custom code)
[products] Accept shorter product SKUs (1 character) and name (2 characters) [S13309]
Bug fixes:
[addresses] The comAddress->Order relation was incorrect, and has been replaced with a correct comAddress->Orders relation.
[checkout] Fix default CSS being loaded even if the register_checkout_css setting is disabled
[checkout] Fix potential E_FATAL when calculating taxes on an order without any (or an invalid) expected address [S15585]
[dashboard] Fix validation feedback being missing when submitting forms [#174]
[dashboard] Fix hardcoded "Actions" label
[dashboard] Update warning in dashboard from alpha to beta
[dashboard] Fix inability to empty out text fields [#209]
[dashboard] Show the name of the tax group when editing tax rules
[products] Fix weight unit always defaulting to kg for new products [#175]
[products] Add missing resourceproduct.delivery_type_field setting and implementation to specify delivery type on resource products [#188]
[products] Fix "PHP warning: min(): Array must contain at least one element" in product bundles
[products] Fix bundle products incorrectly attempting to set the weight value, causing it to never store the weight [#199]
[products] Make sure resource products fall back to the default_tax_group setting if its value isn't set in a TV [#202]
[snippets] Fix "commerce.no_orders_yet" message not having access to the right lexicon topic [S13113]
[snippets] Fix get_cart snippet not loading most recent items
[shipping] Fix weight shipping methods not being available when maximum weight was set to 0
Template / Design changes:
For the new previous address feature, the frontend/checkout/address.twig template has changed a fair bit. Please double check your implementation if you use the default templates with custom CSS.
The same address.twig template has also been broken up into more partials, to allow more selective template overrides. This includes billing-address-fields.twig and shipping-address-fields.twig templates.
Input elements in the address step now have a height and display: block; set in the default CSS and no more margin. The fieldset was changed into a div, legends were replaced with a heading.
Deprecations / Internal Changes:
Two methods of modmore\Commerce\Frontend\Steps\Shipping have been moved to comOrder. These are getShipments() and getItemsByDeliveryType(). A deprecated method that passes it through to the comOrder has been added on the Shipping class, which will be removed before 1.0. If you have a custom Shipping step class that calls these methods, please update those.
The Address class was changed a fair bit, as did its default template. If you use a custom child class, please double check your implementation.
All EVENT_ related constants have been moved from model and other classes, onto the main Commerce service. The old constants are deprecated and planned to be removed in 1.0. Check your modules to make sure all event listeners are applied to \Commerce:EVENT_ classes.
New features:
[dashboard] Add ability to sort grids by clicking on column headers, and an icon in the top right to switch direction [#159]
[dashboard] Add convenience returnError/returnSuccess methods to Page class
[dashboard] Add buttons to set the mode to test/live/disabled to the config checklist [#2]
[checkout] Fix confusing placeholder usage in cart/items.twig in tax_exclusive block: use {{ item.total_ex_tax_formatted }} instead of {{ item.total_formatted }} [#135]
[checkout] Fix inability to progress in checkout when checkout_show_account_step is off [S12251]
[dashboard] Fix submitting the limit field on grids sending the user to the MODX dashboard [#160]
[dashboard] Fix currency fields storing a wrong value when a comma or period is added [#158]
[productstv] Fix "Select Product" button only responding to click on the text [#161]
[productstv] Fix Product TVs outputting ",123" when adding a first product [#162]
[checkout] New checkout_requires_account and checkout_show_account_step settings to give easier control over the account step [#134]
[checkout] If only one shipping method is available for a shipment, it is automatically selected, allowing the shipping step to be skipped
[checkout] New checkout_class system setting to change the used checkout process class (advanced) [#134]
[coupons] Add ability to (soft) delete coupons [S11328]
[reports] Add transactions report to export transactions during a timeframe
[shipping] Add min and max weight options to the weight-based shipping method [#121]
[shipping] Orders are now split up into shipments, based on new delivery types. See: https://docs.modmore.com/en/Commerce/v1/Delivery_Types.html
[products] Add new Products TV to easily manage products linked to a resource. See: https://docs.modmore.com/en/Commerce/v1/Product_Catalog/Products_TV.html [#68]
Improvements:
[dashboard] Use lexicons for the HTTPS check
[products] Fix 1 cent inaccuracy in resource product prices managed as decimals
[products] Add weight_formatted placeholder on products
Bug fixes:
[dashboard] Fix broken products, customers, and tax rates tabs on certain environments [S12034]
[dashboard] Fix MultiSafePay gateway selection not showing properly when editing the payment method [S12060]
Breaking changes in this release:
The templates for the checkout has seen various changes that will need to be updated in your own themes. Most importantly the shipping step (frontend/checkout/shipping-method.twig) is very different due to the introduction of Delivery Types and Shipments (see https://docs.modmore.com/en/Commerce/v1/Delivery_Types.html), and the sidebar summary (frontend/checkout/partial/summary.twig) has also seen similar changes.
Shipping method classes should start implementing getPriceForShipment/isAvailableForShipment methods instead of getPrice/isAvailableForOrder. There's some level of backwards compatibility for now, but the previous getPrice/isAvailableForOrder methods will be removed before v1.0.
The 0.7 approach to setting a checkoutClass on the checkout snippet has been replaced with a setting.
Various Checkout classes (NoAccount, RequiresAccount, OnePage) have been marked as deprecated and will be removed before v1.0. Use the settings to control the Standard process instead.
[checkout] Prevent "Your order is free" message right after paying an order [#145]
[checkout] Fix incorrect total estimate on shipping methods when going back to shipping step after selecting a method before [#146]
[checkout] Fix incorrect shipping calculation when sending cart info to payment provider
[checkout] Fix incorrect classes on buttons in Pending Transactions view [#144]
[checkout] Add support for continuing an off-site transaction from the pending transactions view
[dashboard] Slightly change statuses grid to have buttons in the actions menu
[dashboard] Add ability to (soft) delete payment methods, shipping methods, currencies, statuses (incl. changes and actions), tax groups (incl. rules), products ...
[dashboard] Ensure missing weight_units would not cause fatal errors in the dashboard
[dashboard] Add new transaction view, accessible via an order's list of transactions, to expose more information and error messages
[dashboard] Add event to add checks to the configuration checklist [#79]
[dashboard] Coupons module now adds a check to the configuration checklist to make sure active coupons are available
[payments] Improve transaction handling of webhook-based gateways (e.g. Mollie), with more solid cancelled/failed checking, proper response on webhook, and improved messages in log and checkout [#143]
[payments] Prevent double slash in webhook url
[products] Include price in resource product sync [#147]
[products] Add setting (resourceproduct.price_field_decimals) to allow resource product price TVs to be defined with decimals [#131]
[settings] All settings now have lexicons and descriptions to explain their purpose. [#98]
[snippets] Add commerce.get_cart snippet to list cart information outside the actual cart/checkout [#126]
[snippets] Add (temporary!) checkoutClass property to checkout snippet to allow specifying checkout class
[statuses] Make comStatus and comProduct objects use soft delete instead of hard delete
Breaking changes in this release:
Price TVs for resource products are now assumed to be specified as numbers with decimals. This can be disabled with
the resourceproduct.price_field_decimals system setting to restore the old behaviour of expecting a number in cents.
Below you will see a subset of known issues in Commerce. If you have any bug reports or feature requests, let us know.
#283
Make the customers section actually useful
Created on 2018-06-01
• Last updated on 2019-04-25
• v1.1
#282
Incorrect order totals when changing address leads to a different shipment fee
Created on 2018-05-31
• Last updated on 2018-11-06
#279
Chart on the dashboard only shows when using regular navigation; ajax navigation does not show it
Created on 2018-05-29
• Last updated on 2019-03-27
• Assigned to
#278
Charts do not use right colors on Firefox
Created on 2018-05-29
• Last updated on 2018-05-29
#243
Add delivery date/options to shipments
Created on 2018-02-20
• Last updated on 2019-03-27
• Assigned to
#234
Status change action to trigger conditional status changes (or instantly move an order through the workflow)
Created on 2018-01-28
• Last updated on 2019-04-25
• v1.1
#228
Limit field disappears when setting a limit/paging
Created on 2018-01-17
• Last updated on 2018-05-29
#220
User setting `commerce.mode` does not affect store
Created on 2018-01-09
• Last updated on 2018-05-29
#215
Add option to not send user to unauthorized page in get_order snippet
Created on 2017-12-28
• Last updated on 2018-05-29
#214
Add address book functionality for "My Addresses" section
Created on 2017-12-28
• Last updated on 2018-05-29
#192
Add ability to expose/add more fields to products without a custom product type
Created on 2017-10-09
• Last updated on 2019-04-25
• v1.1
#191
Lexicons in the dashboard show raw HTML due to automatic twig encoding
Created on 2017-10-02
• Last updated on 2018-05-29
#189
When country limitation module is on, don't show non-allowed countries in address form
Created on 2017-09-26
• Last updated on 2018-05-29
#186
Add ability to wipe the entire cart
Created on 2017-09-21
• Last updated on 2018-05-29
#185
Ability to load product resource TVs in cart/checkout
Created on 2017-09-20
• Last updated on 2019-04-25
• v1.1
#170
SimpleCart product type integration
Created on 2017-07-11
• Last updated on 2018-04-29
• v1.1
#164
Module or docs for adding google analytics/adwords conversion tracking
Created on 2017-07-06
• Last updated on 2018-04-06
#149
Deleting a status change should redirect back to the statuses grid
Created on 2017-05-24
• Last updated on 2017-07-17
#139
Sync resource product when saving a resource (e.g. onDocFormSave)
Created on 2017-04-26
• Last updated on 2019-04-25
• v1.1
#138
Admin notes on payment/shipping methods
Created on 2017-04-26
• Last updated on 2018-01-22
#103
Automatically create comResourceProduct records from an OnDocFormSave plugin
Created on 2017-01-10
• Last updated on 2018-01-22
#84
Consider reversably hashing transaction IDs so that collisions don't happen
Created on 2017-01-05
• Last updated on 2018-04-06
#78
Extend order message system with statuses/states
Created on 2017-01-03
• Last updated on 2019-04-25
• v1.1
#67
Module for auto-creating accounts
Created on 2016-12-12
• Last updated on 2019-04-25
• v1.1
#66
Get single-page checkout process to work
Created on 2016-12-12
• Last updated on 2019-04-25
• v1.1
#39
Module to validate if an address actually exists
Created on 2015-11-10
• Last updated on 2019-08-15
• v1.1
#35
Create product type that integrates with miniShop2
Created on 2015-10-24
• Last updated on 2017-07-11
#34
Implement refunds for supported gateways
Created on 2015-10-24
• Last updated on 2017-05-04
• v1.2
#20
Visual status workflow editor
Created on 2015-10-20
• Last updated on 2017-05-04
• v1.3
#5
Import/migrate functionality
Created on 2015-10-08
• Last updated on 2017-07-11
Disclaimer: Viewing non-Euro pricing
You are currently viewing prices in a non-Euro currency. Please be advised that these prices are estimates, based on data by Open Exchange Rates.
While we offer this currency converter hoping our users find it convenient, all purchases are made in Euro, and the final amount charged can vary depending on payment provider, day, time of day and a number of other factors outside of modmore's control. There are no guarantees on accuracy and modmore nor Open Exchange Rates can not be held liable for errors.