public function rebuildStoreProductIndexPage($storeId, $collectionDefault, $page, $pageSize, $emulationInfo = null, $productIds = null, $useTmpIndex = false) { if ($this->config->isEnabledBackend($storeId) === false) { $this->logger->log('INDEXING IS DISABLED FOR ' . $this->logger->getStoreName($storeId)); return; } $this->logger->start('rebuildStoreProductIndexPage ' . $this->logger->getStoreName($storeId) . ' page ' . $page . ' pageSize ' . $pageSize); $emulationInfoPage = null; if ($emulationInfo === null) { $emulationInfoPage = $this->startEmulation($storeId); } $index_prefix = Mage::getConfig()->getTablePrefix(); $additionalAttributes = $this->config->getProductAdditionalAttributes($storeId); /** @var Mage_Catalog_Model_Resource_Product_Collection $collection */ $collection = clone $collectionDefault; $collection->setCurPage($page)->setPageSize($pageSize); $collection->addCategoryIds(); $collection->addUrlRewrite(); if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'stock_qty')) { $collection->joinField('stock_qty', $index_prefix . 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'); } if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'ordered_qty')) { $collection->getSelect()->columns('(SELECT SUM(qty_ordered) FROM ' . $index_prefix . 'sales_flat_order_item WHERE ' . $index_prefix . 'sales_flat_order_item.product_id = e.entity_id) as ordered_qty'); } if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'total_ordered')) { $collection->getSelect()->columns('(SELECT SUM(row_total) FROM ' . $index_prefix . 'sales_flat_order_item WHERE ' . $index_prefix . 'sales_flat_order_item.product_id = e.entity_id) as total_ordered'); } if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'rating_summary')) { $collection->joinField('rating_summary', $index_prefix . 'review_entity_summary', 'rating_summary', 'entity_pk_value=entity_id', '{{table}}.store_id=' . $storeId, 'left'); } $this->logger->start('LOADING ' . $this->logger->getStoreName($storeId) . ' collection page ' . $page . ', pageSize ' . $pageSize); $collection->load(); $this->logger->log('Loaded ' . count($collection) . ' products'); $this->logger->stop('LOADING ' . $this->logger->getStoreName($storeId) . ' collection page ' . $page . ', pageSize ' . $pageSize); $index_name = $this->product_helper->getIndexName($storeId, $useTmpIndex); $indexData = $this->getProductsRecords($storeId, $collection, $productIds); if (!empty($indexData['toIndex'])) { $this->logger->start('ADD/UPDATE TO ALGOLIA'); $this->algolia_helper->addObjects($indexData['toIndex'], $index_name); $this->logger->log('Product IDs: ' . implode(', ', array_keys($indexData['toIndex']))); $this->logger->stop('ADD/UPDATE TO ALGOLIA'); } if (!empty($indexData['toRemove'])) { $this->logger->start('REMOVE FROM ALGOLIA'); $this->algolia_helper->deleteObjects($indexData['toRemove'], $index_name); $this->logger->log('Product IDs: ' . implode(', ', $indexData['toRemove'])); $this->logger->stop('REMOVE FROM ALGOLIA'); } unset($indexData); $collection->walk('clearInstance'); $collection->clear(); unset($collection); if ($emulationInfo === null) { $this->stopEmulation($emulationInfoPage); } $this->logger->stop('rebuildStoreProductIndexPage ' . $this->logger->getStoreName($storeId) . ' page ' . $page . ' pageSize ' . $pageSize); }
public function rebuildCategories() { foreach (Mage::app()->getStores() as $store) { if ($this->config->isEnabledBackEnd($store->getId()) === false) { $this->logger->log('INDEXING IS DISABLED FOR ' . $this->logger->getStoreName($store->getId())); continue; } if ($store->getIsActive()) { $this->addToQueue('algoliasearch/observer', 'rebuildCategoryIndex', array('store_id' => $store->getId(), 'category_ids' => array()), $this->config->getQueueMaxRetries()); } else { $this->addToQueue('algoliasearch/observer', 'deleteCategoriesStoreIndices', array('store_id' => $store->getId()), $this->config->getQueueMaxRetries()); } } }
public function rebuildStoreProductIndexPage($storeId, $collectionDefault, $page, $pageSize, $emulationInfo = null) { if ($this->config->isEnabledBackEnd($storeId) === false) { $this->logger->log('INDEXING IS DISABLED FOR ' . $this->logger->getStoreName($storeId)); return; } $this->logger->start('rebuildStoreProductIndexPage ' . $this->logger->getStoreName($storeId) . ' page ' . $page . ' pageSize ' . $pageSize); $emulationInfoPage = null; if ($emulationInfo === null) { $emulationInfoPage = $this->startEmulation($storeId); } $index_prefix = Mage::getConfig()->getTablePrefix(); $additionalAttributes = $this->config->getProductAdditionalAttributes($storeId); $collection = clone $collectionDefault; $collection->setCurPage($page)->setPageSize($pageSize); $collection->addCategoryIds(); $collection->addUrlRewrite(); if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'stock_qty')) { $collection->joinField('stock_qty', $index_prefix . 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'); } if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'ordered_qty')) { $collection->getSelect()->columns('(SELECT SUM(qty_ordered) FROM ' . $index_prefix . 'sales_flat_order_item WHERE sales_flat_order_item.product_id = e.entity_id) as ordered_qty'); } if ($this->product_helper->isAttributeEnabled($additionalAttributes, 'rating_summary')) { $collection->joinField('rating_summary', $index_prefix . 'review_entity_summary', 'rating_summary', 'entity_pk_value=entity_id', '{{table}}.store_id=' . $storeId, 'left'); } $this->logger->start('LOADING ' . $this->logger->getStoreName($storeId) . ' collection page ' . $page . ', pageSize ' . $pageSize); $collection->load(); $this->logger->log('Loaded ' . count($collection) . ' products'); $this->logger->stop('LOADING ' . $this->logger->getStoreName($storeId) . ' collection page ' . $page . ', pageSize ' . $pageSize); $index_name = $this->product_helper->getIndexName($storeId); $indexData = $this->getProductsRecords($storeId, $collection); $this->logger->start('SEND TO ALGOLIA'); if (count($indexData) > 0) { $this->algolia_helper->addObjects($indexData, $index_name); } $this->logger->stop('SEND TO ALGOLIA'); unset($indexData); $collection->walk('clearInstance'); $collection->clear(); unset($collection); if ($emulationInfo === null) { $this->stopEmulation($emulationInfoPage); } $this->logger->stop('rebuildStoreProductIndexPage ' . $this->logger->getStoreName($storeId) . ' page ' . $page . ' pageSize ' . $pageSize); }
public function rebuildCategories() { foreach (Mage::app()->getStores() as $store) { if ($this->config->isEnabledBackEnd($store->getId()) === false) { if (php_sapi_name() === 'cli') { echo '[ALGOLIA] INDEXING IS DISABLED FOR ' . $this->logger->getStoreName($store->getId()) . "\n"; } Mage::getSingleton('adminhtml/session')->addWarning('[ALGOLIA] INDEXING IS DISABLED FOR ' . $this->logger->getStoreName($store->getId())); $this->logger->log('INDEXING IS DISABLED FOR ' . $this->logger->getStoreName($store->getId())); continue; } if ($store->getIsActive()) { $this->addToQueue('algoliasearch/observer', 'rebuildCategoryIndex', array('store_id' => $store->getId(), 'category_ids' => array()), 1); } else { $this->addToQueue('algoliasearch/observer', 'deleteCategoriesStoreIndices', array('store_id' => $store->getId()), 1); } } }