AddPaypalShortcutsObserver.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Observer;
  7. use Magento\Paypal\Helper\Shortcut\Factory;
  8. use Magento\Framework\Event\ObserverInterface;
  9. use Magento\Paypal\Model\Config as PaypalConfig;
  10. use Magento\Framework\Event\Observer as EventObserver;
  11. use Magento\Paypal\Block\Express\InContext\Minicart\SmartButton as MinicartSmartButton;
  12. use Magento\Paypal\Block\Express\InContext\SmartButton as SmartButton;
  13. /**
  14. * PayPal module observer
  15. */
  16. class AddPaypalShortcutsObserver implements ObserverInterface
  17. {
  18. /**
  19. * @var Factory
  20. */
  21. protected $shortcutFactory;
  22. /**
  23. * @var PaypalConfig
  24. */
  25. protected $paypalConfig;
  26. /**
  27. * Constructor
  28. *
  29. * @param Factory $shortcutFactory
  30. * @param PaypalConfig $paypalConfig
  31. */
  32. public function __construct(
  33. Factory $shortcutFactory,
  34. PaypalConfig $paypalConfig
  35. ) {
  36. $this->shortcutFactory = $shortcutFactory;
  37. $this->paypalConfig = $paypalConfig;
  38. }
  39. /**
  40. * Add PayPal shortcut buttons
  41. *
  42. * @param EventObserver $observer
  43. * @return void
  44. */
  45. public function execute(EventObserver $observer)
  46. {
  47. /** @var \Magento\Catalog\Block\ShortcutButtons $shortcutButtons */
  48. $shortcutButtons = $observer->getEvent()->getContainer();
  49. $blocks = [
  50. MinicartSmartButton::class =>
  51. PaypalConfig::METHOD_WPS_EXPRESS,
  52. SmartButton::class => PaypalConfig::METHOD_WPS_EXPRESS,
  53. \Magento\Paypal\Block\Express\Shortcut::class => PaypalConfig::METHOD_WPP_EXPRESS,
  54. \Magento\Paypal\Block\Bml\Shortcut::class => PaypalConfig::METHOD_WPP_EXPRESS,
  55. \Magento\Paypal\Block\WpsExpress\Shortcut::class => PaypalConfig::METHOD_WPS_EXPRESS,
  56. \Magento\Paypal\Block\WpsBml\Shortcut::class => PaypalConfig::METHOD_WPS_EXPRESS,
  57. \Magento\Paypal\Block\PayflowExpress\Shortcut::class => PaypalConfig::METHOD_WPP_PE_EXPRESS,
  58. \Magento\Paypal\Block\Payflow\Bml\Shortcut::class => PaypalConfig::METHOD_WPP_PE_EXPRESS
  59. ];
  60. foreach ($blocks as $blockInstanceName => $paymentMethodCode) {
  61. if (!$this->paypalConfig->isMethodAvailable($paymentMethodCode)) {
  62. continue;
  63. }
  64. $params = [
  65. 'shortcutValidator' => $this->shortcutFactory->create($observer->getEvent()->getCheckoutSession()),
  66. ];
  67. if (!in_array('Bml', explode('\\', $blockInstanceName))) {
  68. $params['checkoutSession'] = $observer->getEvent()->getCheckoutSession();
  69. }
  70. // we believe it's \Magento\Framework\View\Element\Template
  71. $shortcut = $shortcutButtons->getLayout()->createBlock(
  72. $blockInstanceName,
  73. '',
  74. $params
  75. );
  76. $shortcut->setIsInCatalogProduct($observer->getEvent()->getIsCatalogProduct())
  77. ->setShowOrPosition($observer->getEvent()->getOrPosition())
  78. ->setIsShoppingCart((bool) $observer->getEvent()->getIsShoppingCart());
  79. $shortcutButtons->addShortcut($shortcut);
  80. }
  81. }
  82. }