ResetCatalogContactImport.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace Dotdigitalgroup\Email\Observer\Catalog;
  3. /**
  4. * Catalog reset.
  5. */
  6. class ResetCatalogContactImport implements \Magento\Framework\Event\ObserverInterface
  7. {
  8. /**
  9. * @var \Dotdigitalgroup\Email\Helper\Data
  10. */
  11. private $helper;
  12. /**
  13. * @var \Magento\Framework\Registry
  14. */
  15. private $registry;
  16. /**
  17. * @var \Dotdigitalgroup\Email\Model\ResourceModel\Catalog
  18. */
  19. private $connectorCatalog;
  20. /**
  21. * @var \Dotdigitalgroup\Email\Model\ResourceModel\Contact
  22. */
  23. private $connectorContact;
  24. /**
  25. * ResetCatalogContactImport constructor.
  26. *
  27. * @param \Dotdigitalgroup\Email\Model\ResourceModel\Contact $connectorContact
  28. * @param \Dotdigitalgroup\Email\Model\ResourceModel\Catalog $connectorCatalog
  29. * @param \Magento\Framework\Registry $registry
  30. * @param \Dotdigitalgroup\Email\Helper\Data $data
  31. */
  32. public function __construct(
  33. \Dotdigitalgroup\Email\Model\ResourceModel\Contact $connectorContact,
  34. \Dotdigitalgroup\Email\Model\ResourceModel\Catalog $connectorCatalog,
  35. \Magento\Framework\Registry $registry,
  36. \Dotdigitalgroup\Email\Helper\Data $data
  37. ) {
  38. $this->connectorContact = $connectorContact;
  39. $this->connectorCatalog = $connectorCatalog;
  40. $this->helper = $data;
  41. $this->registry = $registry;
  42. }
  43. /**
  44. * Execute method.
  45. *
  46. * @param \Magento\Framework\Event\Observer $observer
  47. *
  48. * @return $this
  49. */
  50. public function execute(\Magento\Framework\Event\Observer $observer)
  51. {
  52. try {
  53. $this->resetConnectorCatalogFactoryIfRequired($observer);
  54. $this->resetAllContactsInConnectorCatalogFactoryIfRequired($observer);
  55. } catch (\Exception $e) {
  56. $this->helper->debug((string)$e, []);
  57. }
  58. return $this;
  59. }
  60. /**
  61. * @param \Magento\Framework\Event\Observer $observer
  62. *
  63. * @return null
  64. */
  65. private function resetConnectorCatalogFactoryIfRequired(\Magento\Framework\Event\Observer $observer)
  66. {
  67. if (!$this->registry->registry('core_config_data_save_after_done')) {
  68. if ($groups = $observer->getEvent()->getConfigData()
  69. ->getGroups()
  70. ) {
  71. if (isset($groups['catalog_sync']['fields']['catalog_values']['value'])) {
  72. $configAfter
  73. = $groups['catalog_sync']['fields']['catalog_values']['value'];
  74. $configBefore
  75. = $this->registry->registry('core_config_data_save_before');
  76. if ($configAfter != $configBefore) {
  77. //reset catalog to re-import
  78. $this->connectorCatalog->reset();
  79. }
  80. $this->registry->unregister('core_config_data_save_after_done'); // additional measure
  81. $this->registry->register(
  82. 'core_config_data_save_after_done',
  83. true
  84. );
  85. }
  86. }
  87. }
  88. }
  89. /**
  90. * @param \Magento\Framework\Event\Observer $observer
  91. *
  92. * @return null
  93. */
  94. private function resetAllContactsInConnectorCatalogFactoryIfRequired(\Magento\Framework\Event\Observer $observer)
  95. {
  96. if (!$this->registry->registry('core_config_data_save_after_done_status')) {
  97. if ($groups = $observer->getEvent()->getConfigData()
  98. ->getGroups()
  99. ) {
  100. if (isset($groups['data_fields']['fields']['order_statuses']['value'])) {
  101. $configAfter
  102. = $groups['data_fields']['fields']['order_statuses']['value'];
  103. $configBefore
  104. = $this->registry->registry('core_config_data_save_before_status');
  105. if ($configAfter != $configBefore) {
  106. //reset all contacts
  107. $this->connectorContact->resetAllContacts();
  108. }
  109. $this->registry->unregister('core_config_data_save_after_done_status'); // additional measure
  110. $this->registry->register(
  111. 'core_config_data_save_after_done_status',
  112. true
  113. );
  114. }
  115. }
  116. }
  117. }
  118. }