Changelog History
Page 6
-
v2.9.0.b5
November 20, 2019 -
v2.9.0.b4
November 12, 2019 -
v2.9.0.b3
October 25, 2019 -
v2.9.0.b2
October 25, 2019 -
v2.8.0 Changes
July 12, 2019π Welcome to the June 2019 release of Saleor! Read on to learn about the newest changes!
Avalara Integration
π Saleor has, to date, only supported tax calculations for the EU with Vatlayer. To support taxes in other countries, we're integrating the popular Avalara tool with Saleor in this release! With Avalara enabled and configured, you'll get proper tax calculations during the checkout process. Your orders will also be accessible in the Avalara admin panel.
Storing Credit Cards
π We've improved the internal payment gateway interface, which now allows for storage and reuse of customers' payment sources, such as credit cards, if the gateway supports it. Additionally, we've implemented support in the Braintree gateway module and plan to add Stripe very soon.
π Improved Vouchers Section
β Good user experience is always one of our top priorities. We are constantly testing Saleor and decided that the Vouchers section was quite challenging to use, so we set about designing an interface that would make it easier for you to quickly create attractive sales offers for your customers. We have now gathered common settings into visual cards, which makes for a clean and intuitive UI.
CSRF Vulnerability Fix
π This release fixes a security issue that was introduced in version 2.7.0. In that release, we made customizations to the Django middleware in order to disable some elements that were unnecessary for requests coming to the GraphQL API. Unfortunately, we inadvertently disabled CSRF protection for all POST requests coming to static Django views in Storefront 1.0 and Dashboard 1.0. An attacker could therefore send a request without the valid CSRF token, and the server would accept it. In this release, to close this loophole, we've reverted to the original middleware configuration. We felt that the performance gain was minimal and it wasn't a crucial feature for the system, so the original solution is acceptable.
The issue was introduced on 16 May, 2019: 94c0703
Affected versions: 2.7.0β¬οΈ All users of the affected version are encouraged to upgrade Saleor immediately.
π Changelog
Vulnerabilities
- π Fixed CSRF vulnerability introduced in Saleor 2.7.0 - CVE-2019-13594
Core
- π Avatax backend support - #4310 by @korycins
- β Add ability to store used payment sources in gateways (first implemented in Braintree) - #4195 by @salwator
- β Add ability to specify a minimal quantity of checkout items for a voucher - #4427 by @fowczarek
- π Change the type of start and end date fields from Date to DateTime - #4293 by @fowczarek
- βͺ Revert the custom dynamic middlewares - #4452 by @NyanKiyoshi
Dashboard 2.0
- UX improvements in Vouchers section - #4362 by @benekex2
- β Add company address configuration - #4432 by @benekex2
- Require name when saving a custom list filter - #4269 by @benekex2
- π Use
esModuleInterop
flag intsconfig.json
to simplify imports - #4372 by @dominik-zeglen - π Use hooks instead of a class component in forms - #4374 by @dominik-zeglen
- β¬οΈ Drop CSRF token header from API client - #4357 by @dominik-zeglen
- π Fix various bugs in the product section - #4429 by @dominik-zeglen
Other notable changes
- π Fix error when creating a checkout with voucher code - #4292 by @NyanKiyoshi
- π Fix error when users enter an invalid phone number in an address - #4404 by @NyanKiyoshi
- π Fix error when adding a note to an anonymous order - #4319 by @NyanKiyoshi
- π Fix gift card duplication error in the
populatedb
script - #4336 by @fowczarek - π Fix vouchers apply once per order - #4339 by @fowczarek
- π Fix discount tests failing at random - #4401 by @korycins
- β Add
SPECIFIC_PRODUCT
type toVoucherType
- #4344 by @fowczarek - π New translations:
- Icelandic
Thank you
π± This month we need to give 5,000 thanks π to all contributors, stargazers, and supporters of Saleor! We've just hit that landmark number of GitHub stars.
Contributing
For those of you who are interested in contributing to the project, we prepared a bunch of issues labeled as help wanted. Don't worry if you don't fully understand the problem β- βour team will try to guide you and answer all your questions. Remember to check our channels on Gitter and Spectrum; they serve best if you have quick questions that don't require opening an issue on GitHub.
π Make sure to check out the article about this release on our blog!
-
v2.7.0 Changes
June 13, 2019π Welcome to the May 2019 release of Saleor! Read on to learn about the newest changes!
Storefront's navigation management
π§ This month we're bringing you last missing section of Dashboard 2.0. Storefront navigation management allows you to configure which information and links are visible in the menu bars of your storefront. You can add new items and easily link them to existing categories, collections, and pages on your site, or add a link to any external site you choose. Once items are created, their structure can be arranged by dragging and dropping to reorder or nest them.
Filtering capabilities
π Dashboard 2.0 already provides management views for all data models in Saleor, but we wanted to make it even better by adding filtering capabilities to two dashboard sections. Products can now be filtered by price (exact value or price range), stock availability, or storefront visibility. Orders can be filtered by creation date and fulfillment status. We've also added search capabilities that let you find products by name or orders by customer's email, and many more. Lastly, each filtering can be saved as a new tab so it can be easily reused later!
π New order creation flow
Having to deal with unpaid orders may be problematic for store owners for several reasons. Unpaid orders unnecessarily allocate stock quantity, which may be abused by malicious users. Staff members have to manually resolve each order and either contact the customer or close it after some time. It means more work and less revenue. We've now changed the flow of creating orders in our GraphQL API so that an order is only created if a successful payment was made. If a payment fails, customers will stay with an open checkout that they can either pay later or share with someone else who can pay for them.
π Changelog
API
- Create order only when payment is successful - #4154 by @NyanKiyoshi
- Order Events containing order lines or fulfillment lines now return the line object in the GraphQL API - #4114 by @NyanKiyoshi
- π¨ GraphQL now prints exceptions to stderr as well as returning them or not - #4148 by @NyanKiyoshi
- π¨ Refactored API resolvers to static methods with root typing - #4155 by @NyanKiyoshi
- β Add phone validation in the GraphQL API to handle the library upgrade - #4156 by @NyanKiyoshi
Core
- β Add basic Gift Cards support in the backend - #4025 by @fowczarek
- β Add the ability to sort products within a collection - #4123 by @NyanKiyoshi
- Implement customer events - #4094 by @NyanKiyoshi
- π Merge "authorize" and "capture" operations - #4098 by @korycins, @NyanKiyoshi
- Separate the Django middlewares from the GraphQL API middlewares - #4102 by @NyanKiyoshi, #4186 by @cmiacz
Dashboard 2.0
- β Add navigation section - #4012 by @dominik-zeglen
- β Add filtering on product list - #4193 by @dominik-zeglen
- β Add filtering on orders list - #4237 by @dominik-zeglen
- π Change input style and improve Storybook stories - #4115 by @dominik-zeglen
- π Migrate deprecated fields in Dashboard 2.0 - #4121 by @benekex2
- β Add multiple select checkbox - #4133, #4146 by @benekex2
- π Rename menu items in Dashboard 2.0 - #4172 by @benekex2
- Category delete modal improvements - #4171 by @benekex2
- Close modals on click outside - #4236 - by @benekex2
- π Use date localize hook in translations - #4202 by @dominik-zeglen
- Unify search API - #4200 by @dominik-zeglen
- 0οΈβ£ Default default PAGINATE_BY - #4238 by @dominik-zeglen
- Create generic filtering interface - #4221 by @dominik-zeglen
- β Add default state to rich text editor = #4281 by @dominik-zeglen
- π Fix translation discard button - #4109 by @benekex2
- π Fix draftail options and icons - #4132 by @benekex2
- π Fix typos and messages in Dashboard 2.0 - #4168 by @benekex2
- π Fix view all orders button - #4173 by @benekex2
- π Fix visibility card view - #4198 by @benekex2
- π Fix query refetch after selecting an object in list - #4272 by @dominik-zeglen
- π Fix image selection in variants - #4270 by @benekex2
- π Fix collection search - #4267 by @dominik-zeglen
- π Fix quantity height in draft order edit - #4273 by @benekex2
- π Fix checkbox clickable area size - #4280 by @dominik-zeglen
- π Fix breaking object selection in menu section - #4282 by @dominik-zeglen
- Reset selected items when tab switch - #4268 by @benekex2
Other notable changes
- β Add support for Google Cloud Storage - #4127 by @chetabahana
- β Adding a nonexistent variant to checkout no longer crashes - #4166 by @NyanKiyoshi
- Disable storage of Celery results - #4169 by @NyanKiyoshi
- Disable polling in Playground - #4188 by @maarcingebala
- β‘οΈ Cleanup code for updated function names and unused argument - #4090 by @jxltom
- π Users can now add multiple "Add to Cart" forms in a single page - #4165 by @NyanKiyoshi
- Fix incorrect argument in
get_client_token
in Braintree integration - #4182 by @maarcingebala - π Fix resolving attribute values when transforming them to HStore - #4161 by @maarcingebala
- π Fix wrong calculation of subtotal in cart page - #4145 by @korycins
- π Fix margin calculations when product/variant price is set to zero - #4170 by @MahmoudRizk
- π Fix applying discounts in checkout's subtotal calculation in API - #4192 by @maarcingebala
- π Fix GATEWAYS_ENUM to always contain all implemented payment gateways - #4108 by @koradon
π Future releases
There are a bunch of exciting things that we're now working on right now to improve Saleor.
π Plug-in architecture
β¬οΈ Saleor is highly customizable, but one trade-off that comes with it is the difficulty of upgrading to new versions after any customizations were made. We're investigating better approaches to customization with the use of plugin architecture which would allow integrating the Saleor flow with custom logic.
Enterprise-grade attributes
A proper attribute structure is a crucial factor for many businesses when presenting their products in the system. We want to make attributes in Saleor more flexible and allow them to be created independently from product types, as well as giving extra control over their visibility in the storefront's faceted search or product detail pages.
Advanced product list capabilities
Dashboard's product list will also become a lot more flexible. We're currently designing a new version in which users will be able to customize the visible columns, reorder them, and edit products with in-line forms.
0οΈβ£ Lastly, we're getting a lot of questions regarding multi-vendor support in Saleor on our social channels. Right now we're focused on developing the default, single-vendor version and our cloud solution, but we want to assure everyone that it is a feature we want just as much as you do, and we'll keep it on our radar.
Thank you
π± A big thank you π to all contributors, stargazers, and supporters of Saleor!
Contributing
For those of you who are interested in contributing to the project, we prepared a bunch of issues labeled as help wanted. Don't worry if you don't fully understand the problem β- βour team will try to guide you and answer all your questions. Remember to check our channels on Gitter and Spectrum; they serve best if you have quick questions that don't require opening an issue on GitHub.
π Make sure to check out the article about this release on our blog!
-
v2.7.0.b1
June 15, 2019 -
v2.6.0 Changes
May 13, 2019π Welcome to the April 2019 release of Saleor! Read on to learn about the newest changes!
Any color you like, as long as it's Black
π Proper code formatting is one of the essential things that help to keep an open-source project universally maintainable and understandable. We had Google's YAPF in Saleor, but the formatting was only applied to some of the newer code, while a lot of the original core was using inconsistent styles. To address this issue, we decided to pick a modern tool that a number of open-source projects have recently adopted. Black is an opinionated code formatting tool for Python that comes with a fixed set of rules which are subject to only limited adjusts. And that's one of the greatest powers of Black. We've also added support for Pre-commit which makes sure that every commit you create contains appropriately formatted code.
Data classes as a universal payment interface
π One of our goals for the future is to extract payment gateways to separate repositories and provide a standard interface that'll make implementing new ones easier for the community. We're also investigating ways to have a plugin architecture where integrations can be optionally turned on and off. For that, we want to benefit from Python 3.7's data classes which can be used as standardized objects to pass data between various parts of the system. As data classes are not supported in Python versions before 3.6 (in 3.6 they're available through a third-party library), we decided to drop support for Python 3.5.
Bulk actions in Dashboard 2.0
π A useful management Dashboard is one that allows users to perform everyday actions quickly. From now on, users can perform selected actions for multiple objects rather than repeating actions. It currently supports the most common operations, such as deleting items or publishing/unpublishing products and pages, but more will be added in future.
π Changelog
API
- β Add unified filtering interface in resolvers - #3952, #4078 by @korycins
- β Add mutations for bulk actions - #3935, #3954, #3967, #3969, #3970 by @akjanik
- β Add mutation for reordering menu items - #3958 by @NyanKiyoshi
- β‘οΈ Optimize queries for single nodes - #3968 @NyanKiyoshi
- π¨ Refactor error handling in mutations #3891 by @maarcingebala & @akjanik
- Specify mutation permissions through Meta classes - #3980 by @NyanKiyoshi
- Unify pricing access in products and variants - #3948 by @NyanKiyoshi
- Use only_fields instead of exclude_fields in type definitions - #3940 by @michaljelonek
- Prefetch collections when getting sales of a bunch of products - #3961 by @NyanKiyoshi
- β Remove unnecessary dedents from GraphQL schema so new Playground can work - #4045 by @salwator
- Restrict resolving payment by ID - #4009 @NyanKiyoshi
- β‘οΈ Require
checkoutId
for updating checkout's shipping and billing address - #4074 by @jxltom - π Handle errors in
TokenVerify
mutation - #3981 by @fowczarek - Unify argument names in types and resolvers - #3942 by @NyanKiyoshi
Core
- 0οΈβ£ Use Black as the default code formatting tool - #3852 by @krzysztofwolski and @NyanKiyoshi
- β¬οΈ Dropped Python 3.5 support - #4028 by @korycins
- π Rename Cart to Checkout - #3963 by @michaljelonek
- π Use data classes to exchange data with payment gateways - #4028 by @korycins
- π¨ Refactor order events - #4018 by @NyanKiyoshi
Dashboard 2.0
- β Add bulk actions - #3955 by @dominik-zeglen
- β Add user avatar management - #4030 by @benekex2
- β Add navigation drawer support on mobile devices - #3839 by @benekex2
- π Fix rendering validation errors in product form - #4024 by @benekex2
- π Move dialog windows to query string rather than router paths - #3953 by @dominik-zeglen
- β‘οΈ Update order events types - #4089 by @jxltom
- Code cleanup by replacing render props with react hooks - #4010 by @dominik-zeglen
Other notable changes
- β Add setting to enable Django Debug Toolbar - #3983 by @koradon
- π Use newest GraphQL Playground - #3971 by @salwator
- Ensure adding to quantities in the checkout is respecting the limits - #4005 by @NyanKiyoshi
- π Fix country area choices - #4008 by @fowczarek
- Fix price_range_as_dict function - #3999 by @zodiacfireworks
- π Fix the product listing not showing in the voucher when there were products selected - #4062 by @NyanKiyoshi
- π Fix crash in Dashboard 1.0 when updating an order address's phone number - #4061 by @NyanKiyoshi
- β¬οΈ Reduce the time of tests execution by using dummy password hasher - #4083 by @korycins
- Set up explicit hash function - #3979 by @akjanik
- β Unit tests use none as media root - #3975 by @korycins
- π Update file field styles with materializecss template filter - #3998 by @zodiacfireworks
- π New translations:
- Albanian
- Colombian Spanish
- Lithuanian
π Future releases
There are a few areas that we're currently working on and planning to ship in the next version:
- Navigation menus management in Dashboard 2.0 - views to create and manage menus displayed in the storefront.
- π Improvements to the payment architecture and currently supported payment gateways.
Thank you
π± A big thank you π to all contributors, stargazers, and supporters of Saleor!
Contributing
For those of you who are interested in contributing to the project, we prepared a bunch of issues labeled as help wanted. Don't worry if you don't fully understand the problem β- βour team will try to guide you and answer all your questions. Remember to check our channels on Gitter and Spectrum; they serve best if you have quick questions that don't require opening an issue on GitHub.
π Make sure to check out the article about this release on our blog!
-
v2.6.0.b1
May 17, 2019 -
v2.5.0 Changes
April 09, 2019π Welcome to the March 2019 release of Saleor! Read on to learn about the newest changes and for a very special announcement!
π Model Translations UI
π API for model translations was already added in the last release, but this month we're bringing you a brand new user interface which allows you to easily manage translations of your shop's data from the dashboard! To access it, in the main navigation go to the "Translations" section and you'll get a list of all languages enabled in your shop. You can then select a language and choose a particular model that you'd like to add the translations for. Notice that you can also switch between languages directly from the translation details page.
Dark Mode & Refreshed Dashboard 2.0 Theme
0οΈβ£ Dark mode has become a trendy feature of modern apps. Since Saleor aims to provide the best user experience and rival commercial platforms, we couldn't restrain ourselves from adding a dark mode to our shiny Dashboard. Both themes were also refreshed with some smaller changes, such as increasing the default font size to 16px for better legibility, using accent colors on buttons and links, and adding a floating action bar at the bottom of each editable page. We've also redesigned the login page to greet all staff users with a nice, colorful pattern.
β Address book
π The address book is a new section in Dashboard 2.0 which allows staff users to view and manage customers' addresses. To access it, go to the customer details view and click the "Manage" button in the "Address information" card. You'll see a list of all user addresses, with the ability to add new ones and configure which of them is a default billing or shipping address.
π Changelog
API
- β Add query to fetch draft orders - #3809 by @michaljelonek
- β Add bulk delete mutations - #3838 by @michaljelonek
- β Add
languageCode
enum to API - #3819 by @michaljelonek, #3854 by @jxltom - Duplicate address instances in checkout mutations - #3866 by @pawelzar
- Restrict access to
orders
query for unauthorized users - #3861 by @pawelzar - π Support setting address as default in address mutations - #3787 by @jxltom
- π Fix phone number validation in GraphQL when country prefix not given - #3905 by @patrys
- Report pretty stack traces in DEBUG mode - #3918 by @patrys
Core
- β¬οΈ Drop support for Django 2.1 and Django 1.11 (previous LTS) - #3929 by @patrys
- Fulfillment of digital products - #3868 by @korycins
- Introduce avatars for staff accounts - #3878 by @pawelzar
- π¨ Refactor the account avatars path from a relative to absolute - #3938 by @NyanKiyoshi
Dashboard 2.0
- β Add translations section - #3884 by @dominik-zeglen
- β Add light/dark theme - #3856 by @dominik-zeglen
- β Add customer's address book view - #3826 by @dominik-zeglen
- β Add "Add variant" button on the variant details page = #3914 by @dominik-zeglen
- β Add back arrows in "Configure" subsections - #3917 by @dominik-zeglen
- Display avatars in staff views - #3922 by @dominik-zeglen
- Prevent user from changing his own status and permissions - #3922 by @dominik-zeglen
- π Fix crashing product create view - #3837, #3910 by @dominik-zeglen
- π Fix layout in staff members details page - #3857 by @dominik-zeglen
- π Fix unfocusing rich text editor - #3902 by @dominik-zeglen
- π Improve accessibility - #3856 by @dominik-zeglen
Other notable changes
- π Improve user and staff management in dashboard 1.0 - #3781 by @jxltom
- π Fix default product tax rate in Dashboard 1.0 - #3880 by @pawelzar
- π Fix logo in docs - #3928 by @michaljelonek
- π Fix name of logo file - #3867 by @jxltom
- π Fix variants for juices in example data - #3926 by @michaljelonek
- π Fix alignment of the cart dropdown on new bootstrap version - #3937 by @NyanKiyoshi
- π New translations:
- Armenian
- Portuguese
- Swahili
- Thai
π Future releases
π Within the next few releases we're planning to roll out a few exciting new features:
- π§ Fulfillment of digital productsβ: βwe've just added backend changes that introduce models to represent digital content and unique download URLs. They will have configurable and optional restrictions on the number of allowed downloads or link validity period. Expect new dashboard sections to manage that!
- π Bulk actions: with this release, we've added GraphQL mutations for bulk actions such as deleting multiple items at once and we've just started building support for that in Dashboard 2.0.
- π User avatarsβ: to allow easier identification of staff members, we will allow them to upload a profile picture.
Thank you
π± A big thank you π to all contributors, stargazers, and supporters of Saleor!
Contributing
For those of you who are interested in contributing to the project, we prepared a bunch of issues labeled as help wanted. Don't worry if you don't fully understand the problemβ-βour team will try to guide you and answer all your questions. Remember to check our channels on Gitter and Spectrum; they serve best if you have quick questions that don't require opening an issue on GitHub.