salesChannelFactory = $salesChannelFactory; } /** * Populate stock with sales channels during saving via controller * * @param EventObserver $observer * @return void */ public function execute(EventObserver $observer) { /** @var StockInterface $stock */ $stock = $observer->getEvent()->getStock(); /** @var RequestInterface $request */ $request = $observer->getEvent()->getRequest(); $requestData = $request->getParams(); $extensionAttributes = $stock->getExtensionAttributes(); $assignedSalesChannels = $extensionAttributes->getSalesChannels(); if (null !== $assignedSalesChannels) { foreach ($assignedSalesChannels as $key => $assignedSalesChannel) { if ($assignedSalesChannel->getType() === SalesChannelInterface::TYPE_WEBSITE) { unset($assignedSalesChannels[$key]); } } } if (isset($requestData['sales_channels'][SalesChannelInterface::TYPE_WEBSITE]) && is_array($requestData['sales_channels'][SalesChannelInterface::TYPE_WEBSITE]) ) { foreach ($requestData['sales_channels'][SalesChannelInterface::TYPE_WEBSITE] as $websiteCode) { $assignedSalesChannels[] = $this->createSalesChannelByWebsiteCode($websiteCode); } } $extensionAttributes->setSalesChannels($assignedSalesChannels); } /** * Create the sales channel by given website code * * @param string $websiteCode * @return SalesChannelInterface */ private function createSalesChannelByWebsiteCode(string $websiteCode): SalesChannelInterface { $salesChannel = $this->salesChannelFactory->create(); $salesChannel->setCode($websiteCode); $salesChannel->setType(SalesChannelInterface::TYPE_WEBSITE); return $salesChannel; } }