PriceIndexUpdater.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\CatalogInventory\Model\Plugin;
  8. use Magento\CatalogInventory\Model\ResourceModel\Stock\Item;
  9. use Magento\Catalog\Model\Indexer\Product\Price\Processor;
  10. use Magento\Framework\Model\AbstractModel;
  11. /**
  12. * Update product price index after product stock status changed.
  13. */
  14. class PriceIndexUpdater
  15. {
  16. /**
  17. * @var Processor
  18. */
  19. private $priceIndexProcessor;
  20. /**
  21. * @param Processor $priceIndexProcessor
  22. */
  23. public function __construct(Processor $priceIndexProcessor)
  24. {
  25. $this->priceIndexProcessor = $priceIndexProcessor;
  26. }
  27. /**
  28. * @param Item $subject
  29. * @param Item $result
  30. * @param AbstractModel $model
  31. * @return Item
  32. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  33. */
  34. public function afterSave(Item $subject, Item $result, AbstractModel $model): Item
  35. {
  36. $fields = [
  37. 'is_in_stock',
  38. 'use_config_manage_stock',
  39. 'manage_stock',
  40. ];
  41. foreach ($fields as $field) {
  42. if ($model->dataHasChangedFor($field)) {
  43. $this->priceIndexProcessor->reindexRow($model->getProductId());
  44. break;
  45. }
  46. }
  47. return $result;
  48. }
  49. /**
  50. * @param Item $subject
  51. * @param mixed $result
  52. * @param int $websiteId
  53. * @return void
  54. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  55. */
  56. public function afterUpdateSetOutOfStock(Item $subject, $result, int $websiteId)
  57. {
  58. $this->priceIndexProcessor->markIndexerAsInvalid();
  59. }
  60. /**
  61. * @param Item $subject
  62. * @param mixed $result
  63. * @param int $websiteId
  64. * @return void
  65. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  66. */
  67. public function afterUpdateSetInStock(Item $subject, $result, int $websiteId)
  68. {
  69. $this->priceIndexProcessor->markIndexerAsInvalid();
  70. }
  71. }