CartItemOptionsProcessor.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Quote\Model\Quote\Item;
  7. use Magento\Quote\Api\Data\CartItemInterface;
  8. class CartItemOptionsProcessor
  9. {
  10. /**
  11. * @var CartItemProcessorInterface[]
  12. */
  13. private $cartItemProcessors = [];
  14. /**
  15. * @param CartItemProcessorsPool $cartItemProcessorsPool
  16. */
  17. public function __construct(CartItemProcessorsPool $cartItemProcessorsPool)
  18. {
  19. $this->cartItemProcessors = $cartItemProcessorsPool->getCartItemProcessors();
  20. }
  21. /**
  22. * @param string $productType
  23. * @param CartItemInterface $cartItem
  24. * @return \Magento\Framework\DataObject|float
  25. */
  26. public function getBuyRequest($productType, CartItemInterface $cartItem)
  27. {
  28. $params = (isset($this->cartItemProcessors[$productType]))
  29. ? $this->cartItemProcessors[$productType]->convertToBuyRequest($cartItem)
  30. : null;
  31. $params = ($params === null) ? $cartItem->getQty() : $params->setData('qty', $cartItem->getQty());
  32. return $this->addCustomOptionsToBuyRequest($cartItem, $params);
  33. }
  34. /**
  35. * Add custom options to buy request.
  36. *
  37. * @param CartItemInterface $cartItem
  38. * @param \Magento\Framework\DataObject|float $params
  39. * @return \Magento\Framework\DataObject|float
  40. */
  41. private function addCustomOptionsToBuyRequest(CartItemInterface $cartItem, $params)
  42. {
  43. if (isset($this->cartItemProcessors['custom_options'])) {
  44. $buyRequestUpdate = $this->cartItemProcessors['custom_options']->convertToBuyRequest($cartItem);
  45. if (!$buyRequestUpdate) {
  46. return $params;
  47. }
  48. if ($params instanceof \Magento\Framework\DataObject) {
  49. $buyRequestUpdate->addData($params->getData());
  50. } elseif (is_numeric($params)) {
  51. $buyRequestUpdate->setData('qty', $params);
  52. }
  53. return $buyRequestUpdate;
  54. }
  55. return $params;
  56. }
  57. /**
  58. * @param CartItemInterface $cartItem
  59. * @return CartItemInterface
  60. */
  61. public function applyCustomOptions(CartItemInterface $cartItem)
  62. {
  63. if (isset($this->cartItemProcessors['custom_options'])) {
  64. $cartItem = $this->cartItemProcessors['custom_options']->processOptions($cartItem);
  65. }
  66. return $cartItem;
  67. }
  68. /**
  69. * @param string $productType
  70. * @param CartItemInterface $cartItem
  71. * @return CartItemInterface
  72. */
  73. public function addProductOptions($productType, CartItemInterface $cartItem)
  74. {
  75. $cartItem = (isset($this->cartItemProcessors[$productType]))
  76. ? $this->cartItemProcessors[$productType]->processOptions($cartItem)
  77. : $cartItem;
  78. return $cartItem;
  79. }
  80. }