ApplyBlockPersistentDataObserver.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\Persistent\Observer;
  8. use Magento\Framework\Event\ObserverInterface;
  9. class ApplyBlockPersistentDataObserver implements ObserverInterface
  10. {
  11. /**
  12. * Persistent config factory
  13. *
  14. * @var \Magento\Persistent\Model\Persistent\ConfigFactory
  15. */
  16. protected $_persistentConfigFactory;
  17. /**
  18. * Customer session
  19. *
  20. * @var \Magento\Customer\Model\Session
  21. */
  22. protected $_customerSession;
  23. /**
  24. * Persistent data
  25. *
  26. * @var \Magento\Persistent\Helper\Data
  27. */
  28. protected $_persistentData = null;
  29. /**
  30. * Persistent session
  31. *
  32. * @var \Magento\Persistent\Helper\Session
  33. */
  34. protected $_persistentSession = null;
  35. /**
  36. * @param \Magento\Persistent\Helper\Session $persistentSession
  37. * @param \Magento\Persistent\Helper\Data $persistentData
  38. * @param \Magento\Customer\Model\Session $customerSession
  39. * @param \Magento\Persistent\Model\Persistent\ConfigFactory $persistentConfigFactory
  40. */
  41. public function __construct(
  42. \Magento\Persistent\Helper\Session $persistentSession,
  43. \Magento\Persistent\Helper\Data $persistentData,
  44. \Magento\Customer\Model\Session $customerSession,
  45. \Magento\Persistent\Model\Persistent\ConfigFactory $persistentConfigFactory
  46. ) {
  47. $this->_persistentSession = $persistentSession;
  48. $this->_persistentData = $persistentData;
  49. $this->_customerSession = $customerSession;
  50. $this->_persistentConfigFactory = $persistentConfigFactory;
  51. }
  52. /**
  53. * Apply persistent data to specific block
  54. *
  55. * @param \Magento\Framework\Event\Observer $observer
  56. * @return $this
  57. */
  58. public function execute(\Magento\Framework\Event\Observer $observer)
  59. {
  60. if (!$this->_persistentSession->isPersistent() || $this->_customerSession->isLoggedIn()) {
  61. return $this;
  62. }
  63. /** @var $block \Magento\Framework\View\Element\AbstractBlock */
  64. $block = $observer->getEvent()->getBlock();
  65. if (!$block) {
  66. return $this;
  67. }
  68. $configFilePath = $observer->getEvent()->getConfigFilePath();
  69. if (!$configFilePath) {
  70. $configFilePath = $this->_persistentData->getPersistentConfigFilePath();
  71. }
  72. /** @var $persistentConfig \Magento\Persistent\Model\Persistent\Config */
  73. $persistentConfig = $this->_persistentConfigFactory->create();
  74. $persistentConfig->setConfigFilePath($configFilePath);
  75. foreach ($persistentConfig->getBlockConfigInfo(get_class($block)) as $persistentConfigInfo) {
  76. $persistentConfig->fireOne($persistentConfigInfo, $block);
  77. }
  78. return $this;
  79. }
  80. }