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 / Repository /
Filename/home/Mirasvit/Search/Repository/IndexRepository.php
Size4.7 kb
Permissionrw-r--r--
Ownerroot : root
Create time01-Jul-2024 20:52
Last modified06-Apr-2021 18:06
Last accessed21-Aug-2025 18:42
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\Repository;

use Magento\Framework\EntityManager\EntityManager;
use Magento\Framework\ObjectManagerInterface;
use Mirasvit\Search\Api\Data\Index\InstanceInterface;
use Mirasvit\Search\Api\Data\IndexInterface;
use Mirasvit\Search\Api\Data\IndexInterfaceFactory;
use Mirasvit\Search\Model\ResourceModel\Index\CollectionFactory as IndexCollectionFactory;

class IndexRepository
{
private static $multiIndexes = ['magento_catalog_attribute'];

private static $indexCache = [];

private static $instanceCache = [];

private $entityManager;

private $indexFactory;

private $indexCollectionFactory;

private $objectManager;

private $indexPool;

public function __construct(
EntityManager $entityManager,
IndexInterfaceFactory $indexFactory,
IndexCollectionFactory $indexCollectionFactory,
ObjectManagerInterface $objectManager,
array $indexes = []
) {
$this->entityManager = $entityManager;
$this->indexFactory = $indexFactory;
$this->indexCollectionFactory = $indexCollectionFactory;
$this->objectManager = $objectManager;
$this->indexPool = $indexes;
}

/**
* @return \Mirasvit\Search\Model\ResourceModel\Index\Collection|IndexInterface[]
*/
public function getCollection()
{
return $this->indexCollectionFactory->create();
}

public function delete(IndexInterface $index): IndexRepository
{
$this->entityManager->delete($index);

return $this;
}

public function save(IndexInterface $index): IndexInterface
{
$this->entityManager->save($index);

return $index;
}

public function get(int $id): ?IndexInterface
{
if (array_key_exists($id, self::$indexCache)) {
return self::$indexCache[$id];
}

$index = $this->create();
$index = $this->entityManager->load($index, $id);

if (!$index->getId()) {
return null;
}

self::$indexCache[$id] = $index;

return $index;
}

public function getByIdentifier(string $identifier): ?IndexInterface
{
if (array_key_exists($identifier, self::$indexCache)) {
return self::$indexCache[$identifier];
}

$index = $this->create()->load($identifier, IndexInterface::IDENTIFIER);

if (!$index->getId()) {
return null;
}

self::$indexCache[$identifier] = $index;

return $index;
}

public function create(): IndexInterface
{
return $this->indexFactory->create();
}

/**
* @return InstanceInterface[]
*/
public function getList(): array
{
$result = [];

foreach ($this->indexPool as $identifier => $class) {
$result[] = $this->objectManager->create($class, ['identifier' => $identifier]);
}

return $result;
}

public function getInstance(IndexInterface $index): ?InstanceInterface
{
$identifier = $index->getIdentifier();

$instance = $this->mapInstanceByIdentifier($identifier);

$instance
->setIndex($index)
->setData($index->getData());

return $instance;
}

public function getInstanceByIdentifier(string $identifier): ?InstanceInterface
{
$identifier = str_replace(InstanceInterface::INDEX_PREFIX, '', $identifier);

$instance = $this->mapInstanceByIdentifier($identifier);

$index = $this->getByIdentifier($identifier);

$instance
->setIndex($index)
->setData($index->getData());

return $instance;
}

private function mapInstanceByIdentifier(string $identifier): ?InstanceInterface
{
if (!array_key_exists($identifier, self::$instanceCache)) {
self::$instanceCache[$identifier] = null;

foreach ($this->getList() as $instance) {
if ($instance->getIdentifier() == $identifier) {
self::$instanceCache[$identifier] = $instance;
}
}
}

return self::$instanceCache[$identifier];
}
}