PageRenderTime 43ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/app/code/core/Mage/Catalog/Model/Observer.php

https://bitbucket.org/jokusafet/magento2
PHP | 298 lines | 156 code | 21 blank | 121 comment | 23 complexity | 7202105939dc00890c76d8af4734036d MD5 | raw file
  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_Catalog
  23. * @copyright Copyright (c) 2012 X.commerce, Inc. (http://www.magentocommerce.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Catalog Observer
  28. *
  29. * @category Mage
  30. * @package Mage_Catalog
  31. * @author Magento Core Team <core@magentocommerce.com>
  32. */
  33. class Mage_Catalog_Model_Observer
  34. {
  35. /**
  36. * Process catalog ata related with store data changes
  37. *
  38. * @param Varien_Event_Observer $observer
  39. * @return Mage_Catalog_Model_Observer
  40. */
  41. public function storeEdit(Varien_Event_Observer $observer)
  42. {
  43. /** @var $store Mage_Core_Model_Store */
  44. $store = $observer->getEvent()->getStore();
  45. if ($store->dataHasChangedFor('group_id')) {
  46. Mage::app()->reinitStores();
  47. /** @var $categoryFlatHelper Mage_Catalog_Helper_Category_Flat */
  48. $categoryFlatHelper = Mage::helper('Mage_Catalog_Helper_Category_Flat');
  49. if ($categoryFlatHelper->isAvailable() && $categoryFlatHelper->isBuilt()) {
  50. Mage::getResourceModel('Mage_Catalog_Model_Resource_Category_Flat')
  51. ->synchronize(null, array($store->getId()));
  52. }
  53. Mage::getResourceSingleton('Mage_Catalog_Model_Resource_Product')->refreshEnabledIndex($store);
  54. }
  55. return $this;
  56. }
  57. /**
  58. * Process catalog data related with new store
  59. *
  60. * @param Varien_Event_Observer $observer
  61. * @return Mage_Catalog_Model_Observer
  62. */
  63. public function storeAdd(Varien_Event_Observer $observer)
  64. {
  65. /* @var $store Mage_Core_Model_Store */
  66. $store = $observer->getEvent()->getStore();
  67. Mage::app()->reinitStores();
  68. Mage::getConfig()->reinit();
  69. /** @var $categoryFlatHelper Mage_Catalog_Helper_Category_Flat */
  70. $categoryFlatHelper = Mage::helper('Mage_Catalog_Helper_Category_Flat');
  71. if ($categoryFlatHelper->isAvailable() && $categoryFlatHelper->isBuilt()) {
  72. Mage::getResourceModel('Mage_Catalog_Model_Resource_Category_Flat')
  73. ->synchronize(null, array($store->getId()));
  74. }
  75. Mage::getResourceModel('Mage_Catalog_Model_Resource_Product')->refreshEnabledIndex($store);
  76. return $this;
  77. }
  78. /**
  79. * Process catalog data related with store group root category
  80. *
  81. * @param Varien_Event_Observer $observer
  82. * @return Mage_Catalog_Model_Observer
  83. */
  84. public function storeGroupSave(Varien_Event_Observer $observer)
  85. {
  86. /* @var $group Mage_Core_Model_Store_Group */
  87. $group = $observer->getEvent()->getGroup();
  88. if ($group->dataHasChangedFor('root_category_id') || $group->dataHasChangedFor('website_id')) {
  89. Mage::app()->reinitStores();
  90. foreach ($group->getStores() as $store) {
  91. /** @var $categoryFlatHelper Mage_Catalog_Helper_Category_Flat */
  92. $categoryFlatHelper = Mage::helper('Mage_Catalog_Helper_Category_Flat');
  93. if ($categoryFlatHelper->isAvailable() && $categoryFlatHelper->isBuilt()) {
  94. Mage::getResourceModel('Mage_Catalog_Model_Resource_Category_Flat')
  95. ->synchronize(null, array($store->getId()));
  96. }
  97. }
  98. }
  99. return $this;
  100. }
  101. /**
  102. * Process delete of store
  103. *
  104. * @param Varien_Event_Observer $observer
  105. * @return Mage_Catalog_Model_Observer
  106. */
  107. public function storeDelete(Varien_Event_Observer $observer)
  108. {
  109. /** @var $categoryFlatHelper Mage_Catalog_Helper_Category_Flat */
  110. $categoryFlatHelper = Mage::helper('Mage_Catalog_Helper_Category_Flat');
  111. if ($categoryFlatHelper->isAvailable() && $categoryFlatHelper->isBuilt()) {
  112. $store = $observer->getEvent()->getStore();
  113. Mage::getResourceModel('Mage_Catalog_Model_Resource_Category_Flat')->deleteStores($store->getId());
  114. }
  115. return $this;
  116. }
  117. /**
  118. * Process catalog data after category move
  119. *
  120. * @param Varien_Event_Observer $observer
  121. * @return Mage_Catalog_Model_Observer
  122. */
  123. public function categoryMove(Varien_Event_Observer $observer)
  124. {
  125. $categoryId = $observer->getEvent()->getCategoryId();
  126. $prevParentId = $observer->getEvent()->getPrevParentId();
  127. $parentId = $observer->getEvent()->getParentId();
  128. /** @var $categoryFlatHelper Mage_Catalog_Helper_Category_Flat */
  129. $categoryFlatHelper = Mage::helper('Mage_Catalog_Helper_Category_Flat');
  130. if ($categoryFlatHelper->isAvailable() && $categoryFlatHelper->isBuilt()) {
  131. Mage::getResourceModel('Mage_Catalog_Model_Resource_Category_Flat')
  132. ->move($categoryId, $prevParentId, $parentId);
  133. }
  134. return $this;
  135. }
  136. /**
  137. * Process catalog data after products import
  138. *
  139. * @param Varien_Event_Observer $observer
  140. * @return Mage_Catalog_Model_Observer
  141. */
  142. public function catalogProductImportAfter(Varien_Event_Observer $observer)
  143. {
  144. Mage::getModel('Mage_Catalog_Model_Url')->refreshRewrites();
  145. Mage::getResourceSingleton('Mage_Catalog_Model_Resource_Category')->refreshProductIndex();
  146. return $this;
  147. }
  148. /**
  149. * Catalog Product Compare Items Clean
  150. *
  151. * @param Varien_Event_Observer $observer
  152. * @return Mage_Catalog_Model_Observer
  153. */
  154. public function catalogProductCompareClean(Varien_Event_Observer $observer)
  155. {
  156. Mage::getModel('Mage_Catalog_Model_Product_Compare_Item')->clean();
  157. return $this;
  158. }
  159. /**
  160. * After save event of category
  161. *
  162. * @param Varien_Event_Observer $observer
  163. * @return Mage_Catalog_Model_Observer
  164. */
  165. public function categorySaveAfter(Varien_Event_Observer $observer)
  166. {
  167. /** @var $categoryFlatHelper Mage_Catalog_Helper_Category_Flat */
  168. $categoryFlatHelper = Mage::helper('Mage_Catalog_Helper_Category_Flat');
  169. if ($categoryFlatHelper->isAvailable() && $categoryFlatHelper->isBuilt()) {
  170. $category = $observer->getEvent()->getCategory();
  171. Mage::getResourceModel('Mage_Catalog_Model_Resource_Category_Flat')->synchronize($category);
  172. }
  173. return $this;
  174. }
  175. /**
  176. * Checking whether the using static urls in WYSIWYG allowed event
  177. *
  178. * @param Varien_Event_Observer $observer
  179. * @return Mage_Catalog_Model_Observer
  180. */
  181. public function catalogCheckIsUsingStaticUrlsAllowed(Varien_Event_Observer $observer)
  182. {
  183. $storeId = $observer->getEvent()->getData('store_id');
  184. $result = $observer->getEvent()->getData('result');
  185. $result->isAllowed = Mage::helper('Mage_Catalog_Helper_Data')->setStoreId($storeId)->isUsingStaticUrlsAllowed();
  186. }
  187. /**
  188. * Cron job method for product prices to reindex
  189. *
  190. * @param Mage_Cron_Model_Schedule $schedule
  191. */
  192. public function reindexProductPrices(Mage_Cron_Model_Schedule $schedule)
  193. {
  194. $indexProcess = Mage::getSingleton('Mage_Index_Model_Indexer')->getProcessByCode('catalog_product_price');
  195. if ($indexProcess) {
  196. $indexProcess->reindexAll();
  197. }
  198. }
  199. /**
  200. * Adds catalog categories to top menu
  201. *
  202. * @param Varien_Event_Observer $observer
  203. */
  204. public function addCatalogToTopmenuItems(Varien_Event_Observer $observer)
  205. {
  206. $this->_addCategoriesToMenu(
  207. Mage::helper('Mage_Catalog_Helper_Category')->getStoreCategories(),
  208. $observer->getMenu()
  209. );
  210. }
  211. /**
  212. * Recursively adds categories to top menu
  213. *
  214. * @param Varien_Data_Tree_Node_Collection|array $categories
  215. * @param Varien_Data_Tree_Node $parentCategoryNode
  216. */
  217. protected function _addCategoriesToMenu($categories, $parentCategoryNode)
  218. {
  219. foreach ($categories as $category) {
  220. if (!$category->getIsActive()) {
  221. continue;
  222. }
  223. $nodeId = 'category-node-' . $category->getId();
  224. $tree = $parentCategoryNode->getTree();
  225. $categoryData = array(
  226. 'name' => $category->getName(),
  227. 'id' => $nodeId,
  228. 'url' => Mage::helper('Mage_Catalog_Helper_Category')->getCategoryUrl($category),
  229. 'is_active' => $this->_isActiveMenuCategory($category)
  230. );
  231. $categoryNode = new Varien_Data_Tree_Node($categoryData, 'id', $tree, $parentCategoryNode);
  232. $parentCategoryNode->addChild($categoryNode);
  233. if (Mage::helper('Mage_Catalog_Helper_Category_Flat')->isEnabled()) {
  234. $subcategories = (array)$category->getChildrenNodes();
  235. } else {
  236. $subcategories = $category->getChildren();
  237. }
  238. $this->_addCategoriesToMenu($subcategories, $categoryNode);
  239. }
  240. }
  241. /**
  242. * Checks whether category belongs to active category's path
  243. *
  244. * @param Varien_Data_Tree_Node $category
  245. * @return bool
  246. */
  247. protected function _isActiveMenuCategory($category)
  248. {
  249. $catalogLayer = Mage::getSingleton('Mage_Catalog_Model_Layer');
  250. if (!$catalogLayer) {
  251. return false;
  252. }
  253. $currentCategory = $catalogLayer->getCurrentCategory();
  254. if (!$currentCategory) {
  255. return false;
  256. }
  257. $categoryPathIds = explode(',', $currentCategory->getPathInStore());
  258. return in_array($category->getId(), $categoryPathIds);
  259. }
  260. /**
  261. * Change product type on the fly depending on selected options
  262. *
  263. * @param Varien_Event_Observer $observer
  264. */
  265. public function transitionProductType(Varien_Event_Observer $observer)
  266. {
  267. $product = $observer->getProduct();
  268. $isTransitionalType = $product->getTypeId() === Mage_Catalog_Model_Product_Type::TYPE_SIMPLE
  269. || $product->getTypeId() === Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL;
  270. if ($isTransitionalType) {
  271. $product->setTypeId($product->hasIsVirtual()
  272. ? Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL
  273. : Mage_Catalog_Model_Product_Type::TYPE_SIMPLE
  274. );
  275. }
  276. }
  277. }