<?php
namespace App\Classes\DataMapper\Product;
use App\Helper\DataMapper\PriceQuantityValueDataMapper;
use Factory\SupportBundle\Classes\DataMapper\Ecommerce\PriceDataMapper;
use Factory\SupportBundle\Contract\DataMapper\AbstractDataMapper;
use Pimcore\Model\DataObject\Product;
class ProductDataMapper extends AbstractDataMapper
{
/**
* @var Product
*/
protected $resource;
public function toArray($request)
{
$additionals = [];
if ($additionalContent = $this->getAdditionalContent()) {
$additionals = array_filter(
ProductAdditionalContentDataMapper::list(
$additionalContent->getItems()
)->toArray($request)
);
}
$variantImages = ProductImageDataMapper::list($this->getProducts() ?? [])->toArray($request);
if (count($variantImages) > 1) {
$variantImages = array_merge(...$variantImages);
} elseif (count($variantImages) == 1) {
$variantImages = $variantImages[0];
} else {
$variantImages = [];
}
return [
'id' => $this->get('id'),
'name' => $this->getName(),
'sku' => $this->getSku(),
'image' => $this->getMainImage(),
'href' => $this->getHref(),
'key' => $this->getKey(),
'metaTitle' => $this->getMetaTitle(),
'metaDescription' => $this->getMetaDescription(),
'metaKeywords' => $this->getMetaKeywords(),
'ogTitle' => $this->getOgTitle(),
'ogDescription' => $this->getOgDescription(),
'ogImage' => $this->getOgImage(),
'additionalContent' => $additionals,
'shortDescription' => $this->getShortDescription(),
'basePrice' => (new PriceQuantityValueDataMapper($this->getBasePrice()))->toArray($request),
'price' => (new PriceDataMapper($this->getOSPrice()))->toArray($request),
'minPrice' => (new PriceDataMapper($this->getOSMinPrice()))->toArray($request),
'isPriceVisible' => $this->getOSPriceInfo()->isPriceVisible(),
'category' => $this->getMainCategory(),
'variantImages' => $variantImages,
];
}
}