ProductToWebsiteChangeObserver.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CatalogUrlRewrite\Observer;
  7. use Magento\Catalog\Api\ProductRepositoryInterface;
  8. use Magento\Catalog\Model\Product\Visibility;
  9. use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
  10. use Magento\Framework\App\RequestInterface;
  11. use Magento\Framework\Event\ObserverInterface;
  12. use Magento\Store\Model\Store;
  13. use Magento\UrlRewrite\Model\UrlPersistInterface;
  14. use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
  15. /**
  16. * Observer to assign the products to website
  17. */
  18. class ProductToWebsiteChangeObserver implements ObserverInterface
  19. {
  20. /**
  21. * @var ProductUrlRewriteGenerator
  22. */
  23. protected $productUrlRewriteGenerator;
  24. /**
  25. * @var UrlPersistInterface
  26. */
  27. protected $urlPersist;
  28. /**
  29. * @var ProductRepositoryInterface
  30. */
  31. protected $productRepository;
  32. /**
  33. * @var RequestInterface
  34. */
  35. protected $request;
  36. /**
  37. * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
  38. * @param UrlPersistInterface $urlPersist
  39. * @param ProductRepositoryInterface $productRepository
  40. * @param RequestInterface $request
  41. */
  42. public function __construct(
  43. ProductUrlRewriteGenerator $productUrlRewriteGenerator,
  44. UrlPersistInterface $urlPersist,
  45. ProductRepositoryInterface $productRepository,
  46. RequestInterface $request
  47. ) {
  48. $this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
  49. $this->urlPersist = $urlPersist;
  50. $this->productRepository = $productRepository;
  51. $this->request = $request;
  52. }
  53. /**
  54. * Generate urls for UrlRewrite and save it in storage
  55. *
  56. * @param \Magento\Framework\Event\Observer $observer
  57. * @return void
  58. */
  59. public function execute(\Magento\Framework\Event\Observer $observer)
  60. {
  61. foreach ($observer->getEvent()->getProducts() as $productId) {
  62. $product = $this->productRepository->getById(
  63. $productId,
  64. false,
  65. $this->request->getParam('store_id', Store::DEFAULT_STORE_ID)
  66. );
  67. if (!empty($this->productUrlRewriteGenerator->generate($product))) {
  68. $this->urlPersist->deleteByData([
  69. UrlRewrite::ENTITY_ID => $product->getId(),
  70. UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
  71. ]);
  72. if ($product->getVisibility() != Visibility::VISIBILITY_NOT_VISIBLE) {
  73. $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product));
  74. }
  75. }
  76. }
  77. }
  78. }