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_CatalogInventory_Block_Adminhtml_Form_Field_Customergroup
  • Mage_CatalogInventory_Block_Adminhtml_Form_Field_Minsaleqty
  • Mage_CatalogInventory_Block_Qtyincrements
  • Mage_CatalogInventory_Block_Stockqty_Abstract
  • Mage_CatalogInventory_Block_Stockqty_Composite
  • Mage_CatalogInventory_Block_Stockqty_Default
  • Mage_CatalogInventory_Block_Stockqty_Type_Configurable
  • Mage_CatalogInventory_Block_Stockqty_Type_Grouped
  • Mage_CatalogInventory_Helper_Data
  • Mage_CatalogInventory_Helper_Minsaleqty
  • Mage_CatalogInventory_Model_Api2_Stock_Item
  • Mage_CatalogInventory_Model_Api2_Stock_Item_Rest
  • Mage_CatalogInventory_Model_Api2_Stock_Item_Rest_Admin_V1
  • Mage_CatalogInventory_Model_Api2_Stock_Item_Validator_Item
  • Mage_CatalogInventory_Model_Indexer_Stock
  • Mage_CatalogInventory_Model_Mysql4_Indexer_Stock
  • Mage_CatalogInventory_Model_Mysql4_Indexer_Stock_Configurable
  • Mage_CatalogInventory_Model_Mysql4_Indexer_Stock_Default
  • Mage_CatalogInventory_Model_Mysql4_Indexer_Stock_Grouped
  • Mage_CatalogInventory_Model_Mysql4_Stock
  • Mage_CatalogInventory_Model_Mysql4_Stock_Item
  • Mage_CatalogInventory_Model_Mysql4_Stock_Item_Collection
  • Mage_CatalogInventory_Model_Mysql4_Stock_Status
  • Mage_CatalogInventory_Model_Observer
  • Mage_CatalogInventory_Model_Resource_Indexer_Stock
  • Mage_CatalogInventory_Model_Resource_Indexer_Stock_Configurable
  • Mage_CatalogInventory_Model_Resource_Indexer_Stock_Default
  • Mage_CatalogInventory_Model_Resource_Indexer_Stock_Grouped
  • Mage_CatalogInventory_Model_Resource_Stock
  • Mage_CatalogInventory_Model_Resource_Stock_Item
  • Mage_CatalogInventory_Model_Resource_Stock_Item_Collection
  • Mage_CatalogInventory_Model_Resource_Stock_Status
  • Mage_CatalogInventory_Model_Source_Backorders
  • Mage_CatalogInventory_Model_Source_Stock
  • Mage_CatalogInventory_Model_Stock
  • Mage_CatalogInventory_Model_Stock_Item
  • Mage_CatalogInventory_Model_Stock_Item_Api
  • Mage_CatalogInventory_Model_Stock_Item_Api_V2
  • Mage_CatalogInventory_Model_Stock_Status
  • Mage_CatalogInventory_Model_System_Config_Backend_Minqty
  • Mage_CatalogInventory_Model_System_Config_Backend_Minsaleqty
  • Mage_CatalogInventory_Model_System_Config_Backend_Qtyincrements

Interfaces

  • Mage_CatalogInventory_Model_Mysql4_Indexer_Stock_Interface
  • Mage_CatalogInventory_Model_Resource_Indexer_Stock_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_CatalogInventory
 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:  * CatalogInventory Stock Status Indexer Model
 30:  *
 31:  * @method Mage_CatalogInventory_Model_Resource_Indexer_Stock _getResource()
 32:  * @method Mage_CatalogInventory_Model_Resource_Indexer_Stock getResource()
 33:  * @method int getProductId()
 34:  * @method Mage_CatalogInventory_Model_Indexer_Stock setProductId(int $value)
 35:  * @method int getWebsiteId()
 36:  * @method Mage_CatalogInventory_Model_Indexer_Stock setWebsiteId(int $value)
 37:  * @method int getStockId()
 38:  * @method Mage_CatalogInventory_Model_Indexer_Stock setStockId(int $value)
 39:  * @method float getQty()
 40:  * @method Mage_CatalogInventory_Model_Indexer_Stock setQty(float $value)
 41:  * @method int getStockStatus()
 42:  * @method Mage_CatalogInventory_Model_Indexer_Stock setStockStatus(int $value)
 43:  *
 44:  * @category    Mage
 45:  * @package     Mage_CatalogInventory
 46:  * @author      Magento Core Team <core@magentocommerce.com>
 47:  */
 48: class Mage_CatalogInventory_Model_Indexer_Stock extends Mage_Index_Model_Indexer_Abstract
 49: {
 50:     /**
 51:      * Data key for matching result to be saved in
 52:      */
 53:     const EVENT_MATCH_RESULT_KEY = 'cataloginventory_stock_match_result';
 54: 
 55:     /**
 56:      * @var array
 57:      */
 58:     protected $_matchedEntities = array(
 59:         Mage_CatalogInventory_Model_Stock_Item::ENTITY => array(
 60:             Mage_Index_Model_Event::TYPE_SAVE
 61:         ),
 62:         Mage_Catalog_Model_Product::ENTITY => array(
 63:             Mage_Index_Model_Event::TYPE_SAVE,
 64:             Mage_Index_Model_Event::TYPE_MASS_ACTION,
 65:             Mage_Index_Model_Event::TYPE_DELETE
 66:         ),
 67:         Mage_Core_Model_Store::ENTITY => array(
 68:             Mage_Index_Model_Event::TYPE_SAVE
 69:         ),
 70:         Mage_Core_Model_Store_Group::ENTITY => array(
 71:             Mage_Index_Model_Event::TYPE_SAVE
 72:         ),
 73:         Mage_Core_Model_Config_Data::ENTITY => array(
 74:             Mage_Index_Model_Event::TYPE_SAVE
 75:         ),
 76:         Mage_Catalog_Model_Convert_Adapter_Product::ENTITY => array(
 77:             Mage_Index_Model_Event::TYPE_SAVE
 78:         )
 79:     );
 80: 
 81:     /**
 82:      * Related config settings
 83:      *
 84:      * @var array
 85:      */
 86:     protected $_relatedConfigSettings = array(
 87:         Mage_CatalogInventory_Model_Stock_Item::XML_PATH_MANAGE_STOCK,
 88:         Mage_CatalogInventory_Helper_Data::XML_PATH_SHOW_OUT_OF_STOCK
 89:     );
 90: 
 91:     /**
 92:      * Initialize resource model
 93:      *
 94:      */
 95:     protected function _construct()
 96:     {
 97:         $this->_init('cataloginventory/indexer_stock');
 98:     }
 99: 
100:     /**
101:      * Retrieve resource instance wrapper
102:      *
103:      * @return Mage_CatalogInventory_Model_Mysql4_Indexer_Stock
104:      */
105:     protected function _getResource()
106:     {
107:         return parent::_getResource();
108:     }
109: 
110:     /**
111:      * Retrieve Indexer name
112:      *
113:      * @return string
114:      */
115:     public function getName()
116:     {
117:         return Mage::helper('cataloginventory')->__('Stock Status');
118:     }
119: 
120:     /**
121:      * Retrieve Indexer description
122:      *
123:      * @return string
124:      */
125:     public function getDescription()
126:     {
127:         return Mage::helper('cataloginventory')->__('Index Product Stock Status');
128:     }
129: 
130:     /**
131:      * Check if event can be matched by process.
132:      * Overwrote for specific config save, store and store groups save matching
133:      *
134:      * @param Mage_Index_Model_Event $event
135:      * @return bool
136:      */
137:     public function matchEvent(Mage_Index_Model_Event $event)
138:     {
139:         $data       = $event->getNewData();
140:         if (isset($data[self::EVENT_MATCH_RESULT_KEY])) {
141:             return $data[self::EVENT_MATCH_RESULT_KEY];
142:         }
143: 
144:         $entity = $event->getEntity();
145:         if ($entity == Mage_Core_Model_Store::ENTITY) {
146:             /* @var $store Mage_Core_Model_Store */
147:             $store = $event->getDataObject();
148:             if ($store && $store->isObjectNew()) {
149:                 $result = true;
150:             } else {
151:                 $result = false;
152:             }
153:         } else if ($entity == Mage_Core_Model_Store_Group::ENTITY) {
154:             /* @var $storeGroup Mage_Core_Model_Store_Group */
155:             $storeGroup = $event->getDataObject();
156:             if ($storeGroup && $storeGroup->dataHasChangedFor('website_id')) {
157:                 $result = true;
158:             } else {
159:                 $result = false;
160:             }
161:         } else if ($entity == Mage_Core_Model_Config_Data::ENTITY) {
162:             $configData = $event->getDataObject();
163:             if ($configData && in_array($configData->getPath(), $this->_relatedConfigSettings)) {
164:                 $result = $configData->isValueChanged();
165:             } else {
166:                 $result = false;
167:             }
168:         } else {
169:             $result = parent::matchEvent($event);
170:         }
171: 
172:         $event->addNewData(self::EVENT_MATCH_RESULT_KEY, $result);
173: 
174:         return $result;
175:     }
176: 
177:     /**
178:      * Register data required by process in event object
179:      *
180:      * @param Mage_Index_Model_Event $event
181:      */
182:     protected function _registerEvent(Mage_Index_Model_Event $event)
183:     {
184:         $event->addNewData(self::EVENT_MATCH_RESULT_KEY, true);
185:         switch ($event->getEntity()) {
186:             case Mage_CatalogInventory_Model_Stock_Item::ENTITY:
187:                 $this->_registerCatalogInventoryStockItemEvent($event);
188:                 break;
189: 
190:             case Mage_Catalog_Model_Product::ENTITY:
191:                 $this->_registerCatalogProductEvent($event);
192:                 break;
193: 
194:             case Mage_Catalog_Model_Convert_Adapter_Product::ENTITY:
195:                 $event->addNewData('cataloginventory_stock_reindex_all', true);
196:                 break;
197: 
198:             case Mage_Core_Model_Store::ENTITY:
199:             case Mage_Core_Model_Store_Group::ENTITY:
200:             case Mage_Core_Model_Config_Data::ENTITY:
201:                 $event->addNewData('cataloginventory_stock_skip_call_event_handler', true);
202:                 $process = $event->getProcess();
203:                 $process->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
204: 
205:                 if ($event->getEntity() == Mage_Core_Model_Config_Data::ENTITY) {
206:                     $configData = $event->getDataObject();
207:                     if ($configData->getPath() == Mage_CatalogInventory_Helper_Data::XML_PATH_SHOW_OUT_OF_STOCK) {
208:                         Mage::getSingleton('index/indexer')->getProcessByCode('catalog_product_price')
209:                             ->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
210:                         Mage::getSingleton('index/indexer')->getProcessByCode('catalog_product_attribute')
211:                             ->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
212:                     }
213:                 }
214:                 break;
215:         }
216:     }
217: 
218:     /**
219:      * Register data required by catalog product processes in event object
220:      *
221:      * @param Mage_Index_Model_Event $event
222:      */
223:     protected function _registerCatalogProductEvent(Mage_Index_Model_Event $event)
224:     {
225:         switch ($event->getType()) {
226:             case Mage_Index_Model_Event::TYPE_SAVE:
227:                 $product = $event->getDataObject();
228:                 if ($product && $product->getStockData()) {
229:                     $product->setForceReindexRequired(true);
230:                 }
231:                 break;
232:             case Mage_Index_Model_Event::TYPE_MASS_ACTION:
233:                 $this->_registerCatalogProductMassActionEvent($event);
234:                 break;
235: 
236:             case Mage_Index_Model_Event::TYPE_DELETE:
237:                 $this->_registerCatalogProductDeleteEvent($event);
238:                 break;
239:         }
240:     }
241: 
242:     /**
243:      * Register data required by cataloginventory stock item processes in event object
244:      *
245:      * @param Mage_Index_Model_Event $event
246:      */
247:     protected function _registerCatalogInventoryStockItemEvent(Mage_Index_Model_Event $event)
248:     {
249:         switch ($event->getType()) {
250:             case Mage_Index_Model_Event::TYPE_SAVE:
251:                 $this->_registerStockItemSaveEvent($event);
252:                 break;
253:         }
254:     }
255: 
256:     /**
257:      * Register data required by stock item save process in event object
258:      *
259:      * @param Mage_Index_Model_Event $event
260:      * @return Mage_CatalogInventory_Model_Indexer_Stock
261:      */
262:     protected function _registerStockItemSaveEvent(Mage_Index_Model_Event $event)
263:     {
264:         /* @var $object Mage_CatalogInventory_Model_Stock_Item */
265:         $object      = $event->getDataObject();
266: 
267:         $event->addNewData('reindex_stock', 1);
268:         $event->addNewData('product_id', $object->getProductId());
269: 
270:         // Saving stock item without product object
271:         // Register re-index price process if products out of stock hidden on Front-end
272:         if (!Mage::helper('cataloginventory')->isShowOutOfStock() && !$object->getProduct()) {
273:             $massObject = new Varien_Object();
274:             $massObject->setAttributesData(array('force_reindex_required' => 1));
275:             $massObject->setProductIds(array($object->getProductId()));
276:             Mage::getSingleton('index/indexer')->logEvent(
277:                 $massObject, Mage_Catalog_Model_Product::ENTITY, Mage_Index_Model_Event::TYPE_MASS_ACTION
278:             );
279:         }
280: 
281:         return $this;
282:     }
283: 
284:     /**
285:      * Register data required by product delete process in event object
286:      *
287:      * @param Mage_Index_Model_Event $event
288:      * @return Mage_CatalogInventory_Model_Indexer_Stock
289:      */
290:     protected function _registerCatalogProductDeleteEvent(Mage_Index_Model_Event $event)
291:     {
292:         /* @var $product Mage_Catalog_Model_Product */
293:         $product = $event->getDataObject();
294: 
295:         $parentIds = $this->_getResource()->getProductParentsByChild($product->getId());
296:         if ($parentIds) {
297:             $event->addNewData('reindex_stock_parent_ids', $parentIds);
298:         }
299: 
300:         return $this;
301:     }
302: 
303:     /**
304:      * Register data required by product mass action process in event object
305:      *
306:      * @param Mage_Index_Model_Event $event
307:      * @return Mage_CatalogInventory_Model_Indexer_Stock
308:      */
309:     protected function _registerCatalogProductMassActionEvent(Mage_Index_Model_Event $event)
310:     {
311:         /* @var $actionObject Varien_Object */
312:         $actionObject = $event->getDataObject();
313:         $attributes   = array(
314:             'status'
315:         );
316:         $reindexStock = false;
317: 
318:         // check if attributes changed
319:         $attrData = $actionObject->getAttributesData();
320:         if (is_array($attrData)) {
321:             foreach ($attributes as $attributeCode) {
322:                 if (array_key_exists($attributeCode, $attrData)) {
323:                     $reindexStock = true;
324:                     break;
325:                 }
326:             }
327:         }
328: 
329:         // check changed websites
330:         if ($actionObject->getWebsiteIds()) {
331:             $reindexStock = true;
332:         }
333: 
334:         // register affected products
335:         if ($reindexStock) {
336:             $event->addNewData('reindex_stock_product_ids', $actionObject->getProductIds());
337:         }
338: 
339:         return $this;
340:     }
341: 
342:     /**
343:      * Process event
344:      *
345:      * @param Mage_Index_Model_Event $event
346:      */
347:     protected function _processEvent(Mage_Index_Model_Event $event)
348:     {
349:         $data = $event->getNewData();
350:         if (!empty($data['cataloginventory_stock_reindex_all'])) {
351:             $this->reindexAll();
352:         }
353:         if (empty($data['cataloginventory_stock_skip_call_event_handler'])) {
354:             $this->callEventHandler($event);
355:         }
356:     }
357: }
358: 
Magento 1.7.0.2 API documentation generated by ApiGen 2.8.0