b374k
m1n1 1.01
Apache/2.4.41 (Ubuntu)
Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64
uid=33(www-data) gid=33(www-data) groups=33(www-data)
server ip : 62.171.164.128 | your ip : 127.0.0.1
safemode OFF
 >  / home / Mirasvit / Search / Index /
Filename/home/Mirasvit/Search/Index/AbstractBatchDataMapper.php
Size2.85 kb
Permissionrw-r--r--
Ownerroot : root
Create time01-Jul-2024 20:52
Last modified06-Apr-2021 18:06
Last accessed21-Aug-2025 19:58
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
<?php
/**
* Mirasvit
*
* This source file is subject to the Mirasvit Software License, which is available at https://mirasvit.com/license/.
* Do not edit or add to this file if you wish to upgrade the to newer versions in the future.
* If you wish to customize this module for your needs.
* Please refer to http://www.magentocommerce.com for more information.
*
* @category Mirasvit
* @package mirasvit/module-search-ultimate
* @version 2.0.25
* @copyright Copyright (C) 2021 Mirasvit (https://mirasvit.com/)
*/



namespace Mirasvit\Search\Index;

use Magento\Elasticsearch\Model\Adapter\BatchDataMapperInterface;

abstract class AbstractBatchDataMapper implements BatchDataMapperInterface
{
protected $context;

public function __construct(
Context $context
) {
$this->context = $context;
}

public function map(array $documentData, $storeId, array $context = [])
{
if (isset($context['entityType'])) {
$identifier = (string)$context['entityType'];

$instance = $this->context->getIndexRepository()->getInstanceByIdentifier($identifier);

foreach ($documentData as $entityId => $indexData) {
$data = [];

foreach ($indexData as $attrId => $value) {
$attributeCode = $instance->getAttributeCode($attrId);

$data[$attributeCode] = $value;
}

$documentData[$entityId] = $data;
}
}

$documentData = $this->recursiveMap($documentData);

return $documentData;
}

/**
* @param array|string $data
* @param string $attrPattern
*
* @return array|string
*/
public function recursiveMap($data, string $attrPattern = '/./')
{
if (is_array($data)) {
foreach ($data as $key => $value) {
if (is_string($value)) {
if (preg_match($attrPattern, (string)$key)) {
$data[$key] = $this->recursiveMap($value, $attrPattern);
}
} else {
$data[$key] = $this->recursiveMap($value, $attrPattern);
}
}
} elseif (is_string($data)) {
$string = mb_strtolower(strip_tags($data));

$expressions = $this->context->getConfigProvider()->getLongTailExpressions();

foreach ($expressions as $expr) {
$matches = null;
preg_match_all($expr['match_expr'], $string, $matches);

foreach ($matches[0] as $math) {
$math = preg_replace($expr['replace_expr'], $expr['replace_char'], $math);
$string .= ' ' . $math;
}
}

$string = preg_replace('/\s\s+/', ' ', $string);

return $string;
}

return $data;
}
}