CreateCaseBuilder.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Signifyd\Model\SignifydGateway\Request;
  7. use Magento\Sales\Model\OrderFactory;
  8. /**
  9. * Signifyd case creation request builder.
  10. *
  11. * Handles the conversion from Magento Order to Signifyd Case.
  12. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  13. */
  14. class CreateCaseBuilder implements CreateCaseBuilderInterface
  15. {
  16. /**
  17. * @var OrderFactory
  18. */
  19. private $orderFactory;
  20. /**
  21. * @var PurchaseBuilder
  22. */
  23. private $purchaseBuilder;
  24. /**
  25. * @var CardBuilder
  26. */
  27. private $cardBuilder;
  28. /**
  29. * @var RecipientBuilder
  30. */
  31. private $recipientBuilder;
  32. /**
  33. * @var SellerBuilder
  34. */
  35. private $sellerBuilder;
  36. /**
  37. * @var ClientVersionBuilder
  38. */
  39. private $clientVersionBuilder;
  40. /**
  41. * @var UserAccountBuilder
  42. */
  43. private $userAccountBuilder;
  44. /**
  45. * @param OrderFactory $orderFactory
  46. * @param PurchaseBuilder $purchaseBuilder
  47. * @param CardBuilder $cardBuilder
  48. * @param RecipientBuilder $recipientBuilder
  49. * @param SellerBuilder $sellerBuilder
  50. * @param ClientVersionBuilder $clientVersionBuilder
  51. * @param UserAccountBuilder $userAccountBuilder
  52. */
  53. public function __construct(
  54. OrderFactory $orderFactory,
  55. PurchaseBuilder $purchaseBuilder,
  56. CardBuilder $cardBuilder,
  57. RecipientBuilder $recipientBuilder,
  58. SellerBuilder $sellerBuilder,
  59. ClientVersionBuilder $clientVersionBuilder,
  60. UserAccountBuilder $userAccountBuilder
  61. ) {
  62. $this->orderFactory = $orderFactory;
  63. $this->purchaseBuilder = $purchaseBuilder;
  64. $this->cardBuilder = $cardBuilder;
  65. $this->recipientBuilder = $recipientBuilder;
  66. $this->sellerBuilder = $sellerBuilder;
  67. $this->clientVersionBuilder = $clientVersionBuilder;
  68. $this->userAccountBuilder = $userAccountBuilder;
  69. }
  70. /**
  71. * @inheritdoc
  72. */
  73. public function build($orderId)
  74. {
  75. /* @var $order \Magento\Sales\Model\Order */
  76. $order = $this->orderFactory->create()->load($orderId);
  77. return $this->removeEmptyValues(
  78. array_merge(
  79. $this->purchaseBuilder->build($order),
  80. $this->cardBuilder->build($order),
  81. $this->recipientBuilder->build($order),
  82. $this->userAccountBuilder->build($order),
  83. $this->sellerBuilder->build($order),
  84. $this->clientVersionBuilder->build()
  85. )
  86. );
  87. }
  88. /**
  89. * Remove empty and null values.
  90. *
  91. * @param array $data
  92. * @return array
  93. */
  94. private function removeEmptyValues($data)
  95. {
  96. foreach ($data as $key => $value) {
  97. if (is_array($value)) {
  98. $data[$key] = $this->removeEmptyValues($data[$key]);
  99. }
  100. if ($this->isEmpty($data[$key])) {
  101. unset($data[$key]);
  102. }
  103. }
  104. return $data;
  105. }
  106. /**
  107. * Empty values are null, empty string and empty array.
  108. *
  109. * @param mixed $value
  110. * @return bool
  111. */
  112. private function isEmpty($value)
  113. {
  114. return $value === null || (is_array($value) && empty($value));
  115. }
  116. }