![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/vendor/magento/module-sales/Model/Order/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Sales\Model\Order; use Magento\Sales\Api\Data\OrderItemInterface; use Magento\Framework\DataObject; use Magento\Catalog\Model\ProductOptionFactory; use Magento\Catalog\Model\ProductOptionProcessorInterface; use Magento\Catalog\Api\Data\ProductOptionExtensionFactory; /** * Adds product option to the order item according to product options processors pool. * * @api * @since 102.0.1 */ class ProductOption { /** * @var ProductOptionFactory */ private $productOptionFactory; /** * @var ProductOptionExtensionFactory */ private $extensionFactory; /** * @var ProductOptionProcessorInterface[] */ private $processorPool; /** * @param ProductOptionFactory $productOptionFactory * @param ProductOptionExtensionFactory $extensionFactory * @param array $processorPool */ public function __construct( ProductOptionFactory $productOptionFactory, ProductOptionExtensionFactory $extensionFactory, array $processorPool = [] ) { $this->productOptionFactory = $productOptionFactory; $this->extensionFactory = $extensionFactory; $this->processorPool = $processorPool; } /** * Adds product option to the order item. * * @param OrderItemInterface $orderItem * @since 102.0.1 */ public function add(OrderItemInterface $orderItem): void { /** @var DataObject $request */ $request = $orderItem->getBuyRequest(); $request->setProductOptions($orderItem->getProductOptions()); $productType = $orderItem->getProductType(); if (isset($this->processorPool[$productType]) && !$orderItem->getParentItemId()) { $data = $this->processorPool[$productType]->convertToProductOption($request); if ($data) { $this->setProductOption($orderItem, $data); } } if (isset($this->processorPool['custom_options']) && !$orderItem->getParentItemId()) { $data = $this->processorPool['custom_options']->convertToProductOption($request); if ($data) { $this->setProductOption($orderItem, $data); } } } /** * Sets product options data. * * @param OrderItemInterface $orderItem * @param array $data */ private function setProductOption(OrderItemInterface $orderItem, array $data): void { $productOption = $orderItem->getProductOption(); if (!$productOption) { $productOption = $this->productOptionFactory->create(); $orderItem->setProductOption($productOption); } $extensionAttributes = $productOption->getExtensionAttributes(); if (!$extensionAttributes) { $extensionAttributes = $this->extensionFactory->create(); $productOption->setExtensionAttributes($extensionAttributes); } $extensionAttributes->setData(key($data), current($data)); } }