1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CatalogUrlRewrite\Observer;
- use Magento\Catalog\Api\ProductRepositoryInterface;
- use Magento\Catalog\Model\Product\Visibility;
- 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;
- /**
- * Observer to assign the products to website
- */
- 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)
- );
- if (!empty($this->productUrlRewriteGenerator->generate($product))) {
- $this->urlPersist->deleteByData([
- UrlRewrite::ENTITY_ID => $product->getId(),
- UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
- ]);
- if ($product->getVisibility() != Visibility::VISIBILITY_NOT_VISIBLE) {
- $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product));
- }
- }
- }
- }
- }
|