Model/Product/Feed/ProductRetriever/Simple.php (43 lines of code) (raw):

<?php /** * Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved */ namespace Facebook\BusinessExtension\Model\Product\Feed\ProductRetriever; use Facebook\BusinessExtension\Helper\FBEHelper; use Facebook\BusinessExtension\Model\Product\Feed\ProductRetrieverInterface; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\Product\Type as ProductType; use Magento\Catalog\Model\Product\Visibility; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; class Simple implements ProductRetrieverInterface { const LIMIT = 2000; /** * @var FBEHelper */ protected $fbeHelper; /** * @var CollectionFactory */ protected $productCollectionFactory; /** * @param FBEHelper $fbeHelper * @param CollectionFactory $productCollectionFactory */ public function __construct(FBEHelper $fbeHelper, CollectionFactory $productCollectionFactory) { $this->fbeHelper = $fbeHelper; $this->productCollectionFactory = $productCollectionFactory; } /** * @inheritDoc */ public function getProductType() { return ProductType::TYPE_SIMPLE; } /** * @param int $offset * @param int $limit * @return array */ public function retrieve($offset = 1, $limit = self::LIMIT): array { $storeId = $this->fbeHelper->getStore()->getId(); $collection = $this->productCollectionFactory->create(); $collection->addAttributeToSelect('*') ->addAttributeToFilter('status', Status::STATUS_ENABLED) ->addAttributeToFilter('visibility', ['neq' => Visibility::VISIBILITY_NOT_VISIBLE]) ->addAttributeToFilter('type_id', $this->getProductType()) ->setStoreId($storeId); $collection ->getSelect()->joinLeft(['l' => 'catalog_product_super_link'], 'e.entity_id = l.product_id') ->where('l.product_id IS NULL') ->order(new \Zend_Db_Expr('e.updated_at desc')) ->limit($limit, $offset); return $collection->getItems(); } /** * @inheritDoc */ public function getLimit() { return self::LIMIT; } }