Example #1
0
 public function processEvent(Mage_Index_Model_Event $event)
 {
     if ((int) Mage::getStoreConfig('solr/indexer/cms_update')) {
         $solr = Mage::helper('solr')->getSolr();
         $entity = $event->getEntity();
         $type = $event->getType();
         switch ($entity) {
             case DMC_Solr_Model_Cms_Page::ENTITY:
                 if ($type == Mage_Index_Model_Event::TYPE_SAVE) {
                     $object = $event->getDataObject();
                     $document = $this->getSolrDocument();
                     if ($document->setObject($object)) {
                         $solr->addDocument($document);
                         $solr->addDocuments();
                         $solr->commit();
                     }
                 } elseif ($type == Mage_Index_Model_Event::TYPE_DELETE) {
                     $object = $event->getDataObject();
                     $document = $this->getSolrDocument();
                     if ($document->setObject($object)) {
                         $solr->deleteDocument($document);
                         $solr->commit();
                     }
                 }
                 break;
         }
     }
 }
 /**
  * Process event based on event state data
  *
  * @param Mage_Index_Model_Event $event Indexing event.
  *
  * @return void
  */
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     $searchTerm = $event->getDataObject();
     if ($event->getType() == Mage_Index_Model_Event::TYPE_SAVE) {
         $this->reindex($searchTerm);
     }
 }
Example #3
0
 public function processEvent(Mage_Index_Model_Event $event)
 {
     if ((int) Mage::getStoreConfig('solr/indexer/product_update')) {
         $solr = Mage::helper('solr')->getSolr();
         $entity = $event->getEntity();
         $type = $event->getType();
         switch ($entity) {
             case Mage_Catalog_Model_Product::ENTITY:
                 if ($type == Mage_Index_Model_Event::TYPE_MASS_ACTION) {
                 } elseif ($type == Mage_Index_Model_Event::TYPE_SAVE) {
                     $object = $event->getDataObject();
                     $document = $this->getSolrDocument();
                     if ($document->setObject($object)) {
                         $solr->addDocument($document);
                         $solr->addDocuments();
                         $solr->commit();
                     }
                 } elseif ($type == Mage_Index_Model_Event::TYPE_DELETE) {
                 }
                 break;
             case Mage_Catalog_Model_Resource_Eav_Attribute::ENTITY:
                 $this->_skipReindex($event);
                 break;
         }
     }
 }
 /**
  * Modified to pull in all sibling associated products' tier prices and
  * to reindex child tier prices when a parent is saved.
  * 
  * Process product save.
  * Method is responsible for index support
  * when product was saved and changed attribute(s) has an effect on price.
  *
  * @param Mage_Index_Model_Event $event
  * @return Mage_Catalog_Model_Resource_Product_Indexer_Price
  */
 public function catalogProductSave(Mage_Index_Model_Event $event)
 {
     $productId = $event->getEntityPk();
     $data = $event->getNewData();
     /**
      * Check if price attribute values were updated
      */
     if (!isset($data['reindex_price'])) {
         return $this;
     }
     $this->clearTemporaryIndexTable();
     $this->_prepareWebsiteDateTable();
     $indexer = $this->_getIndexer($data['product_type_id']);
     $processIds = array($productId);
     if ($indexer->getIsComposite()) {
         if ($this->getProductTypeById($productId) == 'configurable') {
             $children = $this->getChildIdsByParent($productId);
             $processIds = array_merge($processIds, array_keys($children));
             //Ignore tier and group price data for actual configurable product
             $tierPriceIds = array_keys($children);
         } else {
             $tierPriceIds = $productId;
         }
         $this->_copyRelationIndexData($productId);
         $this->_prepareTierPriceIndex($tierPriceIds);
         $this->_prepareGroupPriceIndex($tierPriceIds);
         $indexer->reindexEntity($productId);
     } else {
         $parentIds = $this->getProductParentsByChild($productId);
         if ($parentIds) {
             $processIds = array_merge($processIds, array_keys($parentIds));
             $siblingIds = array();
             foreach (array_keys($parentIds) as $parentId) {
                 $childIds = $this->getChildIdsByParent($parentId);
                 $siblingIds = array_merge($siblingIds, array_keys($childIds));
             }
             if (count($siblingIds) > 0) {
                 $processIds = array_unique(array_merge($processIds, $siblingIds));
             }
             $this->_copyRelationIndexData(array_keys($parentIds), $productId);
             $this->_prepareTierPriceIndex($processIds);
             $this->_prepareGroupPriceIndex($processIds);
             $indexer->reindexEntity($productId);
             $parentByType = array();
             foreach ($parentIds as $parentId => $parentType) {
                 $parentByType[$parentType][$parentId] = $parentId;
             }
             foreach ($parentByType as $parentType => $entityIds) {
                 $this->_getIndexer($parentType)->reindexEntity($entityIds);
             }
         } else {
             $this->_prepareTierPriceIndex($productId);
             $this->_prepareGroupPriceIndex($productId);
             $indexer->reindexEntity($productId);
         }
     }
     $this->_copyIndexDataToMainTable($processIds);
     return $this;
 }
 /**
  * Event handler for CMS page save events
  *
  * @param Mage_Index_Model_Event $event
  */
 public function CmsPageSave(Mage_Index_Model_Event $event)
 {
     $storeIds = $event->getDataObject()->getStores();
     $pageId = $event->getData('solr_update_page_id');
     foreach ($storeIds as $storeId) {
         $this->rebuildStoreIndex($storeId, $pageId);
     }
 }
 /**
  * Process event based on event state data
  *
  * @param Mage_Index_Model_Event $event Indexing event.
  *
  * @return void
  */
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     $category = $event->getDataObject();
     if ($event->getType() == Mage_Index_Model_Event::TYPE_SAVE) {
         if (Mage::helper('smile_elasticsearch')->isActiveEngine()) {
             $this->reindex($category);
         }
     }
 }
Example #7
0
 /**
  * This method is called by the core indexer process
  * in case of saving (insert/update) a product
  */
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     $solr = Mage::helper('solr')->getSolr();
     $object = $event->getDataObject();
     // if the product is not active anymore, we will remove it from solr index
     if ($object->getStatus() != Mage_Catalog_Model_Product_Status::STATUS_ENABLED) {
         $solr->deleteByQuery("id:{$object->getId()}");
         Mage::helper('solr/log')->addDebugMessage('The object #' . $object->getId() . ' is not active and was therefore deleted.');
         Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('solr')->__('The Product has been removed from Solr.'));
         return;
     }
     // $object contains the full product object
     if ($event->getEntity() == 'catalog_product' && $event->getType() == 'save' && $event->getDataObject()) {
         if ((int) Mage::getStoreConfig('solr/indexer/product_update')) {
             $storeId = $object->getStoreId();
             // to-do
             // index just those store views, we need
             /*
             $adapter = new DMC_Solr_Model_SolrServer_Adapter_Product();
             $document = $adapter->getSolrDocument();
             if($document->setObject($object)) {
                 $document->setStoreId($storeId);
                 // add doducment to adapter object
                 $solr->addDocument($document);
             
                 #echo '<pre>';
                 #print_r($document);exit;
             }
             
             // send documents to solr
             $solr->addDocuments();
             */
             if (!$storeId) {
                 $storeIds = Mage::helper('solr')->getStoresForReindex();
             } else {
                 $storeIds = array($storeId);
             }
             $adapter = new DMC_Solr_Model_SolrServer_Adapter_Product();
             $productId = $object->getId();
             foreach ($storeIds as $storeId) {
                 $object = Mage::getModel('catalog/product')->setStoreId($storeId)->load($productId);
                 $document = $adapter->getSolrDocument();
                 if ($document->setObject($object)) {
                     $document->setStoreId($storeId);
                     $solr->addDocument($document);
                 }
             }
             $solr->addDocuments();
             // commit data to solr
             $solr->commit();
             Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('solr')->__('The Product has been updated at Solr.'));
         }
     }
 }
Example #8
0
 protected function registerCatalogProductEvent(Mage_Index_Model_Event $event)
 {
     switch ($event->getType()) {
         case Mage_Index_Model_Event::TYPE_SAVE:
             $product = $event->getDataObject();
             /** @var Mage_Catalog_Model_Product $product */
             $event->addNewData('solr_update_product_id', $product->getId());
             break;
         case Mage_Index_Model_Event::TYPE_MASS_ACTION:
             break;
     }
 }
Example #9
0
 protected function _registerProductEvent(Mage_Index_Model_Event $event)
 {
     $product = $event->getDataObject();
     $dataChange2 = false;
     if ($product->dataHasChangedFor('status') && $product->getData('status') == "1" || $product->dataHasChangedFor('visibility') && $product->getData('visibility') != "1") {
         $dataChange2 = true;
     }
     $dataChange = $product->dataHasChangedFor('url_key') || $product->getIsChangedCategories() || $product->getIsChangedWebsites() || $dataChange2;
     if (!$product->getExcludeUrlRewrite() && $dataChange) {
         $event->addNewData('rewrite_product_ids', array($product->getId()));
     }
 }
Example #10
0
 protected function _registerEvent(Mage_Index_Model_Event $event)
 {
     $event->addNewData(self::EVENT_MATCH_RESULT_KEY, true);
     $entity = $event->getEntity();
     switch ($entity) {
         case Mage_Core_Model_Store::ENTITY:
         case Mage_Core_Model_Store_Group::ENTITY:
             $process = $event->getProcess();
             $process->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
             break;
     }
     return $this;
 }
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (!empty($data['udreindex_product_ids'])) {
         $this->_getResource()->reindexProducts($data['udreindex_product_ids']);
     }
     if (!empty($data['udreindex_vendor_ids'])) {
         $this->_getResource()->reindexVendors($data['udreindex_vendor_ids']);
     }
     if (empty($data['catalog_product_price_skip_call_event_handler'])) {
         $this->callEventHandler($event);
     }
 }
Example #12
0
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     Varien_Profiler::start(__METHOD__);
     $data = $event->getNewData();
     if (isset($data[self::EVENT_PRODUCT_IDS_KEY]) && is_array($data[self::EVENT_PRODUCT_IDS_KEY])) {
         $this->_startUpdate();
         foreach ($data[self::EVENT_PRODUCT_IDS_KEY] as $productId) {
             $this->_updateProduct($productId);
         }
         $this->_finishUpdate();
     }
     Varien_Profiler::stop(__METHOD__);
 }
 /**
  * match whether the reindexing should be fired
  * @param Mage_Index_Model_Event $event
  * @return bool
  */
 public function matchEvent(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (isset($data[self::EVENT_MATCH_RESULT_KEY])) {
         return $data[self::EVENT_MATCH_RESULT_KEY];
     }
     $entity = $event->getEntity();
     $result = true;
     if ($entity != Mage_Catalog_Model_Product::ENTITY) {
         return;
     }
     $event->addNewData(self::EVENT_MATCH_RESULT_KEY, $result);
     return $result;
 }
 /**
  * @param Mana_Seo_Model_UrlIndexer $indexer
  * @param Mage_Index_Model_Event $event
  */
 public function register($indexer, $event)
 {
     $db = $this->_getReadAdapter();
     if ($event->getEntity() == Mage_Catalog_Model_Resource_Eav_Attribute::ENTITY) {
         $event->addNewData('attribute_id', $event->getData('data_object')->getId());
     } elseif ($event->getEntity() == 'mana_filters/filter2') {
         if ($attributeId = $this->getFilterResource()->getAttributeId($event->getData('data_object'))) {
             $event->addNewData('attribute_id', $attributeId);
         }
     } elseif ($event->getEntity() == 'mana_filters/filter2_store') {
         if ($attributeId = $this->getFilterStoreResource()->getAttributeId($event->getData('data_object'))) {
             $event->addNewData('attribute_id', $attributeId);
         }
     }
 }
Example #15
0
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (!empty($data['amconf_update_product_id'])) {
         $this->doSomethingOnUpdateEvent($data['amconf_update_product_id']);
     } else {
         if (!empty($data['amconf_delete_product_id'])) {
             $this->doSomethingOnDeleteEvent($data['amconf_delete_product_id']);
         } else {
             if (!empty($data['amconf_mass_action_product_ids'])) {
                 $this->doSomethingOnMassActionEvent($data['amconf_mass_action_product_ids']);
             }
         }
     }
 }
Example #16
0
 public function testMatchEventCaching()
 {
     $this->testMatchEventForChangedStoreGroup();
     $storeGroup = $this->_event->getDataObject();
     $storeGroup->expects($this->any())->method('dataHasChangedFor')->will($this->returnValue(false));
     $this->assertTrue($this->_model->matchEvent($this->_event));
 }
Example #17
0
 /**
  * Process event
  *
  * @param Mage_Index_Model_Event $event
  */
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (!empty($data['catalog_url_reindex_all'])) {
         $this->reindexAll();
         return $this;
     }
     // Force rewrites history saving
     $dataObject = $event->getDataObject();
     if ($dataObject instanceof Varien_Object && $dataObject->hasData('save_rewrites_history')) {
         $this->_getResource()->isSaveHistory($dataObject->getData('save_rewrites_history'));
     }
     if (isset($data['rewrite_category_ids']) || isset($data['rewrite_product_ids'])) {
         $this->callEventHandler($event);
     }
     $this->_getResource()->resetSaveHistory();
     return $this;
 }
Example #18
0
 protected function _registerCatalogProductMassActionEvent(Mage_Index_Model_Event $event)
 {
     $actionObject = $event->getDataObject();
     $attributes = $this->_getDependentAttributes();
     $reindexPrice = false;
     $attrData = $actionObject->getAttributesData();
     if (is_array($attrData)) {
         foreach ($attributes as $code) {
             if (array_key_exists($code, $attrData)) {
                 $reindexPrice = true;
                 break;
             }
         }
     }
     if ($reindexPrice) {
         $event->addNewData('reindex_price_product_ids', $actionObject->getProductIds());
     }
     return $this;
 }
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     if (!$this->config->getApplicationID() || !$this->config->getAPIKey() || !$this->config->getSearchOnlyAPIKey()) {
         if (self::$credential_error === false) {
             /** @var Mage_Adminhtml_Model_Session $session */
             $session = Mage::getSingleton('adminhtml/session');
             $session->addError('Algolia indexing failed: You need to configure your Algolia credentials in System > Configuration > Algolia Search.');
             self::$credential_error = true;
         }
         return;
     }
     $data = $event->getNewData();
     /*
      * Reindex all products and all categories and update index settings
      */
     if (!empty($data['algoliasearch_reindex_all'])) {
         $process = $event->getProcess();
         $process->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
     } else {
         /*
          * Clear indexer for the deleted category including all children categories and update index for the related products.
          */
         if (!empty($data['catalogsearch_delete_category_id'])) {
             $categoryIds = $data['catalogsearch_delete_category_id'];
             $this->engine->removeCategories(null, $categoryIds);
             /*
              * Change indexer status as need to reindex related products to update the list of categories.
              * It's low priority so no need to automatically reindex all related products after deleting each category.
              * Do not reindex all if affected products are given or product count is not indexed.
              */
             if (!isset($data['catalogsearch_update_product_id'])) {
                 $process = $event->getProcess();
                 $process->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
             }
         }
     }
     /*
      * Reindex categories.
      * Category products are tracked separately. The specified categories are active. See _registerCatalogCategoryEvent().
      */
     if (!empty($data['catalogsearch_update_category_id'])) {
         $this->reindexSpecificCategories($data['catalogsearch_update_category_id']);
     }
     /*
      * If we have added any new products to a category then we need to
      * update these products in Algolia indices.
      */
     if (!empty($data['catalogsearch_update_product_id'])) {
         $this->reindexSpecificProducts($data['catalogsearch_update_product_id']);
     }
 }
Example #20
0
 /**
  * @test
  */
 public function testCatalogProductSaveAfterMassAction()
 {
     $this->_fpc->save('product1', 'product1_cache_id', array(sha1('product_1')));
     $this->_fpc->save('product2', 'product2_cache_id', array(sha1('product_2')));
     $this->_fpc->save('product3', 'product3_cache_id', array(sha1('product_3')));
     $event = new Mage_Index_Model_Event();
     $productAction = new Mage_Catalog_Model_Product_Action();
     $productAction->setProductIds(array(2, 3));
     $event->setType('mass_action');
     $event->setEntity('catalog_product');
     $event->setDataObject($productAction);
     Mage::dispatchEvent('model_save_after', array('object' => $event));
     $this->assertEquals('product1', $this->_fpc->load('product1_cache_id'));
     $this->assertFalse($this->_fpc->load('product2_cache_id'));
     $this->assertFalse($this->_fpc->load('product3_cache_id'));
 }
 /**
  * @param Mana_Seo_Model_UrlIndexer $indexer
  * @param Mage_Index_Model_Event $event
  */
 public function register($indexer, $event)
 {
     $db = $this->_getReadAdapter();
     if ($event->getEntity() == 'mana_filters/filter2') {
         if ($event->getData('data_object')->getType() == 'category') {
             $event->addNewData('process_category_filter', true);
         }
     } elseif ($event->getEntity() == 'mana_filters/filter2_store') {
         $attributeType = $db->fetchOne($db->select()->from(array('f' => $this->getTable('mana_filters/filter2')), 'type')->where('f.id = ?', $event->getData('data_object')->getGlobalId()));
         if ($attributeType == 'category') {
             $event->addNewData('process_category_filter', true);
         }
     }
 }
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     if (!$this->config->getApplicationID() || !$this->config->getAPIKey() || !$this->config->getSearchOnlyAPIKey()) {
         if (self::$credential_error === false) {
             Mage::getSingleton('adminhtml/session')->addError('Algolia indexing failed: You need to configure your Algolia credentials in System > Configuration > Algolia Search.');
             self::$credential_error = true;
         }
         return;
     }
     $data = $event->getNewData();
     /*
      * Reindex all products and all categories and update index settings
      */
     if (!empty($data['algoliasearch_reindex_all'])) {
         $process = $event->getProcess();
         $process->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
     } else {
         if (!empty($data['catalogsearch_delete_category_id'])) {
             $categoryIds = $data['catalogsearch_delete_category_id'];
             $this->engine->removeCategories(null, $categoryIds);
             /*
              * Change indexer status as need to reindex related products to update the list of categories.
              * It's low priority so no need to automatically reindex all related products after deleting each category.
              * Do not reindex all if affected products are given or product count is not indexed.
              */
             if (!isset($data['catalogsearch_update_product_id'])) {
                 $process = $event->getProcess();
                 $process->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
             }
         }
     }
     /*
      * Reindex categories.
      * Category products are tracked separately. The specified categories are active. See _registerCatalogCategoryEvent().
      */
     if (!empty($data['catalogsearch_update_category_id'])) {
         $updateCategoryIds = $data['catalogsearch_update_category_id'];
         $updateCategoryIds = is_array($updateCategoryIds) ? $updateCategoryIds : array($updateCategoryIds);
         foreach ($updateCategoryIds as $id) {
             $categories = Mage::getModel('catalog/category')->getCategories($id);
             foreach ($categories as $category) {
                 $updateCategoryIds[] = $category->getId();
             }
         }
         $this->engine->rebuildCategoryIndex(null, $updateCategoryIds);
     }
 }
Example #23
0
 /**
  * Register data required by product type process in event object
  *
  * @param Mage_Index_Model_Event $event
  */
 public function registerEvent(Mage_Index_Model_Event $event)
 {
     $attributes = array('allow_open_amount', 'open_amount_min', 'open_amount_max');
     $entity = $event->getEntity();
     if ($entity == Mage_Catalog_Model_Product::ENTITY) {
         switch ($event->getType()) {
             case Mage_Index_Model_Event::TYPE_SAVE:
                 /* @var $product Mage_Catalog_Model_Product */
                 $product = $event->getDataObject();
                 $reindexPrice = $product->getAmountsHasChanged();
                 foreach ($attributes as $code) {
                     if ($product->dataHasChangedFor($code)) {
                         $reindexPrice = true;
                         break;
                     }
                 }
                 if ($reindexPrice) {
                     $event->addNewData('product_type_id', $product->getTypeId());
                     $event->addNewData('reindex_price', 1);
                 }
                 break;
             case Mage_Index_Model_Event::TYPE_MASS_ACTION:
                 /* @var $actionObject Varien_Object */
                 $actionObject = $event->getDataObject();
                 $reindexPrice = false;
                 // check if attributes changed
                 $attrData = $actionObject->getAttributesData();
                 if (is_array($attrData)) {
                     foreach ($attributes as $code) {
                         if (array_key_exists($code, $attrData)) {
                             $reindexPrice = true;
                             break;
                         }
                     }
                 }
                 if ($reindexPrice) {
                     $event->addNewData('reindex_price_product_ids', $actionObject->getProductIds());
                 }
                 break;
         }
     }
 }
Example #24
0
 public function registerFulltextIndexerEvent(Mage_CatalogSearch_Model_Indexer_Fulltext $indexer, Mage_Index_Model_Event $event)
 {
     switch ($event->getType()) {
         case Mage_Index_Model_Event::TYPE_SAVE:
             $page = $event->getDataObject();
             $event->addNewData('catalogsearch_update_cms_page_id', $page->getId());
             break;
         case Mage_Index_Model_Event::TYPE_DELETE:
             $page = $event->getDataObject();
             $event->addNewData('catalogsearch_delete_cms_page_id', $page->getId());
             break;
     }
     return $indexer;
 }
Example #25
0
 /**
  * Process product mass update action
  *
  * @param Mage_Index_Model_Event $event
  * @return Mage_CatalogInventory_Model_Resource_Indexer_Stock
  */
 public function catalogProductMassAction(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (empty($data['reindex_stock_product_ids'])) {
         return $this;
     }
     $adapter = $this->_getWriteAdapter();
     $processIds = $data['reindex_stock_product_ids'];
     $select = $adapter->select()->from($this->getTable('catalog/product'), 'COUNT(*)');
     $pCount = $adapter->fetchOne($select);
     // if affected more 30% of all products - run reindex all products
     if ($pCount * 0.3 < count($processIds)) {
         return $this->reindexAll();
     }
     // calculate relations
     $select = $adapter->select()->from($this->getTable('catalog/product_relation'), 'COUNT(DISTINCT parent_id)')->where('child_id IN(?)', $processIds);
     $aCount = $adapter->fetchOne($select);
     $select = $adapter->select()->from($this->getTable('catalog/product_relation'), 'COUNT(DISTINCT child_id)')->where('parent_id IN(?)', $processIds);
     $bCount = $adapter->fetchOne($select);
     // if affected with relations more 30% of all products - run reindex all products
     if ($pCount * 0.3 < count($processIds) + $aCount + $bCount) {
         return $this->reindexAll();
     }
     // retrieve affected parent relation products
     $parentIds = $this->getRelationsByChild($processIds);
     if ($parentIds) {
         $processIds = array_merge($processIds, $parentIds);
     }
     // retrieve products types
     $select = $adapter->select()->from($this->getTable('catalog/product'), array('entity_id', 'type_id'))->where('entity_id IN(?)', $processIds);
     $query = $select->query(Zend_Db::FETCH_ASSOC);
     $byType = array();
     while ($row = $query->fetch()) {
         $byType[$row['type_id']][] = $row['entity_id'];
     }
     $adapter->beginTransaction();
     try {
         $indexers = $this->_getTypeIndexers();
         foreach ($indexers as $indexer) {
             if (!empty($byType[$indexer->getTypeId()])) {
                 $indexer->reindexEntity($byType[$indexer->getTypeId()]);
             }
         }
     } catch (Exception $e) {
         $adapter->rollback();
         throw $e;
     }
     $adapter->commit();
     return $this;
 }
Example #26
0
 /**
  * Process product mass update action
  *
  * @param Mage_Index_Model_Event $event
  * @return Mage_Catalog_Model_Resource_Product_Indexer_Price
  */
 public function catalogProductMassAction(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (empty($data['reindex_price_product_ids'])) {
         return $this;
     }
     $processIds = $data['reindex_price_product_ids'];
     $write = $this->_getWriteAdapter();
     $select = $write->select()->from($this->getTable('catalog/product'), 'COUNT(*)');
     $pCount = $write->fetchOne($select);
     // if affected more 30% of all products - run reindex all products
     if ($pCount * 0.3 < count($processIds)) {
         return $this->reindexAll();
     }
     // calculate relations
     $select = $write->select()->from($this->getTable('catalog/product_relation'), 'COUNT(DISTINCT parent_id)')->where('child_id IN(?)', $processIds);
     $aCount = $write->fetchOne($select);
     $select = $write->select()->from($this->getTable('catalog/product_relation'), 'COUNT(DISTINCT child_id)')->where('parent_id IN(?)', $processIds);
     $bCount = $write->fetchOne($select);
     // if affected with relations more 30% of all products - run reindex all products
     if ($pCount * 0.3 < count($processIds) + $aCount + $bCount) {
         return $this->reindexAll();
     }
     $this->reindexProductIds($processIds);
     return $this;
 }
Example #27
0
 /**
  * Process event
  *
  * @param Mage_Index_Model_Event $event
  */
 protected function _processEvent(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (!empty($data['catalog_url_reindex_all'])) {
         $this->reindexAll();
     }
     /* @var $urlModel Mage_Catalog_Model_Url */
     $urlModel = Mage::getSingleton('catalog/url');
     // Force rewrites history saving
     $dataObject = $event->getDataObject();
     if ($dataObject instanceof Varien_Object && $dataObject->hasData('save_rewrites_history')) {
         $urlModel->setShouldSaveRewritesHistory($dataObject->getData('save_rewrites_history'));
     }
     if (isset($data['rewrite_product_ids'])) {
         $urlModel->clearStoreInvalidRewrites();
         // Maybe some products were moved or removed from website
         foreach ($data['rewrite_product_ids'] as $productId) {
             $urlModel->refreshProductRewrite($productId);
         }
     }
     if (isset($data['rewrite_category_ids'])) {
         $urlModel->clearStoreInvalidRewrites();
         // Maybe some categories were moved
         foreach ($data['rewrite_category_ids'] as $categoryId) {
             $urlModel->refreshCategoryRewrite($categoryId);
         }
     }
 }
Example #28
0
 /**
  * Try dynamicly detect and call event hanler from resource model.
  * Handler name will be generated from event entity and type code
  *
  * @param   Mage_Index_Model_Event $event
  * @return  Mage_Index_Model_Indexer_Abstract
  */
 public function callEventHandler(Mage_Index_Model_Event $event)
 {
     if ($event->getEntity()) {
         $method = $this->_camelize($event->getEntity() . '_' . $event->getType());
     } else {
         $method = $this->_camelize($event->getType());
     }
     $resourceModel = $this->_getResource();
     if (method_exists($resourceModel, $method)) {
         $resourceModel->{$method}($event);
     }
     return $this;
 }
Example #29
0
 /**
  * Try dynamicly detect and call event hanler from resource model.
  * Handler name will be generated from event entity and type code
  *
  * @param   Mage_Index_Model_Event $event
  * @return  Mage_Index_Model_Indexer_Abstract
  */
 public function callEventHandler(Mage_Index_Model_Event $event)
 {
     if ($event->getEntity()) {
         $method = $event->getEntity() . '_' . $event->getType();
     } else {
         $method = $event->getType();
     }
     $method = str_replace(' ', '', ucwords(str_replace('_', ' ', $method)));
     $resourceModel = $this->_getResource();
     if (method_exists($resourceModel, $method)) {
         $resourceModel->{$method}($event);
     }
     return $this;
 }
Example #30
0
 /**
  * Process product massaction
  *
  * @param Mage_Index_Model_Event $event
  * @return Mage_Tag_Model_Resource_Indexer_Summary
  */
 public function catalogProductMassAction(Mage_Index_Model_Event $event)
 {
     $data = $event->getNewData();
     if (empty($data['tag_reindex_tag_ids'])) {
         return $this;
     }
     return $this->aggregate($data['tag_reindex_tag_ids']);
 }