/app/code/core/Mage/Catalog/Model/Product/Flat/Observer.php
https://bitbucket.org/acidel/buykoala · PHP · 300 lines · 143 code · 41 blank · 116 comment · 36 complexity · dd74f175fedbb447a9dcfb5e0deae14d MD5 · raw file
- <?php
- /**
- * Magento
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 3.0)
- * that is bundled with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://opensource.org/licenses/osl-3.0.php
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@magentocommerce.com so we can send you a copy immediately.
- *
- * DISCLAIMER
- *
- * Do not edit or add to this file if you wish to upgrade Magento to newer
- * versions in the future. If you wish to customize Magento for your
- * needs please refer to http://www.magentocommerce.com for more information.
- *
- * @category Mage
- * @package Mage_Catalog
- * @copyright Copyright (c) 2011 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
-
-
- /**
- * Catalog Product Flat observer
- *
- * @category Mage
- * @package Mage_Catalog
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Catalog_Model_Product_Flat_Observer
- {
- /**
- * Retrieve Catalog Product Flat Helper
- *
- * @return Mage_Catalog_Helper_Product_Flat
- */
- protected function _getHelper()
- {
- return Mage::helper('catalog/product_flat');
- }
-
- /**
- * Retrieve Catalog Product Flat Indexer model
- *
- * @return Mage_Catalog_Model_Product_Flat_Indexer
- */
- protected function _getIndexer() {
- return Mage::getSingleton('catalog/product_flat_indexer');
- }
-
- /**
- * Catalog Entity attribute after save process
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function catalogEntityAttributeSaveAfter(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $attribute = $observer->getEvent()->getAttribute();
- /* @var $attribute Mage_Catalog_Model_Entity_Attribute */
-
- $enableBefore = ($attribute->getOrigData('backend_type') == 'static')
- || ($this->_getHelper()->isAddFilterableAttributes() && $attribute->getOrigData('is_filterable') > 0)
- || ($attribute->getOrigData('used_in_product_listing') == 1)
- || ($attribute->getOrigData('used_for_sort_by') == 1);
- $enableAfter = ($attribute->getData('backend_type') == 'static')
- || ($this->_getHelper()->isAddFilterableAttributes() && $attribute->getData('is_filterable') > 0)
- || ($attribute->getData('used_in_product_listing') == 1)
- || ($attribute->getData('used_for_sort_by') == 1);
-
- if (!$enableAfter && !$enableBefore) {
- return $this;
- }
-
- if ($enableBefore && !$enableAfter) {
- // delete attribute data from flat
- $this->_getIndexer()->prepareDataStorage();
- }
- else {
- $this->_getIndexer()->updateAttribute($attribute->getAttributeCode());
- }
-
- return $this;
- }
-
- /**
- * Catalog Product Status Update
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function catalogProductStatusUpdate(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $productId = $observer->getEvent()->getProductId();
- $status = $observer->getEvent()->getStatus();
- $storeId = $observer->getEvent()->getStoreId();
- $storeId = $storeId > 0 ? $storeId : null;
-
- $this->_getIndexer()->updateProductStatus($productId, $status, $storeId);
-
- return $this;
- }
-
- /**
- * Catalog Product Website(s) update
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function catalogProductWebsiteUpdate(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $websiteIds = $observer->getEvent()->getWebsiteIds();
- $productIds = $observer->getEvent()->getProductIds();
-
- foreach ($websiteIds as $websiteId) {
- $website = Mage::app()->getWebsite($websiteId);
- foreach ($website->getStores() as $store) {
- if ($observer->getEvent()->getAction() == 'remove') {
- $this->_getIndexer()->removeProduct($productIds, $store->getId());
- }
- else {
- $this->_getIndexer()->updateProduct($productIds, $store->getId());
- }
- }
- }
-
- return $this;
- }
-
- /**
- * Catalog Product After Save
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function catalogProductSaveAfter(Varien_Event_Observer $observer) {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $product = $observer->getEvent()->getProduct();
- $productId = $product->getId();
-
- $this->_getIndexer()->saveProduct($productId);
-
- return $this;
- }
-
- /**
- * Add new store flat process
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function storeAdd(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $store = $observer->getEvent()->getStore();
- /* @var $store Mage_Core_Model_Store */
- $this->_getIndexer()->rebuild($store->getId());
-
- return $this;
- }
-
- /**
- * Store edit action, check change store group
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function storeEdit(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $store = $observer->getEvent()->getStore();
- /* @var $store Mage_Core_Model_Store */
- if ($store->dataHasChangedFor('group_id')) {
- $this->_getIndexer()->rebuild($store->getId());
- }
-
- return $this;
- }
-
- /**
- * Store delete after process
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function storeDelete(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $store = $observer->getEvent()->getStore();
- /* @var $store Mage_Core_Model_Store */
-
- $this->_getIndexer()->deleteStore($store->getId());
-
- return $this;
- }
-
- /**
- * Store Group Save process
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function storeGroupSave(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $group = $observer->getEvent()->getGroup();
- /* @var $group Mage_Core_Model_Store_Group */
-
- if ($group->dataHasChangedFor('website_id')) {
- foreach ($group->getStores() as $store) {
- /* @var $store Mage_Core_Model_Store */
- $this->_getIndexer()->rebuild($store->getId());
- }
- }
-
- return $this;
- }
-
- /**
- * Catalog Product Import After process
- *
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function catalogProductImportAfter(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $this->_getIndexer()->rebuild();
-
- return $this;
- }
-
- /**
- * Customer Group save after process
- *
- * @param Varien_Event_Observer_Collection $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function customerGroupSaveAfter(Varien_Event_Observer $observer)
- {
- if (!$this->_getHelper()->isBuilt()) {
- return $this;
- }
-
- $customerGroup = $observer->getEvent()->getObject();
- /* @var $customerGroup Mage_Customer_Model_Group */
- if ($customerGroup->dataHasChangedFor($customerGroup->getIdFieldName())
- || $customerGroup->dataHasChangedFor('tax_class_id')) {
- $this->_getIndexer()->updateEventAttributes();
- }
- return $this;
- }
-
- /**
- * Update category ids in flat
- *
- * @deprecated 1.3.2.2
- * @param Varien_Event_Observer $observer
- * @return Mage_Catalog_Model_Product_Flat_Observer
- */
- public function catalogCategoryChangeProducts(Varien_Event_Observer $observer)
- {
- return $this;
- }
- }