Overview

Packages

  • currencysymbol
  • MAbout
  • Mage
    • Admin
    • Adminhtml
    • AdminNotification
    • Api
    • Api2
    • Authorizenet
    • Backup
    • Bundle
    • Captcha
    • Catalog
    • CatalogIndex
    • CatalogInventory
    • CatalogRule
    • CatalogSearch
    • Centinel
    • Checkout
    • Cms
    • Compiler
    • Connect
    • Contacts
    • Core
    • Cron
    • CurrencySymbol
    • Customer
    • Dataflow
    • Directory
    • DirtectPost
    • Downloadable
    • Eav
    • GiftMessage
    • GoogleAnalytics
    • GoogleBase
    • GoogleCheckout
    • ImportExport
    • Index
    • Install
    • Log
    • Media
    • Newsletter
    • Oauth
    • Page
    • PageCache
    • Paygate
    • Payment
    • Paypal
    • PaypalUk
    • Persistent
    • Poll
    • ProductAlert
    • Rating
    • Reports
    • Review
    • Rss
    • Rule
    • Sales
    • SalesRule
    • Sedfriend
    • Sendfriend
    • Shipping
    • Sitemap
    • Tag
    • Tax
    • Usa
    • Weee
    • Widget
    • Wishlist
    • XmlConnect
  • None
  • Phoenix
    • Moneybookers
  • PHP
  • Zend
    • Date
    • Mime
    • XmlRpc

Classes

  • Mage_CatalogIndex_Model_Aggregation
  • Mage_CatalogIndex_Model_Attribute
  • Mage_CatalogIndex_Model_Catalog_Index_Flag
  • Mage_CatalogIndex_Model_Catalog_Index_Kill_Flag
  • Mage_CatalogIndex_Model_Data_Abstract
  • Mage_CatalogIndex_Model_Data_Configurable
  • Mage_CatalogIndex_Model_Data_Grouped
  • Mage_CatalogIndex_Model_Data_Simple
  • Mage_CatalogIndex_Model_Data_Virtual
  • Mage_CatalogIndex_Model_Indexer
  • Mage_CatalogIndex_Model_Indexer_Abstract
  • Mage_CatalogIndex_Model_Indexer_Eav
  • Mage_CatalogIndex_Model_Indexer_Minimalprice
  • Mage_CatalogIndex_Model_Indexer_Price
  • Mage_CatalogIndex_Model_Indexer_Tierprice
  • Mage_CatalogIndex_Model_Mysql4_Abstract
  • Mage_CatalogIndex_Model_Mysql4_Aggregation
  • Mage_CatalogIndex_Model_Mysql4_Attribute
  • Mage_CatalogIndex_Model_Mysql4_Data_Abstract
  • Mage_CatalogIndex_Model_Mysql4_Data_Configurable
  • Mage_CatalogIndex_Model_Mysql4_Data_Grouped
  • Mage_CatalogIndex_Model_Mysql4_Indexer
  • Mage_CatalogIndex_Model_Mysql4_Indexer_Abstract
  • Mage_CatalogIndex_Model_Mysql4_Indexer_Eav
  • Mage_CatalogIndex_Model_Mysql4_Indexer_Minimalprice
  • Mage_CatalogIndex_Model_Mysql4_Indexer_Price
  • Mage_CatalogIndex_Model_Mysql4_Price
  • Mage_CatalogIndex_Model_Mysql4_Retreiver
  • Mage_CatalogIndex_Model_Mysql4_Setup
  • Mage_CatalogIndex_Model_Observer
  • Mage_CatalogIndex_Model_Price
  • Mage_CatalogIndex_Model_Resource_Abstract
  • Mage_CatalogIndex_Model_Resource_Aggregation
  • Mage_CatalogIndex_Model_Resource_Attribute
  • Mage_CatalogIndex_Model_Resource_Data_Abstract
  • Mage_CatalogIndex_Model_Resource_Data_Configurable
  • Mage_CatalogIndex_Model_Resource_Data_Grouped
  • Mage_CatalogIndex_Model_Resource_Indexer
  • Mage_CatalogIndex_Model_Resource_Indexer_Abstract
  • Mage_CatalogIndex_Model_Resource_Indexer_Eav
  • Mage_CatalogIndex_Model_Resource_Indexer_Minimalprice
  • Mage_CatalogIndex_Model_Resource_Indexer_Price
  • Mage_CatalogIndex_Model_Resource_Price
  • Mage_CatalogIndex_Model_Resource_Retreiver
  • Mage_CatalogIndex_Model_Resource_Setup
  • Mage_CatalogIndex_Model_Retreiver

Interfaces

  • Mage_CatalogIndex_Model_Indexer_Interface
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Magento
  4:  *
  5:  * NOTICE OF LICENSE
  6:  *
  7:  * This source file is subject to the Open Software License (OSL 3.0)
  8:  * that is bundled with this package in the file LICENSE.txt.
  9:  * It is also available through the world-wide-web at this URL:
 10:  * http://opensource.org/licenses/osl-3.0.php
 11:  * If you did not receive a copy of the license and are unable to
 12:  * obtain it through the world-wide-web, please send an email
 13:  * to license@magentocommerce.com so we can send you a copy immediately.
 14:  *
 15:  * DISCLAIMER
 16:  *
 17:  * Do not edit or add to this file if you wish to upgrade Magento to newer
 18:  * versions in the future. If you wish to customize Magento for your
 19:  * needs please refer to http://www.magentocommerce.com for more information.
 20:  *
 21:  * @category    Mage
 22:  * @package     Mage_CatalogIndex
 23:  * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 24:  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 25:  */
 26: 
 27: 
 28: /**
 29:  * Event observer and indexer running application
 30:  *
 31:  * @author      Magento Core Team <core@magentocommerce.com>
 32:  */
 33: class Mage_CatalogIndex_Model_Observer extends Mage_Core_Model_Abstract
 34: {
 35:     protected $_parentProductIds = array();
 36:     protected $_productIdsMassupdate = array();
 37: 
 38:     protected function _construct() {}
 39: 
 40:     /**
 41:      * Get indexer object
 42:      *
 43:      * @return Mage_CatalogIndex_Model_Indexer
 44:      */
 45:     protected function _getIndexer()
 46:     {
 47:         return Mage::getSingleton('catalogindex/indexer');
 48:     }
 49: 
 50:     /**
 51:      * Get aggregation object
 52:      *
 53:      * @return Mage_CatalogIndex_Model_Aggregation
 54:      */
 55:     protected function _getAggregator()
 56:     {
 57:         return Mage::getSingleton('catalogindex/aggregation');
 58:     }
 59: 
 60:     /**
 61:      * Reindex all catalog data
 62:      *
 63:      * @return Mage_CatalogIndex_Model_Observer
 64:      */
 65:     public function reindexAll()
 66:     {
 67:         $this->_getIndexer()->plainReindex();
 68:         $this->_getAggregator()->clearCacheData();
 69:         return $this;
 70:     }
 71: 
 72:     /**
 73:      * Reindex daily related data (prices)
 74:      *
 75:      * @return Mage_CatalogIndex_Model_Observer
 76:      */
 77:     public function reindexDaily()
 78:     {
 79:         $this->_getIndexer()->plainReindex(
 80:             null,
 81:             Mage_CatalogIndex_Model_Indexer::REINDEX_TYPE_PRICE
 82:         );
 83:         $this->clearPriceAggregation();
 84:         return $this;
 85:     }
 86: 
 87:     /**
 88:      * Process product after save
 89:      *
 90:      * @param   Varien_Event_Observer $observer
 91:      * @return  Mage_CatalogIndex_Model_Observer
 92:      */
 93:     public function processAfterSaveEvent(Varien_Event_Observer $observer)
 94:     {
 95:         $productIds = array();
 96:         $eventProduct = $observer->getEvent()->getProduct();
 97:         $productIds[] = $eventProduct->getId();
 98: 
 99:         if (!$eventProduct->getIsMassupdate()) {
100:             $this->_getIndexer()->plainReindex($eventProduct);
101:         } else {
102:             $this->_productIdsMassupdate[] = $eventProduct->getId();
103:         }
104: 
105:         $eventProduct->loadParentProductIds();
106:         $parentProductIds = $eventProduct->getParentProductIds();
107:         if ($parentProductIds && !$eventProduct->getIsMassupdate()) {
108:             $this->_getIndexer()->plainReindex($parentProductIds);
109:         } elseif ($parentProductIds) {
110:             $this->_productIdsMassupdate = array_merge($this->_productIdsMassupdate, $parentProductIds);
111:             $productIds = array_merge($productIds, $parentProductIds);
112:         }
113:         $this->_getAggregator()->clearProductData($productIds);
114:         return $this;
115:     }
116: 
117:     /**
118:      * Reindex price data after attribute scope change
119:      *
120:      * @param   Varien_Event_Observer $observer
121:      * @return  Mage_CatalogIndex_Model_Observer
122:      */
123:     public function processPriceScopeChange(Varien_Event_Observer $observer)
124:     {
125:         $configOption   = $observer->getEvent()->getOption();
126:         if ($configOption->isValueChanged()) {
127:             $this->_getIndexer()->plainReindex(
128:                 null,
129:                 Mage_CatalogIndex_Model_Indexer::REINDEX_TYPE_PRICE
130:             );
131:             $this->clearPriceAggregation();
132:         }
133:         return $this;
134:     }
135: 
136:     /**
137:      * Process catalog index after price rules were applied
138:      *
139:      * @param   Varien_Event_Observer $observer
140:      * @return  Mage_CatalogIndex_Model_Observer
141:      */
142:     public function processPriceRuleApplication(Varien_Event_Observer $observer)
143:     {
144:         $eventProduct = $observer->getEvent()->getProduct();
145:         $productCondition = $observer->getEvent()->getProductCondition();
146:         if ($productCondition) {
147:             $eventProduct = $productCondition;
148:         }
149:         $this->_getIndexer()->plainReindex(
150:             $eventProduct,
151:             Mage_CatalogIndex_Model_Indexer::REINDEX_TYPE_PRICE
152:         );
153: 
154:         $this->clearPriceAggregation();
155:         return $this;
156:     }
157: 
158:     /**
159:      * Cleanup product index after product delete
160:      *
161:      * @param   Varien_Event_Observer $observer
162:      * @return  Mage_CatalogIndex_Model_Observer
163:      */
164:     public function processAfterDeleteEvent(Varien_Event_Observer $observer)
165:     {
166:         $eventProduct = $observer->getEvent()->getProduct();
167:         $eventProduct->setNeedStoreForReindex(true);
168:         $this->_getIndexer()->cleanup($eventProduct);
169:         $parentProductIds = $eventProduct->getParentProductIds();
170: 
171:         if ($parentProductIds) {
172:             $this->_getIndexer()->plainReindex($parentProductIds);
173:         }
174:         return $this;
175:     }
176: 
177:     /**
178:      * Process index data after attribute information was changed
179:      *
180:      * @param   Varien_Event_Observer $observer
181:      * @return  Mage_CatalogIndex_Model_Observer
182:      */
183:     public function processAttributeChangeEvent(Varien_Event_Observer $observer)
184:     {
185:         /**
186:          * @todo add flag to attribute model which will notify what options was changed
187:          */
188:         $attribute = $observer->getEvent()->getAttribute();
189:         $tags = array(
190:             Mage_Eav_Model_Entity_Attribute::CACHE_TAG.':'.$attribute->getId()
191:         );
192: 
193:         if ($attribute->getOrigData('is_filterable') != $attribute->getIsFilterable()) {
194:             if ($attribute->getIsFilterable() != 0) {
195:                 $this->_getIndexer()->plainReindex(null, $attribute);
196:             } else {
197:                 $this->_getAggregator()->clearCacheData($tags);
198:             }
199:         } elseif ($attribute->getIsFilterable()) {
200:             $this->_getAggregator()->clearCacheData($tags);
201:         }
202: 
203:         return $this;
204:     }
205: 
206:     /**
207:      * Create index for new store
208:      *
209:      * @param   Varien_Event_Observer $observer
210:      * @return  Mage_CatalogIndex_Model_Observer
211:      */
212:     public function processStoreAdd(Varien_Event_Observer $observer)
213:     {
214:         $store = $observer->getEvent()->getStore();
215:         $this->_getIndexer()->plainReindex(null, null, $store);
216:         return $this;
217:     }
218: 
219:     /**
220:      * Rebuild index after catalog import
221:      *
222:      * @param   Varien_Event_Observer $observer
223:      * @return  Mage_CatalogIndex_Model_Observer
224:      */
225:     public function catalogProductImportAfter(Varien_Event_Observer $observer)
226:     {
227:         $this->_getIndexer()->plainReindex();
228:         $this->_getAggregator()->clearCacheData();
229:         return $this;
230:     }
231: 
232:     /**
233:      * Run planed reindex
234:      *
235:      * @return Mage_CatalogIndex_Model_Observer
236:      */
237:     public function runQueuedIndexing()
238:     {
239:         $flag = Mage::getModel('catalogindex/catalog_index_flag')->loadSelf();
240:         if ($flag->getState() == Mage_CatalogIndex_Model_Catalog_Index_Flag::STATE_QUEUED) {
241:             $this->_getIndexer()->plainReindex();
242:             $this->_getAggregator()->clearCacheData();
243:         }
244:         return $this;
245:     }
246: 
247:     /**
248:      * Clear aggregated layered navigation data
249:      *
250:      * @param   Varien_Event_Observer $observer
251:      * @return  Mage_CatalogIndex_Model_Observer
252:      */
253:     public function cleanCache(Varien_Event_Observer $observer)
254:     {
255:         $tagsArray = $observer->getEvent()->getTags();
256:         $tagName = Mage_CatalogIndex_Model_Aggregation::CACHE_FLAG_NAME;
257: 
258:         if (empty($tagsArray) || in_array($tagName, $tagsArray)) {
259:             $this->_getAggregator()->clearCacheData();
260:         }
261:         return $this;
262:     }
263: 
264:     /**
265:      * Process index data after category save
266:      *
267:      * @param   Varien_Event_Observer $observer
268:      * @return  Mage_CatalogIndex_Model_Observer
269:      */
270:     public function catalogCategorySaveAfter(Varien_Event_Observer $observer)
271:     {
272:         $category = $observer->getEvent()->getCategory();
273:         if ($category->getInitialSetupFlag()) {
274:             return $this;
275:         }
276:         $tags = array(
277:             Mage_Catalog_Model_Category::CACHE_TAG.':'.$category->getPath()
278:         );
279:         $this->_getAggregator()->clearCacheData($tags);
280:         return $this;
281:     }
282: 
283:     /**
284:      * Delete price aggreagation data
285:      *
286:      * @return Mage_CatalogIndex_Model_Observer
287:      */
288:     public function clearPriceAggregation()
289:     {
290:         $this->_getAggregator()->clearCacheData(array(
291:             Mage_Catalog_Model_Product_Type_Price::CACHE_TAG
292:         ));
293:         return $this;
294:     }
295: 
296:     /**
297:      * Clear layer navigation cache for search results
298:      *
299:      * @return Mage_CatalogIndex_Model_Observer
300:      */
301:     public function clearSearchLayerCache()
302:     {
303:         $this->_getAggregator()->clearCacheData(array(
304:             Mage_CatalogSearch_Model_Query::CACHE_TAG
305:         ));
306:         return $this;
307:     }
308: 
309:     /**
310:      * Load parent ids for products before deleting
311:      *
312:      * @param   Varien_Event_Observer $observer
313:      * @return  Mage_CatalogIndex_Model_Observer
314:      */
315:     public function registerParentIds(Varien_Event_Observer $observer)
316:     {
317:         $product = $observer->getEvent()->getProduct();
318:         $product->loadParentProductIds();
319:         $productIds = array($product->getId());
320:         $productIds = array_merge($productIds, $product->getParentProductIds());
321:         $this->_getAggregator()->clearProductData($productIds);
322:         return $this;
323:     }
324: 
325:     /**
326:      * Reindex producs after change websites associations
327:      *
328:      * @param   Varien_Event_Observer $observer
329:      * @return  Mage_CatalogIndex_Model_Observer
330:      */
331:     public function processProductsWebsitesChange(Varien_Event_Observer $observer)
332:     {
333:         $productIds = $observer->getEvent()->getProducts();
334:         $this->_getIndexer()->plainReindex($productIds);
335:         $this->_getAggregator()->clearProductData($productIds);
336:         return $this;
337:     }
338: 
339:     /**
340:      * Prepare columns for catalog product flat
341:      *
342:      * @param Varien_Event_Observer $observer
343:      * @return Mage_CatalogIndex_Model_Observer
344:      */
345:     public function catalogProductFlatPrepareColumns(Varien_Event_Observer $observer)
346:     {
347:         $columns = $observer->getEvent()->getColumns();
348: 
349:         $this->_getIndexer()->prepareCatalogProductFlatColumns($columns);
350: 
351:         return $this;
352:     }
353: 
354:     /**
355:      * Prepare indexes for catalog product flat
356:      *
357:      * @param Varien_Event_Observer $observer
358:      * @return Mage_CatalogIndex_Model_Observer
359:      */
360:     public function catalogProductFlatPrepareIndexes(Varien_Event_Observer $observer)
361:     {
362:         $indexes = $observer->getEvent()->getIndexes();
363: 
364:         $this->_getIndexer()->prepareCatalogProductFlatIndexes($indexes);
365: 
366:         return $this;
367:     }
368: 
369:     /**
370:      * Rebuild catalog product flat
371:      *
372:      * @param Varien_Event_Observer $observer
373:      * @return Mage_CatalogIndex_Model_Observer
374:      */
375:     public function catalogProductFlatRebuild(Varien_Event_Observer $observer)
376:     {
377:         $storeId    = $observer->getEvent()->getStoreId();
378:         $tableName  = $observer->getEvent()->getTable();
379: 
380:         $this->_getIndexer()->updateCatalogProductFlat($storeId, null, $tableName);
381: 
382:         return $this;
383:     }
384: 
385:     /**
386:      * Catalog Product Flat update product(s)
387:      *
388:      * @param Varien_Event_Observer $observer
389:      * @return Mage_CatalogIndex_Model_Observer
390:      */
391:     public function catalogProductFlatUpdateProduct(Varien_Event_Observer $observer)
392:     {
393:         $storeId    = $observer->getEvent()->getStoreId();
394:         $tableName  = $observer->getEvent()->getTable();
395:         $productIds = $observer->getEvent()->getProductIds();
396: 
397:         $this->_getIndexer()->updateCatalogProductFlat($storeId, $productIds, $tableName);
398: 
399:         return $this;
400:     }
401: }
402: 
Magento 1.7.0.2 API documentation generated by ApiGen 2.8.0