| Current Path : /var/www/www.indacotrentino.com/www/vendor/magento/module-catalog/Model/ |
| Current File : /var/www/www.indacotrentino.com/www/vendor/magento/module-catalog/Model/ProductOptionProcessor.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Catalog\Model;
use Magento\Catalog\Api\Data\ProductOptionInterface;
use Magento\Catalog\Model\CustomOptions\CustomOption;
use Magento\Catalog\Model\CustomOptions\CustomOptionFactory;
use Magento\Framework\DataObject;
use Magento\Framework\DataObject\Factory as DataObjectFactory;
/**
* Processor for product options
*/
class ProductOptionProcessor implements ProductOptionProcessorInterface
{
/**
* @var DataObjectFactory
*/
protected $objectFactory;
/**
* @var CustomOptionFactory
*/
protected $customOptionFactory;
/**
* @var \Magento\Catalog\Model\Product\Option\UrlBuilder
*/
private $urlBuilder;
/**
* @param DataObjectFactory $objectFactory
* @param CustomOptionFactory $customOptionFactory
*/
public function __construct(
DataObjectFactory $objectFactory,
CustomOptionFactory $customOptionFactory
) {
$this->objectFactory = $objectFactory;
$this->customOptionFactory = $customOptionFactory;
}
/**
* @inheritDoc
*/
public function convertToBuyRequest(ProductOptionInterface $productOption)
{
/** @var DataObject $request */
$request = $this->objectFactory->create();
$options = $this->getCustomOptions($productOption);
if (!empty($options)) {
$requestData = [];
foreach ($options as $option) {
$requestData['options'][$option->getOptionId()] = $option->getOptionValue();
}
$request->addData($requestData);
}
return $request;
}
/**
* Retrieve custom options
*
* @param ProductOptionInterface $productOption
* @return array
*/
protected function getCustomOptions(ProductOptionInterface $productOption)
{
if ($productOption
&& $productOption->getExtensionAttributes()
&& $productOption->getExtensionAttributes()->getCustomOptions()
) {
return $productOption->getExtensionAttributes()
->getCustomOptions();
}
return [];
}
/**
* @inheritDoc
*/
public function convertToProductOption(DataObject $request)
{
$options = $request->getOptions();
if (!empty($options) && is_array($options)) {
$data = [];
foreach ($options as $optionId => $optionValue) {
if (is_array($optionValue) && !$this->isDateWithDateInternal($optionValue)) {
$optionValue = $this->processFileOptionValue($optionValue);
$optionValue = implode(',', $optionValue);
}
/** @var CustomOption $option */
$option = $this->customOptionFactory->create();
$option->setOptionId($optionId)->setOptionValue($optionValue);
$data[] = $option;
}
return ['custom_options' => $data];
}
return [];
}
/**
* Returns option value with file built URL
*
* @param array $optionValue
* @return array
*/
private function processFileOptionValue(array $optionValue)
{
if (array_key_exists('url', $optionValue) &&
array_key_exists('route', $optionValue['url']) &&
array_key_exists('params', $optionValue['url'])
) {
$optionValue['url'] = $this->getUrlBuilder()->getUrl(
$optionValue['url']['route'],
$optionValue['url']['params']
);
}
return $optionValue;
}
/**
* Get url builder
*
* @return \Magento\Catalog\Model\Product\Option\UrlBuilder
*
* @deprecated 101.0.0
*/
private function getUrlBuilder()
{
if ($this->urlBuilder === null) {
$this->urlBuilder = \Magento\Framework\App\ObjectManager::getInstance()
->get(\Magento\Catalog\Model\Product\Option\UrlBuilder::class);
}
return $this->urlBuilder;
}
/**
* Check if the option has a date_internal and date
*
* @param array $optionValue
* @return bool
*/
private function isDateWithDateInternal(array $optionValue): bool
{
$hasDate = !empty($optionValue['day'])
&& !empty($optionValue['month'])
&& !empty($optionValue['year']);
$hasTime = !empty($optionValue['hour'])
&& isset($optionValue['minute']);
$hasDateInternal = !empty($optionValue['date_internal']);
return $hasDateInternal && ($hasDate || $hasTime || !empty($optionValue['date']));
}
}