GiftMessageManager.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\GiftMessage\Model;
  7. use Magento\Framework\Exception\CouldNotSaveException;
  8. class GiftMessageManager
  9. {
  10. /**
  11. * @var \Magento\GiftMessage\Model\MessageFactory
  12. */
  13. protected $messageFactory;
  14. /**
  15. * @param MessageFactory $messageFactory
  16. */
  17. public function __construct(
  18. \Magento\GiftMessage\Model\MessageFactory $messageFactory
  19. ) {
  20. $this->messageFactory = $messageFactory;
  21. }
  22. /**
  23. * @param array $giftMessages
  24. * @param \Magento\Quote\Model\Quote $quote
  25. * @return $this
  26. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  27. */
  28. public function add($giftMessages, $quote)
  29. {
  30. if (!is_array($giftMessages)) {
  31. return $this;
  32. }
  33. // types are 'quote', 'quote_item', etc
  34. foreach ($giftMessages as $type => $giftMessageEntities) {
  35. foreach ($giftMessageEntities as $entityId => $message) {
  36. $giftMessage = $this->messageFactory->create();
  37. switch ($type) {
  38. case 'quote':
  39. $entity = $quote;
  40. break;
  41. case 'quote_item':
  42. $entity = $quote->getItemById($entityId);
  43. break;
  44. case 'quote_address':
  45. $entity = $quote->getAddressById($entityId);
  46. break;
  47. case 'quote_address_item':
  48. $entity = $quote->getAddressById($message['address'])->getItemById($entityId);
  49. break;
  50. default:
  51. $entity = $quote;
  52. break;
  53. }
  54. if ($entity->getGiftMessageId()) {
  55. $giftMessage->load($entity->getGiftMessageId());
  56. }
  57. if (trim($message['message']) == '') {
  58. if ($giftMessage->getId()) {
  59. try {
  60. $giftMessage->delete();
  61. $entity->setGiftMessageId(0)->save();
  62. } catch (\Exception $e) {
  63. }
  64. }
  65. continue;
  66. }
  67. try {
  68. $giftMessage->setSender(
  69. $message['from']
  70. )->setRecipient(
  71. $message['to']
  72. )->setMessage(
  73. $message['message']
  74. )->setCustomerId(
  75. $quote->getCustomerId()
  76. )->save();
  77. $entity->setGiftMessageId($giftMessage->getId())->save();
  78. } catch (\Exception $e) {
  79. }
  80. }
  81. }
  82. return $this;
  83. }
  84. /**
  85. * Sets the gift message to item or quote.
  86. *
  87. * @param \Magento\Quote\Model\Quote $quote The quote.
  88. * @param string $type The type.
  89. * @param \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage The gift message.
  90. * @param null|int $entityId The entity ID.
  91. * @return void
  92. * @throws \Magento\Framework\Exception\CouldNotSaveException The gift message isn't available.
  93. */
  94. public function setMessage(\Magento\Quote\Model\Quote $quote, $type, $giftMessage, $entityId = null)
  95. {
  96. $message[$type][$entityId] = [
  97. 'from' => $giftMessage->getSender(),
  98. 'to' => $giftMessage->getRecipient(),
  99. 'message' => $giftMessage->getMessage(),
  100. ];
  101. try {
  102. $this->add($message, $quote);
  103. } catch (\Exception $e) {
  104. throw new CouldNotSaveException(__("The gift message couldn't be added to Cart."));
  105. }
  106. }
  107. }