Spamworldpro Mini Shell
Spamworldpro


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/old/vendor/magento/module-grouped-product/Model/Quote/Item/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/magento/module-grouped-product/Model/Quote/Item/CartItemProcessor.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\GroupedProduct\Model\Quote\Item;

use Magento\Framework\DataObject;
use Magento\Framework\DataObject\Factory as ObjectFactory;
use Magento\Framework\Exception\LocalizedException;
use Magento\GroupedProduct\Api\Data\GroupedOptionsInterface;
use Magento\GroupedProduct\Model\Product\Type\Grouped;
use Magento\Quote\Api\Data as QuoteApi;
use Magento\Quote\Api\Data\CartItemInterface;
use Magento\Quote\Model\Quote\Item\CartItemProcessorInterface;

/**
 * Converts grouped_options to super_group for the grouped product.
 */
class CartItemProcessor implements CartItemProcessorInterface
{
    private const SUPER_GROUP_CODE = 'super_group';

    /**
     * @var ObjectFactory
     */
    private $objectFactory;

    /**
     * @var QuoteApi\ProductOptionExtensionFactory
     */
    private $productOptionExtensionFactory;

    /**
     * @var QuoteApi\ProductOptionInterfaceFactory
     */
    private $productOptionFactory;

    /**
     * @var array|null
     */
    private $groupedOptions;

    /**
     * @param ObjectFactory $objectFactory
     * @param QuoteApi\ProductOptionExtensionFactory $productOptionExtensionFactory
     * @param QuoteApi\ProductOptionInterfaceFactory $productOptionFactory
     */
    public function __construct(
        ObjectFactory $objectFactory,
        QuoteApi\ProductOptionExtensionFactory $productOptionExtensionFactory,
        QuoteApi\ProductOptionInterfaceFactory $productOptionFactory
    ) {
        $this->objectFactory = $objectFactory;
        $this->productOptionExtensionFactory = $productOptionExtensionFactory;
        $this->productOptionFactory = $productOptionFactory;
    }

    /**
     * Converts the grouped_options request data into the same format as native frontend add-to-cart
     *
     * @param CartItemInterface $cartItem
     * @return DataObject|null
     */
    public function convertToBuyRequest(CartItemInterface $cartItem): ?DataObject
    {
        if ($cartItem->getProductOption()
            && $cartItem->getProductOption()->getExtensionAttributes()
            && $cartItem->getProductOption()->getExtensionAttributes()->getGroupedOptions()
        ) {
            $groupedOptions = $cartItem->getProductOption()->getExtensionAttributes()->getGroupedOptions();
            $this->groupedOptions = $groupedOptions;

            return $this->objectFactory->create($this->getConvertedData($groupedOptions));
        }

        return null;
    }

    /**
     * Returns grouped_options converted to super_group data
     *
     * @param GroupedOptionsInterface[] $groupedOptions
     * @return array
     * @throws LocalizedException
     */
    private function getConvertedData(array $groupedOptions): array
    {
        $requestData = [];
        foreach ($groupedOptions as $item) {
            /** @var GroupedOptionsInterface $item */
            if ($item->getQty() === null || $item->getId() === null) {
                throw new LocalizedException(__('Please specify id and qty for grouped options.'));
            }
            $requestData[self::SUPER_GROUP_CODE][$item->getId()] = $item->getQty();
        }

        return $requestData;
    }

    /**
     * Option processor
     *
     * @param CartItemInterface $cartItem
     * @return CartItemInterface
     */
    public function processOptions(CartItemInterface $cartItem): CartItemInterface
    {
        if (empty($this->groupedOptions) || $cartItem->getProductType() !== Grouped::TYPE_CODE) {
            return $cartItem;
        }

        $extension = $this->productOptionExtensionFactory->create()
            ->setGroupedOptions($this->groupedOptions);
        if (!$cartItem->getProductOption()) {
            $cartItem->setProductOption($this->productOptionFactory->create());
        }
        $cartItem->getProductOption()->setExtensionAttributes($extension);

        return $cartItem;
    }
}

Spamworldpro Mini