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_Index
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: * Index Setup Model
30: *
31: * @category Mage
32: * @package Mage_Index
33: * @author Magento Core Team <core@magentocommerce.com>
34: */
35: class Mage_Index_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
36: {
37: /**
38: * Apply Index module DB updates and sync indexes declaration
39: *
40: * @return void
41: */
42: public function applyUpdates()
43: {
44: parent::applyUpdates();
45: $this->_syncIndexes();
46: }
47:
48: /**
49: * Sync indexes declarations in config and in DB
50: *
51: * @return Mage_Index_Model_Resource_Setup
52: */
53: protected function _syncIndexes()
54: {
55: $connection = $this->getConnection();
56: if (!$connection) {
57: return $this;
58: }
59: $indexes = Mage::getConfig()->getNode(Mage_Index_Model_Process::XML_PATH_INDEXER_DATA);
60: $indexCodes = array();
61: foreach ($indexes->children() as $code => $index) {
62: $indexCodes[] = $code;
63: }
64: $table = $this->getTable('index/process');
65: $select = $connection->select()->from($table, 'indexer_code');
66: $existingIndexes = $connection->fetchCol($select);
67: $delete = array_diff($existingIndexes, $indexCodes);
68: $insert = array_diff($indexCodes, $existingIndexes);
69:
70: if (!empty($delete)) {
71: $connection->delete($table, $connection->quoteInto('indexer_code IN (?)', $delete));
72: }
73: if (!empty($insert)) {
74: $insertData = array();
75: foreach ($insert as $code) {
76: $insertData[] = array(
77: 'indexer_code' => $code,
78: 'status' => Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX
79: );
80: }
81: if (method_exists($connection, 'insertArray')) {
82: $connection->insertArray($table, array('indexer_code', 'status'), $insertData);
83: }
84: }
85: }
86: }
87: