Validator.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Helper\Shortcut;
  7. /**
  8. * @SuppressWarnings(PHPMD.UnusedPrivateField)
  9. */
  10. class Validator implements ValidatorInterface
  11. {
  12. /**
  13. * @var \Magento\Paypal\Model\ConfigFactory
  14. */
  15. private $_paypalConfigFactory;
  16. /**
  17. * @var \Magento\Framework\Registry
  18. */
  19. private $_registry;
  20. /**
  21. * @var \Magento\Catalog\Model\ProductTypes\ConfigInterface
  22. */
  23. private $_productTypeConfig;
  24. /**
  25. * @var \Magento\Payment\Helper\Data
  26. */
  27. private $_paymentData;
  28. /**
  29. * @param \Magento\Paypal\Model\ConfigFactory $paypalConfigFactory
  30. * @param \Magento\Framework\Registry $registry
  31. * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig
  32. * @param \Magento\Payment\Helper\Data $paymentData
  33. */
  34. public function __construct(
  35. \Magento\Paypal\Model\ConfigFactory $paypalConfigFactory,
  36. \Magento\Framework\Registry $registry,
  37. \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig,
  38. \Magento\Payment\Helper\Data $paymentData
  39. ) {
  40. $this->_paypalConfigFactory = $paypalConfigFactory;
  41. $this->_registry = $registry;
  42. $this->_productTypeConfig = $productTypeConfig;
  43. $this->_paymentData = $paymentData;
  44. }
  45. /**
  46. * Validates shortcut
  47. *
  48. * @param string $code
  49. * @param bool $isInCatalog
  50. * @return bool
  51. */
  52. public function validate($code, $isInCatalog)
  53. {
  54. return $this->isContextAvailable($code, $isInCatalog)
  55. && $this->isPriceOrSetAvailable($isInCatalog)
  56. && $this->isMethodAvailable($code);
  57. }
  58. /**
  59. * Checks visibility of context (cart or product page)
  60. *
  61. * @param string $paymentCode Payment method code
  62. * @param bool $isInCatalog
  63. * @return bool
  64. */
  65. public function isContextAvailable($paymentCode, $isInCatalog)
  66. {
  67. /** @var \Magento\Paypal\Model\Config $config */
  68. $config = $this->_paypalConfigFactory->create();
  69. $config->setMethod($paymentCode);
  70. // check visibility on cart or product page
  71. $context = $isInCatalog ? 'visible_on_product' : 'visible_on_cart';
  72. if (!$config->getValue($context)) {
  73. return false;
  74. }
  75. return true;
  76. }
  77. /**
  78. * Check is product available depending on final price or type set(configurable)
  79. *
  80. * @param bool $isInCatalog
  81. * @return bool
  82. */
  83. public function isPriceOrSetAvailable($isInCatalog)
  84. {
  85. if ($isInCatalog) {
  86. // Show PayPal shortcut on a product view page only if product has nonzero price
  87. /** @var $currentProduct \Magento\Catalog\Model\Product */
  88. $currentProduct = $this->_registry->registry('current_product');
  89. if ($currentProduct !== null) {
  90. $productPrice = (double)$currentProduct->getFinalPrice();
  91. $typeInstance = $currentProduct->getTypeInstance();
  92. if (empty($productPrice)
  93. && !$this->_productTypeConfig->isProductSet($currentProduct->getTypeId())
  94. && !$typeInstance->canConfigure($currentProduct)
  95. ) {
  96. return false;
  97. }
  98. }
  99. }
  100. return true;
  101. }
  102. /**
  103. * Checks payment method and quote availability
  104. *
  105. * @param string $paymentCode
  106. * @return bool
  107. */
  108. public function isMethodAvailable($paymentCode)
  109. {
  110. // check payment method availability
  111. /** @var \Magento\Payment\Model\Method\AbstractMethod $methodInstance */
  112. $methodInstance = $this->_paymentData->getMethodInstance($paymentCode);
  113. if (!$methodInstance->isAvailable()) {
  114. return false;
  115. }
  116. return true;
  117. }
  118. }