Files
ltsecurityinc/app/code/Amasty/ElasticSearch/Model/RelevanceRuleRepository.php
T

164 lines
4.6 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;
use Amasty\ElasticSearch\Api\Data\RelevanceRuleInterface;
use Amasty\ElasticSearch\Api\RelevanceRuleRepositoryInterface;
use Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\BoostMultipliersProvider;
use Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\CollectionFactory;
use Magento\Framework\Exception\AlreadyExistsException;
use Magento\Framework\Exception\CouldNotDeleteException;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
use Magento\Store\Model\StoreManagerInterface;
class RelevanceRuleRepository implements RelevanceRuleRepositoryInterface
{
/**
* @var RelevanceRuleFactory
*/
private $ruleFactory;
/**
* @var ResourceModel\RelevanceRule
*/
private $ruleResource;
/**
* @var CollectionFactory
*/
private $collectionFactory;
/**
* @var StoreManagerInterface
*/
private $storeManager;
/**
* @var TimezoneInterface
*/
private $localeDate;
/**
* @var BoostMultipliersProvider
*/
private $boostMultipliersProvider;
public function __construct(
RelevanceRuleFactory $ruleFactory,
ResourceModel\RelevanceRule $ruleResource,
CollectionFactory $collectionFactory,
StoreManagerInterface $storeManager,
TimezoneInterface $localeDate,
BoostMultipliersProvider $boostMultipliersProvider
) {
$this->ruleFactory = $ruleFactory;
$this->ruleResource = $ruleResource;
$this->collectionFactory = $collectionFactory;
$this->storeManager = $storeManager;
$this->localeDate = $localeDate;
$this->boostMultipliersProvider = $boostMultipliersProvider;
}
/**
* @inheritdoc
*/
public function save(RelevanceRuleInterface $rule)
{
try {
if ($rule->getId()) {
$rule = $this->get($rule->getId())->addData($rule->getData());
}
$this->ruleResource->save($rule);
} catch (AlreadyExistsException $e) {
throw new AlreadyExistsException(__($e->getMessage()));
} catch (\Exception $e) {
if ($rule->getStopWordId()) {
throw new CouldNotSaveException(
__('Unable to save stopWord with ID %1. Error: %2', [$rule->Id(), $e->getMessage()])
);
}
throw new CouldNotSaveException(__('Unable to save new Relevance Rule. Error: %1', $e->getMessage()));
}
return $rule;
}
/**
* @inheritdoc
*/
public function get($ruleId = null)
{
/** @var \Amasty\ElasticSearch\Model\RelevanceRule $rule */
$rule = $this->ruleFactory->create();
if ($ruleId !== null) {
$this->ruleResource->load($rule, $ruleId);
if (!$rule->getId()) {
throw new NoSuchEntityException(__('Relevance Rule with specified ID "%1" not found.', $ruleId));
}
}
return $rule;
}
/**
* @inheritdoc
*/
public function delete(RelevanceRuleInterface $rule)
{
try {
$this->ruleResource->delete($rule);
} catch (\Exception $e) {
if ($rule->getId()) {
throw new CouldNotDeleteException(
__('Unable to remove Relevance Rule with ID %1. Error: %2', [$rule->getId(), $e->getMessage()])
);
}
throw new CouldNotDeleteException(__('Unable to remove Relevance Rule. Error: %1', $e->getMessage()));
}
return true;
}
/**
* @inheritdoc
*/
public function deleteById($ruleId)
{
$stopWordModel = $this->get($ruleId);
$this->delete($stopWordModel);
return true;
}
/**
* @inheritdoc
*/
public function getActiveRules()
{
return $this->collectionFactory->create()->addActiveFilter();
}
/**
* @param int[] $productIds
* @param int|null $websiteId
* @return float[]
* @throws LocalizedException
*/
public function getProductBoostMultipliers(?array $productIds = null, ?int $websiteId = null): array
{
$websiteId = $websiteId === null ? (int) $this->storeManager->getWebsite()->getId() : $websiteId;
return $this->boostMultipliersProvider->getBoostMultipliers($websiteId, $productIds);
}
}