CurrentCustomer.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Customer\Helper\Session;
  7. use Magento\Customer\Api\CustomerRepositoryInterface;
  8. use Magento\Customer\Api\Data\CustomerInterfaceFactory;
  9. use Magento\Customer\Model\Session as CustomerSession;
  10. use Magento\Framework\App\RequestInterface;
  11. use Magento\Framework\App\ViewInterface;
  12. use Magento\Framework\Module\Manager as ModuleManager;
  13. use Magento\Framework\View\LayoutInterface;
  14. /**
  15. * Class CurrentCustomer
  16. */
  17. class CurrentCustomer
  18. {
  19. /**
  20. * @var \Magento\Customer\Model\Session
  21. */
  22. protected $customerSession;
  23. /**
  24. * @var \Magento\Framework\View\LayoutInterface
  25. */
  26. protected $layout;
  27. /**
  28. * @var \Magento\Customer\Api\Data\CustomerInterfaceFactory
  29. */
  30. protected $customerFactory;
  31. /**
  32. * @var CustomerRepositoryInterface
  33. */
  34. protected $customerRepository;
  35. /**
  36. * @var \Magento\Framework\App\RequestInterface
  37. */
  38. protected $request;
  39. /**
  40. * @var \Magento\Framework\Module\Manager
  41. */
  42. protected $moduleManager;
  43. /**
  44. * @var \Magento\Framework\App\ViewInterface
  45. */
  46. protected $view;
  47. /**
  48. * @param CustomerSession $customerSession
  49. * @param LayoutInterface $layout
  50. * @param CustomerInterfaceFactory $customerFactory
  51. * @param CustomerRepositoryInterface $customerRepository
  52. * @param RequestInterface $request
  53. * @param ModuleManager $moduleManager
  54. * @param ViewInterface $view
  55. */
  56. public function __construct(
  57. CustomerSession $customerSession,
  58. LayoutInterface $layout,
  59. CustomerInterfaceFactory $customerFactory,
  60. CustomerRepositoryInterface $customerRepository,
  61. RequestInterface $request,
  62. ModuleManager $moduleManager,
  63. ViewInterface $view
  64. ) {
  65. $this->customerSession = $customerSession;
  66. $this->layout = $layout;
  67. $this->customerFactory = $customerFactory;
  68. $this->customerRepository = $customerRepository;
  69. $this->request = $request;
  70. $this->moduleManager = $moduleManager;
  71. $this->view = $view;
  72. }
  73. /**
  74. * Returns customer Data with customer group only
  75. *
  76. * @return \Magento\Customer\Api\Data\CustomerInterface
  77. */
  78. protected function getDepersonalizedCustomer()
  79. {
  80. $customer = $this->customerFactory->create();
  81. $customer->setGroupId($this->customerSession->getCustomerGroupId());
  82. return $customer;
  83. }
  84. /**
  85. * Returns customer Data from service
  86. *
  87. * @return \Magento\Customer\Api\Data\CustomerInterface
  88. */
  89. protected function getCustomerFromService()
  90. {
  91. return $this->customerRepository->getById($this->customerSession->getId());
  92. }
  93. /**
  94. * Returns current customer according to session and context
  95. *
  96. * @return \Magento\Customer\Api\Data\CustomerInterface
  97. */
  98. public function getCustomer()
  99. {
  100. if ($this->moduleManager->isEnabled('Magento_PageCache')
  101. && !$this->request->isAjax()
  102. && $this->view->isLayoutLoaded()
  103. && $this->layout->isCacheable()
  104. ) {
  105. return $this->getDepersonalizedCustomer();
  106. } else {
  107. return $this->getCustomerFromService();
  108. }
  109. }
  110. /**
  111. * Returns customer id from session
  112. *
  113. * @return int|null
  114. */
  115. public function getCustomerId()
  116. {
  117. return $this->customerSession->getId();
  118. }
  119. /**
  120. * Set customer id
  121. *
  122. * @param int|null $customerId
  123. * @return void
  124. */
  125. public function setCustomerId($customerId)
  126. {
  127. $this->customerSession->setId($customerId);
  128. }
  129. }