PreventExpressCheckoutObserver.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 PreventExpressCheckoutObserver implements ObserverInterface
  10. {
  11. /**
  12. * @var \Magento\Framework\Message\ManagerInterface
  13. */
  14. protected $messageManager;
  15. /**
  16. * Url model
  17. *
  18. * @var \Magento\Framework\UrlInterface
  19. */
  20. protected $_url;
  21. /**
  22. * Persistent session
  23. *
  24. * @var \Magento\Persistent\Helper\Session
  25. */
  26. protected $_persistentSession = null;
  27. /**
  28. * @var \Magento\Customer\Model\Session
  29. */
  30. protected $_customerSession;
  31. /**
  32. * @var \Magento\Checkout\Helper\ExpressRedirect
  33. */
  34. protected $_expressRedirectHelper;
  35. /**
  36. * @param \Magento\Persistent\Helper\Session $persistentSession
  37. * @param \Magento\Customer\Model\Session $customerSession
  38. * @param \Magento\Framework\UrlInterface $url
  39. * @param \Magento\Framework\Message\ManagerInterface $messageManager
  40. * @param \Magento\Checkout\Helper\ExpressRedirect $expressRedirectHelper
  41. */
  42. public function __construct(
  43. \Magento\Persistent\Helper\Session $persistentSession,
  44. \Magento\Customer\Model\Session $customerSession,
  45. \Magento\Framework\UrlInterface $url,
  46. \Magento\Framework\Message\ManagerInterface $messageManager,
  47. \Magento\Checkout\Helper\ExpressRedirect $expressRedirectHelper
  48. ) {
  49. $this->_persistentSession = $persistentSession;
  50. $this->_customerSession = $customerSession;
  51. $this->_url = $url;
  52. $this->messageManager = $messageManager;
  53. $this->_expressRedirectHelper = $expressRedirectHelper;
  54. }
  55. /**
  56. * Prevent express checkout
  57. *
  58. * @param \Magento\Framework\Event\Observer $observer
  59. * @return void
  60. */
  61. public function execute(\Magento\Framework\Event\Observer $observer)
  62. {
  63. if (!($this->_persistentSession->isPersistent() && !$this->_customerSession->isLoggedIn())) {
  64. return;
  65. }
  66. /** @var $controllerAction \Magento\Checkout\Controller\Express\RedirectLoginInterface*/
  67. $controllerAction = $observer->getEvent()->getControllerAction();
  68. if (!$controllerAction ||
  69. !$controllerAction instanceof \Magento\Checkout\Controller\Express\RedirectLoginInterface ||
  70. $controllerAction->getRedirectActionName() != $controllerAction->getRequest()->getActionName()
  71. ) {
  72. return;
  73. }
  74. $this->messageManager->addNotice(__('To check out, please sign in using your email address.'));
  75. $customerBeforeAuthUrl = $this->_url->getUrl('persistent/index/expressCheckout');
  76. $this->_expressRedirectHelper->redirectLogin($controllerAction, $customerBeforeAuthUrl);
  77. }
  78. }