protected function getProductsRecords($storeId, $collection, $potentiallyDeletedProductsIds = array())
{
$productsToIndex = array();
$productsToRemove = array();
// In $potentiallyDeletedProductsIds there might be IDs of deleted products which will not be in a collection
if (is_array($potentiallyDeletedProductsIds)) {
$potentiallyDeletedProductsIds = array_combine($potentiallyDeletedProductsIds, $potentiallyDeletedProductsIds);
} else {
$potentiallyDeletedProductsIds = array();
}
$this->logger->start('CREATE RECORDS ' . $this->logger->getStoreName($storeId));
$this->logger->log(count($collection) . ' product records to create');
/** @var $product Mage_Catalog_Model_Product */
foreach ($collection as $product) {
$product->setStoreId($storeId);
$productId = $product->getId();
// If $productId is in the collection, remove it from $potentiallyDeletedProductsIds so it's not removed without check
if (isset($potentiallyDeletedProductsIds[$productId])) {
unset($potentiallyDeletedProductsIds[$productId]);
}
if (isset($productsToIndex[$productId]) || isset($productsToRemove[$productId])) {
continue;
}
if ($product->isDeleted() === true || $product->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_DISABLED || (int) $product->getVisibility() <= Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE || $product->getStockItem()->is_in_stock == 0 && !$this->config->getShowOutOfStock($storeId)) {
$productsToRemove[$productId] = $productId;
continue;
}
$json = $this->product_helper->getObject($product);
$productsToIndex[$productId] = $json;
}
$productsToRemove = array_merge($productsToRemove, $potentiallyDeletedProductsIds);
$this->logger->stop('CREATE RECORDS ' . $this->logger->getStoreName($storeId));
return array('toIndex' => $productsToIndex, 'toRemove' => array_unique($productsToRemove));
}