protected function _registerCatalogCategoryEvent(Mage_Index_Model_Event $event)
{
switch ($event->getType()) {
case Mage_Index_Model_Event::TYPE_SAVE:
/** @var Mage_Catalog_Model_Category $category*/
$category = $event->getDataObject();
$productIds = array();
if ($this->config->indexAllCategoryProductsOnCategoryUpdate()) {
$categories = array_merge(array($category->getId()), $category->getAllChildren(true));
$collection = Mage::getResourceModel('catalog/product_collection');
$collection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left');
$collection->addAttributeToFilter('category_id', array('in' => $categories));
$productIds = $collection->getAllIds();
} elseif ($this->config->indexProductOnCategoryProductsUpdate()) {
$productIds = $category->getAffectedProductIds();
}
if (!$category->getData('is_active')) {
$categories = array_merge(array($category->getId()), $category->getAllChildren(true));
$event->addNewData('catalogsearch_delete_category_id', $categories);
if ($productIds) {
$event->addNewData('catalogsearch_update_product_id', $productIds);
}
} elseif ($productIds) {
$event->addNewData('catalogsearch_update_product_id', $productIds);
$event->addNewData('catalogsearch_update_category_id', array($category->getId()));
} elseif ($movedCategoryId = $category->getMovedCategoryId()) {
$event->addNewData('catalogsearch_update_category_id', array($movedCategoryId));
} else {
$event->addNewData('catalogsearch_update_category_id', array($category->getId()));
}
break;
case Mage_Index_Model_Event::TYPE_DELETE:
/** @var $category Mage_Catalog_Model_Category */
$category = $event->getDataObject();
$event->addNewData('catalogsearch_delete_category_id', $category->getId());
break;
}
return $this;
}