diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductToWebsiteChangeObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductToWebsiteChangeObserver.php new file mode 100644 index 0000000000000000000000000000000000000000..cd094719838136b954de00b78e411e0ee7148461 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductToWebsiteChangeObserver.php @@ -0,0 +1,78 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\CatalogUrlRewrite\Observer; + +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Event\ObserverInterface; +use Magento\Store\Model\Store; +use Magento\UrlRewrite\Model\UrlPersistInterface; +use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; + +class ProductToWebsiteChangeObserver implements ObserverInterface +{ + /** + * @var ProductUrlRewriteGenerator + */ + protected $productUrlRewriteGenerator; + + /** + * @var UrlPersistInterface + */ + protected $urlPersist; + + /** + * @var ProductRepositoryInterface + */ + protected $productRepository; + + /** + * @var RequestInterface + */ + protected $request; + + /** + * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator + * @param UrlPersistInterface $urlPersist + * @param ProductRepositoryInterface $productRepository + * @param RequestInterface $request + */ + public function __construct( + ProductUrlRewriteGenerator $productUrlRewriteGenerator, + UrlPersistInterface $urlPersist, + ProductRepositoryInterface $productRepository, + RequestInterface $request + ) { + $this->productUrlRewriteGenerator = $productUrlRewriteGenerator; + $this->urlPersist = $urlPersist; + $this->productRepository = $productRepository; + $this->request = $request; + } + + /** + * Generate urls for UrlRewrite and save it in storage + * + * @param \Magento\Framework\Event\Observer $observer + * @return void + */ + public function execute(\Magento\Framework\Event\Observer $observer) + { + foreach ($observer->getEvent()->getProducts() as $productId) { + $product = $this->productRepository->getById( + $productId, + false, + $this->request->getParam('store_id', Store::DEFAULT_STORE_ID) + ); + + $this->urlPersist->deleteByData([ + UrlRewrite::ENTITY_ID => $product->getId(), + UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, + ]); + $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product)); + } + } +} diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml index 194b45d59a41ab1754da85805935bb7d82e968ea..477a6cf338b1ba397c3559533c8957c617519017 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml @@ -27,4 +27,7 @@ <event name="catalog_category_move_after"> <observer name="process_url_rewrite_moving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteMovingObserver"/> </event> + <event name="catalog_product_to_website_change"> + <observer name="catalog_product_to_website_change" instance="Magento\CatalogUrlRewrite\Observer\ProductToWebsiteChangeObserver"/> + </event> </config>