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/app/code/Cnc/SearchAutocomplete/Index/Magento/Catalog/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/old/app/code/Cnc/SearchAutocomplete/Index/Magento/Catalog/ProductInstantProvider.php
<?php
/**
 * Copyright (c) 2019 Kaliop Digital Commerce (https://digitalcommerce.kaliop.com) All Rights Reserved.
 * https://opensource.org/licenses/OSL-3.0  Open Software License (OSL 3.0)
 * cnc_searchautocomplete_m2
 * <[email protected]>
 */

declare(strict_types=1);

namespace Cnc\SearchAutocomplete\Index\Magento\Catalog;

use Cnc\Catalog\Model\Product\States as ProductStates;
use Cnc\Catalog\Model\Product\Stock as ProductStock;
use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
use Magento\Review\Model\ResourceModel\Review\Summary\CollectionFactory as SummaryCollectionFactory;
use Mirasvit\Search\Index\Magento\Catalog\Product\InstantProvider;
use Mirasvit\Search\Service\IndexService;

class ProductInstantProvider extends InstantProvider
{
    /**
     * @var InstantProvider\Mapper
     */
    private $mapper;

    /**
     * @var SummaryCollectionFactory
     */
    private $summaryFactory;

    /**
     * @var ProductCollectionFactory
     */
    private $productCollectionFactory;

    private $reviews = [];
    /**
     * @var ProductStates
     */
    private $productStates;

    /**
     * @var ProductStock
     */
    private $productStock;

    public function __construct(
        InstantProvider\Mapper $mapper,
        SummaryCollectionFactory $summaryFactory,
        ProductCollectionFactory $productCollectionFactory,
        IndexService $indexService,
        ProductStates $productStates,
        ProductStock $productStock
    ) {
        parent::__construct($mapper, $indexService);

        $this->mapper = $mapper;
        $this->summaryFactory = $summaryFactory;
        $this->productCollectionFactory = $productCollectionFactory;
        $this->productStates = $productStates;
        $this->productStock = $productStock;
    }

    public function getItems(int $storeId, int $limit, int $page = 1): array
    {
        /** @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $collection */
        $collection = $this->getCollection($limit);

        $collection->addAttributeToSelect('name')
            ->addAttributeToSelect('short_description')
            ->addAttributeToSelect('description');

        $this->prepareRatingData($collection->getAllIds(), $storeId);

        $items = [];

        foreach ($collection as $product) {
            $items[] = $this->mapProduct($product, $storeId);
        }

        return $items;
    }

    private function mapProduct(ProductInterface $product, int $storeId): array
    {
        // @override START
        // States (init empty values first, in order to make knockoutjs conditions safe)
        $initialStates = [
            'state_' . ProductStates::STATE_NEW => null,
            'state_' . ProductStates::STATE_EXCHANGE => null,
            'state_' . ProductStates::STATE_USED => null,
            'state_' . ProductStates::STATE_REFURBISHED => null
        ];
        $productStates = $this->productStates->getProductStates($product, 'state_');
        $resultStates = array_merge($initialStates, $productStates);
        // @override END

        $itemData = [
            'name' => $this->mapper->getProductName($product),
            'url' => $this->mapper->getProductUrl($product, $storeId),
            'sku' => $this->mapper->getProductSku($product),
            'description' => $this->mapper->getDescription($product),
            'image' => $this->mapper->getProductImage($product, $storeId),
            'price' => $this->mapper->getPrice($product),
            'rating' => $this->mapper->getRating($product, $storeId, $this->reviews),
            'cart' => $this->mapper->getCart($product, $storeId),
            // @override START
            // Stock/Availability
            'stock_status_css_class' => $this->productStock->getStatusCssClass($product),
            'stock_status_label' => $this->productStock->getStatusLabel($product),
            // Delivery
            'delivery_label' => $this->productStock->getDeliveryDelayLabel($product),
            // @override END
        ];

        return array_merge($itemData, $resultStates);
    }

    private function prepareRatingData(array $productIds, int $storeId): void
    {
        $reviewsCollection = $this->summaryFactory->create()
            ->addEntityFilter($productIds)
            ->addStoreFilter($storeId)
            ->load();

        /** @var \Magento\Review\Model\Review\Summary $reviewSummary */
        foreach ($reviewsCollection as $reviewSummary) {
            $this->reviews[$reviewSummary->getData('entity_pk_value')] = $reviewSummary;
        }
    }
}

Spamworldpro Mini