This changelog references the relevant changes (bug and security fixes) done in 6.1 minor versions.
To get the diff for a specific change, go to https://github.com/shopware/platform/commit/XXX where XXX is the change hash To get the diff between two versions, go to https://github.com/shopware/platform/compare/v6.1.0-rc1...v6.1.0-rc2
Addition / Changes
- Core
- Fixed a seo indexing bug where all navigations were reindexed on product update
- Added const for custom field type select to
\Shopware\Core\System\CustomField\CustomFieldTypes
- Added
Shopware\Core\Migration\Test\DateTimeTest
to ensure usage of (new \DateTime())->format(STORAGE_DATE_TIME_FORMAT) instead of date(Defaults::STORAGE_DATE_TIME_FORMAT) since date only supports seconds and no milliseconds. - Added
Core/Framework/Test/CustomField/CustomFieldEntityRepositoryTest.php
to ensure the DAL for custom Field updates via repositories is working correctly. - Added file extension whitelist for media manager file upload. Can be configured in the
shopware.yaml
or with theMediaFileExtensionWhitelistEvent
event
Addition / Changes
-
Administration
- Added an
sw_product_list_grid_loader
block to sw-product-list which includes the sw-loader component - Refactored tooltip directive to automatically change the position if it does not fit in the screen on the desired position.
- Added possibility to show a tooltip also on disabled input fields with the option
showOnDisabledElements
. This will generate a wrapper element around the original element. - Prevent adding a product comparison sales channel if there are no product streams available
- Prevent adding a product comparison sales channel if there are no product streams available.
- Changed
sw-system-config
component to render boolean field types with undefined value as falsy. - Replace old currency isDefault with isSystemDefault
- Replace block
sw_property_detail_content_option_list
insw-property-create
with empty content - Add
setLocaleFromUser
method to vue adapter - Add service
localeHelper
for changing the locale - Use service
localeHelper
on every place where you can change the locale - Refactor
session.store.js
: actionsetAdminLocale
return now a Promise - Refactor
snippet.api.service.js
: add paramter code which expects the locale code - Refactor
sw-profile-index
- Remove data
userProfile
- Replace
setUserData
togetUserData
saveFinish
is now an asynchronous method
- Remove data
- Fix
sw-multi-ip-select
value property if it is undefined - Removed property type check for value property of
sw-multi-select
andsw-multi-ip-select
because the value is already checked in a custom validator function - To make the headers of a column in the
sw-data-grid
translatable you have to specify only the path to the snippet.this.$tc('path.to.snippet')
will still work. - Refactored sw-context-button
- Added popover directive for automatic detection for opening
- Remove property
menuOffsetTop
- Remove property
menuOffsetLeft
- Remove method
mountedComponent
- Remove method
beforeDestroyComponent
- Refactor method
openMenu
- Refactor method
closeMenu
- Added method
handleClickEvent
- Remove method
addMenuToBody
- Remove method
removeMenuFromBody
- Remove data
positionTop
,positionLeft
,paddingTop
,menuUuid
- Removed property
popoverConfig
insw-select-result-list
,sw-single-select
,sw-entity-single-select
- Removed property
isPopover
insw-popover
- Added property
resizeWidth
andpopoverClass
tosw-popover
- Move
created
anddestroyed
tocreatedComponent
anddestroyedComponent
insw-select-result
- Ignore
.html.twig
in code coverage reports - Fixed the inheritance reset for the price field in the variant listing.
- Fixed product name column in product review listing
- Fixed inheritance switches in product detail view on main products when you come from an child product
- Added block
sw_cms_element_product_listing_config_layout_select_options
insw-cms-el-config-product-listing
- Fix quickview of product in the checkout process
- Catch
FRAMEWORK_LANGUAGE_NOT_FOUND
error when user has invalidsw-admin-current-language
in localStorage - Fix that the loginListener calls directly get destroyed through an refresh of the page
- Product images inside the product listing and cart won't get smaller anymore when the window gets to big and then gets smaller.
-
Added optional
productStreamsExist
andproductStreamsLoading
properties tosw-sales-channel-modal-grid
component. -
Added component
sw-sales-channel-defaults-select
. This component is used to handle each to-many association and its corresponding default id in sales channels. -
Unified css classes of select fields in
sw-sales-channel-detail-base
. All css classes no reference to the sales channels collection names (e.g.payment-methods
instead ofpayment-method
) -
Deprecated all
sw_sales_channel_detail_base_general_input_*_selection
andsw_sales_channel_detail_base_general_input_*_assignment
blocks fromsw-sales-channel-detail-base
by refactoring them intosw-sales-channel-defaults-select
. -
Deprecated the events
onDefaultItemAdd
andonRemoveItem
insales-channel-detail-base/index.js
. Those events are no longer needed and the add/remove logic is now handled by thesw-sales-channel-defaults-select
component. -
We refactored the logic to remove api errors from the store into a separate mixin ('remove-api-error' mixin). Additionally, to remove the the errors, we changed from listening to the models event to watch the models prop.
-
Additionally you can now change the default behaviour to remove api errors in your custom components. This can be done by overriding the
$apiErrorHandler
custom option for components that include theremove-api-error
mixin. -
Added new slot for
sw-data-grid
column headers -
Added new component
sw-list-price-field
-
Fix empty labels in product stream rule conditions
-
Fix content-type of Sitemap controller response
-
Fix sitemap unlocking after generation
-
- Added an
-
Core
- Added a check for the author role in plugin composer.json files. If one or more authors have the role
Manufacturer
, only these will be written to the database. - Added new
searchMedia
twig function to resolve media ids to media objects.{% set media = searchMedia(ids, context) %}
- Changed
MailService
to addbcc
insteadto
fordeliveryAddress
- We added the
Inherited
flag to thelistingPrices
property of the\Shopware\Core\Content\Product\ProductDefinition
- The
\Shopware\Storefront\Page\Product\Review\ProductReviewLoader::load
returns now the reviews of all variants. - The
\Shopware\Core\Framework\DataAbstractionLayer\Field\PriceField
can now contains alistPrice
\Shopware\Core\Checkout\Cart\Price\Struct\CalculatedPrice
supports now list prices.- Fix mail sending via sendmail transport
- You can now opt-out of removing your plugin migrations on uninstall by calling
\Shopware\Core\Framework\Plugin\Context\UninstallContext::enableKeepMigrations
- Added
\Shopware\Core\Framework\Plugin::removeMigrations
to remove plugin migration entries. - Fix cache warmup during cache clearing to fix template inheritance problems
- Missing migration files will be now ignored
- Added new env variable
SHOPWARE_UPDATE_TEST
to trigger auto update test mode.
- Added a check for the author role in plugin composer.json files. If one or more authors have the role
-
Storefront
- Fixed the cookie privacy hint to use the correct link
privacyPage
instead ofshippingPaymentInfoPage
- Added the parameter
useBackdrop
to thepage-loading-indicator.utils.js
remove
andcreate
methods. Defaults totrue
- The
CountryStateController
returns country states now sorted by their position/name. - You can now change your addresses during checkout
- Fixed the cookie privacy hint to use the correct link
-
Recovery
- The database connection now supports sockets
Addition / Changes
-
Administration
- Added
getComponentHelper
to globalShopware
object - Added async loading of plugins
- Added seperation of login and application boot
- Navigation sidebar is now a globally expandable & collapsable with
this.$store.commit('adminMenu/collapseSidebar)
andthis.$store.commit('adminMenu/expandSidebar)
- Added Services functions to Shopware object for easier access
- Added Context to Shopware object for easier access
- Added a new component
sw-many-to-many-assignment-card
which can be used to display many to many associations within a paginated grid - The
sw-tree
component now emits theediting-end
when the user finished adding new items. Eventdata is an object withparentId
property sw-tree
'sdrag-end
event now emits information about the old and new parentId of the dragged element.- The changeset generator now ommits write protected fields
- We added
fromCollection
andfromCriteria
methods to criteria/collections to deep copy them if needed - Due to the redesign of the cms blocks and elements you can now translate the label of your blocks and elements
- The Layouts which can be assigned under settings > basic information > Shop Pages now have to be of the type
shop page
- You can now assign a 404 error page layout in settings > basic information > Shop Pages which will be rolled out in a 404 not found error.
- Moved all rule specific components to
src/app/components/rule
- Added error handling for multiple errors per request
- Replaced
repository.sync
with a request against thesync
endpoint. The former behavior ofsync
ist now available asrepository.saveAll
- We splitted the component
sw-sales-channel-modal
up into two additional componentssw-sales-channel-modal-detail
andsw-sales-channel-modal-grid
sw-sales-channel-detail-base
got refactored based on a new design, the domain management was moved to a new component- Created a new component
sw-sales-channel-detail-domains
which handles the domain management of a sales channel now sw-entity-single-select
fires a new event calledoption-select
which provides the selected entity and as the payload- you can now set a sales channel in a maintenance mode. You can choose the layout or use our default layout. You can also use the ip-whitelist to bypass the maintenance mode. The Imprint and Privacy Policy from Settings > Basic Information are linked in the maintenance page footer if you specified a layout.
- Added mailer settings in the settings page
- Added mailer settings in the first run wizard
- Now snippets are retrieved asynchronously to improve performance
- Moved the sw-product-maintain-currencies-modal to sw-maintain-currencies-modal.
- Seperate the Shopware context to App-Context and Api-Context
- Rename old
State
toStateDeprecated
- Make vuex store initially available in global Shopware object
Shopware.State
- Move context to the Store
- Make vuex store initially available
- Moved
Resources/administration
directory toResources/app/administration
- Add cache busting to the administration script and style files through last modified timestamp in combination with the filesize
- Double opt in for registrations and guests is now configurable in the settings at the Login / Registration module
- Added component
sw-entitiy-multi-id-select
which can be used to select entities but only emit their ids- The v-model is bound to
change
event and sets theids
property - exposes the same slots as any
select
component
- The v-model is bound to
- Added component
sw-arrow-field
which can be used to wrap components in a breadcrumb like visualization- It takes two props
primary
andsecondary
which are color keys for the arrow's background and border color - Additional content can be placed in the default slot of the component
- It takes two props
sw-tagged-field
now works withevent.key
instead ofevent.keycode
sw-tagged-field
v-model event changed tochange
instead ofinput
an does not mutate the original prop anymore- Removed component
sw-condition-value
- Added component
sw-condition-type-select
- Removed
config
property fromsw-condition-tree
. - Refactored
- Replaced Store based datahandling with repository based datahandling in
sw-settings-rule
,sw-product-stream
modules and rule/product stream specific components - Removed client side validation for rules and product streams
- Added APi validation for rules and product streams
- Split
sw-product-stream-filter
component into smaler subcomponentssw-product-stream-field-select
andsw-product-stream-value
- Removed
sw-product-stream-create
page - Removed
sw-settings-rule-create
page - Added event
selection-change
tosw-data-grid
. The event is fired whenever the selection in the grid changes including pagination and delete requests.- The event emits two values: the actual selection and the selection count of the
sw-data-grid
. change-selection
should be preferred overselect-item
if you are interested in the selection itself and not in a specific item that was selected.
- The event emits two values: the actual selection and the selection count of the
- Added custom fields to categories
v-popover
directive accepts a config object now which allows to activate / deactivate the directive on the fly, define the target element and if the popover element should be resized to the size of the origin element- Updated Symfony Dependencies to version
4.4.0
. - Added cms block
form
- Added component
sw-select-number-field
for select options with numeric values - Added installation opportunity of Migration-Plugin into FirstRunWizard
- Added
sw-order-state-change-modal-assign-mail-template
component insidesw-order-state-change-modal
- Moved
sw-order-document-card
insw-order-state-change-modal
into seperate component - integrated repository based data handling in plugin manager
- replaced
sw-grid
withsw-data-grid
components in plugin manager - Remote address anonymization is now configurable in the settings at the Login / Registration module
- We added error handling for delete requests. Since delete errors affect the whole entity it is not possible to store the error under a specific path. For this reason we provide a new getter
getErrorsForEntity
available through the State. - The object returned from Shopware.State.getters.getEntityError should always be treated read only.
- Added default shop page layouts for contact and newsletter form
- Added event
delte-item-failed
to bothsw-entity-listing
andsw-one-to-many-listing
which is emitted if the delete request for an entity fails. The event data is an object containing aid
anderrorResponse
property. - Added block
block sw_customer_address_form_state_field
tosw-customer-address-form
component that that contains answ-entity-single-select
to specify a state for addresses - Added
countryState
insw-address
- Updated
nuxt
to2.10.2
in thenuxt-component-library
package - Updated
dompurify
to2.0.7
in theadministration
package - Updated
cypress-select-tests
to1.4.1
in theadministration/e2e
package - Updated
copy-webpack-plugin
to5.1.1
in thecommon/webpack-plugin
package - Added new Block
sw_media_quickinfo_metadata_specific_meta_data
to sw-media-quickinfo that is only rendered if metadata could be fetched for uploaded media. This also gives you easier access to extend the metadata section for specific file types. - Changes to
sw-plugin-last-updates-grid
:- Reorganized content of
sw-plugin-last-updates-grid
. It now displays only the empty state or grid but not both. - We moved the condition when the empty state is shown to the slot access itself rather than to the
sw-empty-state
component. - Added new block
sw_plugin_last_udates_card_grid_content
insw-plugin-last-updates-grid
to override the grid content rather than the slot access.
- Reorganized content of
- Removed computed property
lineItemActionsEnabled
fromsw-order-line-items-grid
since it was never used and always evaluate to false - Replaced kebab-case plugin file exporting with camel case to match php requirements
- Added pagination to plugin manager
- Show domain selection in first run wizard only when domains exists
- Hide user set groups option in promotions behind an experimental flag
- Added new block
sw_promotion_cart_condition_form_allow_experimental
- When updating domains in a sales channel you can only select one of the available languages for the sales channel
- Fix module meta information in extended module routes with the routeMiddleware
- Added
-
Core
- We did some refactoring on how we use
WriteConstraintsViolationExceptions
. It's pathproperty
should now point to the object that is inspected by an validator while thepropertyPath
property inWriteConstraint
objects should only point to the invalid property. For more information read the updated "write command validation" article in the docs. - Added the
extractInheritableAttributes()
function to the\Shopware\Core\Framework\Routing\RequestTransformerInterface
- Added ErrorPage, ErrorpageLoader and ErrorPageLoaderEvent which is used in the
ErrorController
to load the CMS error layout if a 404 layout is assigned. - Added an option to disable eslint for storefront:build
- Removed abandoned TwigExtensions in favor of Twig Core Extra extensions
- Moved the seo module from the storefront into the core.
- Switched the execution condition of
\Shopware\Core\Framework\Migration\MigrationStep::addBackwardTrigger()
and\Shopware\Core\Framework\Migration\MigrationStep::addForwardTrigger()
to match the execution conditions in the methods documentation. - When a sub entity is written or deleted, a written event is dispatched for the configured root entity.
- Example for mapping entities: Writing a
product_category
entity now also dispatches aproduct.written
andcategory.written
event - Example for simple sub entities: Writing a
product_price
entity now also dispatches aproduct_category
event - Example for nested sub entities: Writing a
order_delivery_position
entity now also dispatches aorder_delivery.written
and aorder.written
event
- Example for mapping entities: Writing a
- Required authentication for requests to
/api/v{version}/_info/business-events.json
and/api/v{version}/_info/entity-schema.json
routes - Added
shopware.api.api_browser.auth_required
config value to configure if the access to the open api routes must be authenticated - Added a
seoUrls
OneToManyAssociationField
toproduct
andcategory
. - Added a
SalesChannelSeoUrlDefinition
to filter by context language, sales channel and canonical. - Fixed a bug that
SalesChannelDefinition
s are not used for associations. - Added
metaTitle
,metaDescription
andkeywords
columns to category entity - Added
metaDescription
to product entity - Added
campaignCode
andaffiliateCode
columns to customer and order entity - Added
TaxRuleEntity
to define country specific taxes - Added
TaxRuleTypeEntity
to define rule types for taxes - Added
rules
Association to tax entity - Added
buildTaxRules
to theSalesChannelContext
to get the tax rules for the giventaxId
depending on the customer billing address - Removed
getTaxRuleCollection
from Product entity - Added
taxRuleTypeTranslations
association to Language entity - Added
taxRules
association to country entity - Changed the calling of
\Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition::getDefaults
which is now only called by newly created entities. The check$existence->exists()
inside this method is not necessary anymore - Added new method
\Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition::getChildDefaults
. Use it to define defaults for newly created child entities - Extended the
\Shopware\Core\Checkout\Customer\SalesChannel\AccountRegistrationService::register
method which sets additional the double opt in data (only if set in the admin settings) and dispatches the respective event which send the mail with the confirm link- the confirm link includes the route to the
\Shopware\Storefront\Controller\RegisterController::confirmRegistration
method and two parameters (the sha1 hashed email address of the customer and a random generated hash)
- the confirm link includes the route to the
- Added new method
\Shopware\Core\Checkout\Customer\SalesChannel\AccountRegistrationService::finishDoubleOptInRegistration
which validates the double opt in confirmation and activates the customer when the data is valid - Added new event
\Shopware\Core\Checkout\Customer\Event\DoubleOptInGuestOrderEvent
for sending the confirm mail for double opt in guests - Added new event
\Shopware\Core\Checkout\Customer\Event\CustomerDoubleOptInRegistrationEvent
for sending the confirm mail for double opt in registrations - Extended the
\Shopware\Core\System\Resources\config\loginRegistration.xml
with input fields for double opt in registrations and guests - We adjusted the entry points for administration and storefront resources so that there are no naming conflicts anymore. It is no longer possible to adjust the paths to the corresponding sources. The new structure looks as follows:
MyPlugin └──Resources ├── theme.json ├── app │ ├── administration │ │ └── src │ │ ├── main.js │ │ └── scss │ │ └── base.scss │ └── storefront │ ├── dist │ └── src │ ├── main.js │ └── scss │ └── base.scss ├── config │ ├── routes.xml │ └── services.xml ├── public │ ├── administration │ └── storefront └── views ├── administration ├── documents └── storefront
- We unified the twig template directory structure of the core, administration and storefront bundle. Storefront template are now stored in a sub directory named
storefront
. This has an effect on the previous includes and extends: Before:{% sw_extends '@Storefront/base.html.twig' %}
After:{% sw_extends '@Storefront/storefront/base.html.twig' %}
- We removed the corresponding public functions in the
Bundle.php
:getClassName
getViewPaths
getAdministrationEntryPath
getStorefrontEntryPath
getConfigPath
getStorefrontScriptPath
getStorefrontStylePath
getAdministrationStyles
getAdministrationScripts
getRoutesPath
getServicesFilePath
- We changed the accessibility of different internal
Bundle.php
functionsregisterContainerFile
fromprotected
toprivate
registerEvents
fromprotected
toprivate
registerFilesystem
fromprotected
toprivate
getContainerPrefix
fromprotected
tofinal public
- We changed implementation details for the state machine and the mail service
- Added return type of method
getAvailableTransitions
in\Core\System\StateMachine\StateMachineRegistry
. This method now has to return an array - changed return type of method
transition
in\Core\System\StateMachine\StateMachineRegistry
. This method now returnsStateMachineStateCollection
- Added
StateMachineStateChangeEvent
to handle specific StateMachine Changes - Changed the technical_name for all stateMachine default mailTemplates by stripping the
state_enter
from the beginning. - Added optional Parameter
binAttachments
to methodcreateMessage
in\Core\Content\MailTemplate\Service\MessageFactory
to provide binary attachments for mails. - Added
\Core\Checkout\Order\Api\OrderActionController
to provide endpoints for combine order state changes with sending of mails.
- Added return type of method
- Marked the
\Shopware\Core\Framework\Context::createDefaultContext()
as internal - Added relation between
order_line_item
andproduct
. - Added validation for
order_line_item
of typeproduct
. If a line item of typeproduct
is written and one of the following properties is specified:productId
,referencedId
,payload.productNumber
, the other two properties must also be specified. - Changed the order while loading plugins from the database. They are now sorted ascending by the installation date.
- Moved
Shopware\Core\Content\Newsletter\SalesChannelNewsletterController
toShopware\Core\Content\Newsletter\SalesChannel\SalesChannelNewsletterController
- The MigrationController and MediaFolderController now return StatusCode 204 without content on successful requests
- Renamed
\Shopware\Core\Framework\Api\Converter\ConverterService
to\Shopware\Core\Framework\Api\Converter\ApiVersionConverter
- Added
\Shopware\Core\Framework\Demodata\PersonalData\CleanPersonalDataCommand
to removing personal data by the cli command: "bin/console database:clean-personal-data"- use the command with the argument "guests" to remove guests without orders
- use the command with the argument "carts" to remove canceled carts
- use the command with the option "--all" to remove both of them.
- with the option "--days" it is possible to remove the data which is same old and older than the given number of days
- Updated Symfony dependencies to version
4.4.0
. - We removed the
\Shopware\Core\Framework\DataAbstractionLayer\Write\Command\WriteCommandInterface
, use\Shopware\Core\Framework\DataAbstractionLayer\Write\Command\WriteCommand
instead - The sitemap generator now uses the
cache.system
pool instead ofserializer.mapping.cache.symfony
- Added sales channel type
product_comparison
for generating file exports of dynamic product groups - We moved the namespace
Shopware\Core\Framework\Acl
toShopware\Core\Framework\Api\Acl
- We moved the namespace
Shopware\Core\Framework\CustomField
toShopware\Core\System\CustomField
- We moved the namespace
Shopware\Core\Framework\Language
toShopware\Core\System\Language
- We moved the namespace
Shopware\Core\Framework\Snippet
toShopware\Core\System\Snippet
- We moved the namespace
Shopware\Core\Framework\Doctrine
toShopware\Core\Framework\DataAbstractionLayer\Doctrine
- We moved the namespace
Shopware\Core\Framework\Pricing
toShopware\Core\Framework\DataAbstractionLayer\Pricing
- We moved the namespace
Shopware\Core\Framework\Version
toShopware\Core\Framework\DataAbstractionLayer\Version
- We moved the namespace
Shopware\Core\Framework\Faker
toShopware\Core\Framework\Demodata\Faker
- We moved the namespace
Shopware\Core\Framework\PersonalData
toShopware\Core\Framework\Demodata\PersonalData
- We moved the namespace
Shopware\Core\Framework\Logging
toShopware\Core\Framework\Log
- We moved the namespace
Shopware\Core\Framework\ScheduledTask
toShopware\Core\Framework\MessageQueue\ScheduledTask
- We moved the namespace
Shopware\Core\Framework\Twig
toShopware\Core\Framework\Adapter\Twig
- We moved the namespace
Shopware\Core\Framework\Asset
toShopware\Core\Framework\Adapter\Asset
- We moved the namespace
Shopware\Core\Framework\Console
toShopware\Core\Framework\Adapter\Console
- We moved the namespace
Shopware\Core\Framework\Cache
toShopware\Core\Framework\Adapter\Cache
- We moved the namespace
Shopware\Core\Framework\Filesystem
toShopware\Core\Framework\Adapter\Filesystem
- We moved the namespace
Shopware\Core\Framework\Translation
toShopware\Core\Framework\Adapter\Translation
- We moved the namespace
Shopware\Core\Framework\Seo
toShopware\Core\Content\Seo
- We moved the namespace
Shopware\Core\Framework\Context
toShopware\Core\Framework\Api\Context
- We moved the namespace
Shopware\Core\Content\DeliveryTime
toShopware\Core\System\DeliveryTime
- We moved the Shopware\Core\System\User\Service\UserProvisioner to Shopware\Core\System\User\Service\UserProvisioner
- Added unique constraint for
iso_code
column incurrency
table - We moved the
Shopware\Storefront\Framework\Seo\SeoTemplateReplacementVariable
toShopware\Core\Content\Seo\SeoTemplateReplacementVariable
- We moved the
Shopware\Core\Content\ProductExport\SalesChannel\ProductExportController
toShopware\Storefront\Controller\ProductExportController
- Added
\Shopware\Core\Checkout\Customer\Subscriber\CustomerRemoteAddressSubscriber
to store remote addresses and updating the remote address data in the customer table - Added
\Shopware\Core\Framework\DataAbstractionLayer\Field\RemoteAddressField
to store remote address data - Added
\Shopware\Core\Framework\DataAbstractionLayer\FieldSerializer\RemoteAddressFieldSerializer
to check for the ip anonymous settings and anonymize the addresses if set - Added new
core_mailer
service which should be used to send mails. - We added the
source
parameter for all entity api requests. This parameter allows to filter the returned fields. - The
\Shopware\Core\Framework\Api\Response\ResponseFactoryInterface::createDetailResponse
requires now a provided criteria - The
\Shopware\Core\Framework\Api\Response\ResponseFactoryInterface::createListingResponse
requires now a provided criteria - Removed
\Shopware\Core\Framework\Update\Event\UpdateFinishedEvent
- Added new events:
\Shopware\Core\Framework\Update\Event\UpdatePrePrepareEvent
runs before the update with plugins enabled\Shopware\Core\Framework\Update\Event\UpdatePostPrepareEvent
runs before the update with plugins disabled\Shopware\Core\Framework\Update\Event\UpdatePreFinishEvent
runs after the update with plugins disabled\Shopware\Core\Framework\Update\Event\UpdatePostFinishEvent
runs after the update with plugins enabled
- The
\Shopware\Core\Framework\Api\Response\ResponseFactoryInterface::createListingResponse
requires now a provided criteria - Changed the error code of
ConstrainViolationExeption
fromFRAMEWORK::CONSTRAINT_VIOLATION
toFRAMEWORK__CONSTRAINT_VIOLATION
- Added the
protected
functionShopwareHttpError::getCommonErrorData
which returns you the array that was usually yielded byShopwareHttpError::getErrors
. With the new function it is easier to extend error information before yielding it back.// before class newException extends ShopwareHttpExeption { public funtion getErrors() { // usually the parent function yields one element only foreach(parent::getErrors() as $parentError) { $parentError['someNewField'] = 'some new Data'; yield $parentError; } } } // after class newException extends ShopwareHttpExeption { public funtion getErrors() { $errorData = $this->getCommonErrorData(); $errorData['someNewField'] = 'some new Data'; yield $parentError; } }
- Fixed a bug that cms configuration could not be overridden if some default config is null.
- We added a check to
lineItem.payload.productNumber
before calling the twig truncate function - Deprecated
\Shopware\Core\Framework\Validation\ValidationServiceInterface
, it will be removed in 6.3.0 - Added the interface
\Shopware\Core\Framework\Validation\DataValidationFactoryInterface
that will replace the deprecated\Shopware\Core\Framework\Validation\ValidationServiceInterface
- Removed the
\Shopware\Core\Framework\Validation\ValidationServiceInterface
from the\Shopware\Core\Content\Seo\Validation\SeoUrlValidationService
, added the\Shopware\Core\Content\Seo\Validation\SeoUrlDataValidationFactoryInterface
instead to allow service decoration - Renamed
\Shopware\Core\Content\Seo\Validation\SeoUrlValidationService
to\Shopware\Core\Content\Seo\Validation\SeoUrlValidationFactory
, the old serviceId is now deprecated - Renamed
\Shopware\Core\Checkout\Customer\Validation\AddressValidationService
to\Shopware\Core\Checkout\Customer\Validation\AddressValidationFactory
, the old serviceId is now deprecated - Renamed
\Shopware\Core\Checkout\Customer\Validation\CustomerValidationService
to\Shopware\Core\Checkout\Customer\Validation\CustomerValidationFactory
, the old serviceId is now deprecated - Renamed
\Shopware\Core\Checkout\Customer\Validation\CustomerProfileValidationService
to\Shopware\Core\Checkout\Customer\Validation\CustomerProfileValidationFactory
, the old serviceId is now deprecated - Renamed
\Shopware\Core\Checkout\Order\Validation\OrderValidationService
to\Shopware\Core\Checkout\Order\Validation\OrderValidationFactory
, the old serviceId is now deprecated - Renamed
\Shopware\Core\Content\ContactForm\Validation\ContactFormValidationService
to\Shopware\Core\Content\ContactForm\Validation\ContactFormValidationFactory
, the old serviceId is now deprecated - Fixed a bug in storefront search that occurred when keywords such as \0\0 were entered.
- Added a position field on the
\Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemDefinition
, used for sorting the line items - Changed default
shopware.cdn.strategy
to the newphysical_pathname
strategy that behaves like the oldmd5
strategy. For new installations the default isid
- Deprecated
\Shopware\Core\Framework\Plugin::getExtraBundles
, usegetAdditionalBundles
- Added method
\Shopware\Core\Framework\Plugin::getAdditionalBundles
method with additional parameters compared togetExtraBundles
, to allow loading bundles depending on other plugins/bundles and kernel parameters. - Change default
shopware.cdn.strategy
to the newphysical_pathname
strategy that behaves like the oldmd5
strategy. For new installations the default isid
- Fixed a bug where entities got removed by deleting default version. Deleting default version via
/api/v{version}/_action/version/{versionId}/{entity}/{entityId}
is now forbidden - The data format of the
lineItem.payload.options
has changed. Now there is a simple array per element withoption
andgroup
. It contains the translated names of the entities. - We deprecated the
Shopware\Storefront\Page\Search\SearchPage::$searchResult
property, useShopware\Storefront\Page\Search\SearchPage::$listing
instead - We implemented the new
Shopware\Core\HttpKernel
class which simplifies the kernel initialisation. - Marked the
\Shopware\Core\Framework\Api\ApiDefinition\ApiDefinitionGeneratorInterface
and it's implementations as internal - Added the
version
parameter to the methods of the\Shopware\Core\Framework\Api\ApiDefinition\ApiDefinitionGeneratorInterface
- We deprecated the
\Shopware\Core\Content\Seo\SeoUrlGenerator::generateSeoUrls
function, use\Shopware\Core\Content\Seo\SeoUrlGenerator::generate
instead - We deprecated the
\Shopware\Core\Content\Seo\SeoUrlGenerator::checkUpdateAffectsTemplate
function @Framework/documents/style_base_portrait.css.twig
and@Framework/documents/style_base_landscape.css.twig
are now included bysw_include
.- Added new
$depth
parameter to\Shopware\Core\Content\Category\Service\NavigationLoader::load
- Added new field
navigation_category_depth
to\Shopware\Core\System\SalesChannel\SalesChannelDefinition
- We did some refactoring on how we use
-
Storefront
- Changed
\Shopware\Storefront\Framework\Cache\CacheWarmer\CacheRouteWarmer
signatures - Moved most of the seo module into the core. Only storefront(route) specific logic/extensions remain
- Added twig function
sw_csrf
for creating CSRF tokens - Added
Storefront/Resources/config/packages/storefront.yaml
configuration - Added
csrf
section tostorefront.yaml
configuration - Added
\Shopware\Storefront\Controller\CsrfController
for creating CSRF tokens(only ifcsrf
mode
is set toajax
instorefront.yaml
configuration) - Added JS plugin for handling csrf token generation in native forms(only if
csrf
mode
is set toajax
) - Added
MetaInformation
struct to handle meta information inpageLoader
- Renamed the
breadcrumb
variable used in category seo url templates. It can now be access usingcategory.seoBreadcrumb
to align it with all other variables. - Added an automatic hot reload watcher with automatic detection. Use
./psh.phar storefront:hot-proxy
- Extended the
\Shopware\Storefront\Controller\RegisterController::register
method with the double opt in logic (only if set in the admin settings) - Added new method
\Shopware\Storefront\Controller\RegisterController::confirmRegistration
to confirm double opt in registrations or email addresses - Added twig filter
sw_sanitize
to filter unwanted tags and attributes (prevent XSS) - The filter plugin moves to the offcanvas when the user is in mobile view
- Updated Symfony Dependencies to version
4.4.0
. - Added the
referencePrice
of a product to theoffcanvas cart
and theajax-search
- The default cache time for the theme config now uses the lifetime of the cache pool instead of 1 hour
- The
theme.json
can now also define the order of the templates. For this you can use theviews
parameter:{ "views": [ "@Storefront", "@Plugins", "@SwagCustomizedProduct", "@MyTheme", "@SwagPayPal" ] }
- Added the
async
Attribute to the main<script>
tag. - The
src/Storefront/Resources/app/storefront/src/main.js
now uses thereadystatechange
event to initialize all JavaScript plugins. - Introduced new SCSS variable
$font-weight-semibold
with the value of600
. - Added
fallbackImageTitle
variable tosrc/Storefront/Resources/views/storefront/element/cms-element-image-gallery.html.twig
to add fallback values to the imagesalt
andtitle
attribute if the media object itself has noalt
ortitle
defined. - Added
cookie-configuration
plugin for displaying a cookie configuration menu - Added global event
CookieConfiguration_Update
for updating the cookie preference - Moved
src/Storefront/Resources/app/storefront/src/plugin/cookie-permission/cookie-permission.plugin.js
tosrc/Storefront/Resources/app/storefront/src/plugin/cookie/cookie-permission.plugin.js
- Moved
src/Storefront/Resources/views/storefront/layout/cookie-permission.html.twig
tosrc/Storefront/Resources/views/storefront/layout/cookie/cookie-permission.html.twig
- Added XHtmlRequest route to
/country/country-state-data
- Added
CountryStateController
- Added JavaScript Plugin
CountryStateSelect
that handles selectable states for selected a country - Added blocks to display select to handle the state in address forms
- Encapsulated select inputs for country and state in a single form row
- Added
StorefrontMediaUploader
to handle file uploads in the storefront and validate them usingStorefrontValidationRegistry
andStorefrontMediaValidatorInterface
- Removed return type from
\Shopware\Core\Checkout\Cart\LineItem\LineItem::getPayloadValue()
- Fixed external category links in footer and service navigation
- Updated
copy-webpack-plugin
to5.1.1
in thestorefront
package - Updated
terser-webpack-plugin
to2.2.3
in thestorefront
package - We have refactored the file
Storefront/Resources/views/storefront/layout/navigation/offcanvas/navigation.html.twig
. It was split into smaller template files. - The js plugin manager now catches errors from the plugin initialization to avoid stopping the script if only one plugin fails.
- We removed all dependencies to media metadata in storefront.
- You can now disable the lint plugin by setting
ESLINT_DISABLE
environment variable to'true'
.- Run
APP_URL="<your url>" PLATFORM_ROOT=/app/ ESLINT_DISABLE=true npm run hot
in Storefront js folder
- Run
- The Lint plugin can only be disabled in hot reload mode.
- We extended setup of the
storefront:hot-proxy
- The proxy now points to your app url's host instead of
localhost
which means that the url only differs in the port. - The port is now replaced in both regular page requests and XHtmlRequests.
- The proxy's port is now configurable.
- Using psh: just override the
STOREFRONT_PROXY_PORT
constant (this will also map the port for docker setup) - Using npm: run
APP_URL="<your url>" STOREFRONT_PROXY_PORT=<some port> PROJECT_ROOT=<path to your root folder>/ npm run hot-proxy
from the storefronts js directory.
- Using psh: just override the
- The default port is still port 9998.
- The proxy now points to your app url's host instead of
- We implemented the new
Storefront/Resources/views/storefront/component/product/listing.html.twig
which can be included to display product listings - Changed the naming of the method
_submitForm
to_redirectToVariant
insidesrc/Storefront/Resources/app/storefront/src/plugin/variant-switch/variant-switch.plugin.js
. - Added the
!default
flag to all variable declarations in the following SCSS files to provide the ability to modify the default values inside a theme:src/Storefront/Resources/app/storefront/src/scss/abstract/variables/_bootstrap.scss
src/Storefront/Resources/app/storefront/src/scss/abstract/variables/_custom.scss
src/Storefront/Resources/app/storefront/src/scss/skin/shopware/abstract/variables/_bootstrap.scss
src/Storefront/Resources/app/storefront/src/scss/skin/shopware/abstract/variables/_custom.scss
- Changed
-
Elasticsearch
- The env variables
SHOPWARE_SES_*
were renamed toSHOPWARE_ES_*
.- You can set them with a parameter.yml too.
- The extensions are now saved at the top level of the entities.
- Updated
ongr/elasticsearch-dsl
to version7.0.0
- Updated Symfony Dependencies to version
4.4.0
.
- The env variables
Removals
-
Administration
- Removed module export of
Shopware
- Removed plugin functionality in login
- Removed direct component registration in modules
- Removed "add order" button in order module
- Remove disabled cms page type for product pages
- Removed module export of
-
Core
- When a sub entity is written or deleted, a written event is dispatched for the configured root entity.
- Example for mapping entities: Writing a
product_category
entity now also dispatches aproduct.written
andcategory.written
event - Example for simple sub entities: Writing a
product_price
entity now also dispatches aproduct_category
event - Example for nested sub entities: Writing a
order_delivery_position
entity now also dispatches aorder_delivery.written
and aorder.written
event
- Example for mapping entities: Writing a
- Removed seoUrls extensions in
product
andcategory
. Useproduct/category.seoUrls
instead - Removed
shopware.api.api_browser.public
config value - Removed
Bundle::getAdministrationEntryPath
- Removed
Bundle::getStorefrontEntryPath
- Removed
Bundle::getConfigPath
- Removed
Bundle::getStorefrontScriptPath
- Removed
Bundle::getViewPaths
- Removed
Bundle::getRoutesPath
- Removed
Bundle::getServicesFilePath
- When a sub entity is written or deleted, a written event is dispatched for the configured root entity.
- Example for mapping entities: Writing a
product_category
entity now also dispatches aproduct.written
andcategory.written
event - Example for simple sub entities: Writing a
product_price
entity now also dispatches aproduct_category
event - Example for nested sub entities: Writing a
order_delivery_position
entity now also dispatches aorder_delivery.written
and aorder.written
event
- Example for mapping entities: Writing a
- Dropped
additionalText
column of product entity, usemetaDescription
instead - Removed
EntityExistence $existence
parameter from\Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition::getDefaults
as it is not necessary anymore - Removed configuration
shopware.entity_cache
in favor of the symfony cache poolcache.object
configuration. - Removed the
voku/stop-words
package - Removed the
SearchFilterInterface
andStopWordFilter
, which were not used anywhere - Removed return type hint of
Shopware\Core\Framework\Struct\Collection::reduce
- When a sub entity is written or deleted, a written event is dispatched for the configured root entity.
-
Storefront
- Removed
\Shopware\Storefront\Framework\Cache\CacheWarmer\Navigation\NavigationRouteMessage
- Removed
\Shopware\Storefront\Framework\Cache\CacheWarmer\Product\ProductRouteMessage
- Removed
\Shopware\Storefront\Framework\Cache\CacheWarmer\CacheWarmerSender
- Removed
\Shopware\Storefront\Framework\Cache\CacheWarmer\IteratorMessage
- Removed
\Shopware\Storefront\Framework\Cache\CacheWarmer\IteratorMessageHandler
- Removed unused font variants:
- Removed vendor css file for the "Inter" font face:
src/Storefront/Resources/app/storefront/vendor/Inter-3.5/inter.css
. The font file imports can now be found insrc/Storefront/Resources/app/storefront/src/scss/skin/shopware/vendor/_inter-fontface.scss
. - Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Black.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Black.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-BlackItalic.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-BlackItalic.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraBold.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraBold.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraBoldItalic.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraBoldItalic.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraLight-BETA.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraLight-BETA.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraLightItalic-BETA.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ExtraLightItalic-BETA.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Light-BETA.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Light-BETA.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-LightItalic-BETA.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-LightItalic-BETA.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Medium.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Medium.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-MediumItalic.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Medium.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-MediumItalic.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-MediumItalic.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Thin-BETA.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-Thin-BETA.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ThinItalic-BETA.woff
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-ThinItalic-BETA.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-italic.var.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter-upright.var.woff2
- Removed
src/Storefront/Resources/app/storefront/dist/assets/font/Inter.var.woff2
- Removed vendor css file for the "Inter" font face:
- Removed
ContactPageController
and thecontact page
- Removed
newsletter page
and its route/newsletter
- Removed