Files

68 lines
2.1 KiB
PHP
Executable File

<?php
/**
* @author Amasty Team
* @copyright Copyright (c) Amasty (https://www.amasty.com)
* @package Elastic Search Base for Magento 2
*/
namespace Amasty\ElasticSearch\Model\Indexer\Data\External;
use Amasty\ElasticSearch\Api\Data\Indexer\Data\DataMapperInterface;
use Amasty\ElasticSearch\Model\Indexer\Structure\EntityBuilder\External\Finder;
use Magento\Catalog\Api\Data\ProductAttributeInterface;
class FinderDataMapper implements DataMapperInterface
{
/**
* @var \Magento\Eav\Model\ResourceModel\Entity\Attribute
*/
private $eavAttribute;
/**
* @var Finder
*/
private $externalBuilder;
public function __construct(
\Magento\Eav\Model\ResourceModel\Entity\Attribute $eavAttribute,
Finder $externalBuilder
) {
$this->eavAttribute = $eavAttribute;
$this->externalBuilder = $externalBuilder;
}
/**
* @param array $documentData
* @param int $storeId
* @param array $context
* @return array
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function map(array $documentData, $storeId, array $context = [])
{
$documents = [];
$externalAttributeIds = [];
foreach (array_keys($this->externalBuilder->getExtraValueFields()) as $attributeCode) {
$externalAttributeIds[$attributeCode . '_value']
= $this->eavAttribute->getIdByCode(ProductAttributeInterface::ENTITY_TYPE_CODE, $attributeCode);
}
foreach ($documentData as $productId => $indexData) {
foreach ($externalAttributeIds as $filterName => $attributeId) {
if (isset($indexData[$attributeId])) {
if (is_array($indexData[$attributeId])) {
$value = isset($indexData[$attributeId][$productId])
? $indexData[$attributeId][$productId] : '';
} else {
$value = $indexData[$attributeId];
}
$documents[$productId][$filterName] = $value;
}
}
}
return $documents;
}
}