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: * Catalog indexer eav processor
30: *
31: * @method Mage_CatalogIndex_Model_Resource_Indexer_Eav _getResource()
32: * @method Mage_CatalogIndex_Model_Resource_Indexer_Eav getResource()
33: * @method Mage_CatalogIndex_Model_Indexer_Eav setEntityId(int $value)
34: * @method int getAttributeId()
35: * @method Mage_CatalogIndex_Model_Indexer_Eav setAttributeId(int $value)
36: * @method int getStoreId()
37: * @method Mage_CatalogIndex_Model_Indexer_Eav setStoreId(int $value)
38: * @method int getValue()
39: * @method Mage_CatalogIndex_Model_Indexer_Eav setValue(int $value)
40: *
41: * @category Mage
42: * @package Mage_CatalogIndex
43: * @author Magento Core Team <core@magentocommerce.com>
44: */
45: class Mage_CatalogIndex_Model_Indexer_Eav extends Mage_CatalogIndex_Model_Indexer_Abstract
46: {
47: protected function _construct()
48: {
49: $this->_init('catalogindex/indexer_eav');
50: return parent::_construct();
51: }
52:
53: public function createIndexData(Mage_Catalog_Model_Product $object, Mage_Eav_Model_Entity_Attribute_Abstract $attribute = null)
54: {
55: $data = array();
56:
57: $data['store_id'] = $attribute->getStoreId();
58: $data['entity_id'] = $object->getId();
59: $data['attribute_id'] = $attribute->getId();
60: $data['value'] = $object->getData($attribute->getAttributeCode());
61:
62: if ($attribute->getFrontendInput() == 'multiselect') {
63: $origData = $data;
64: $data = array();
65:
66: $value = explode(',', $origData['value']);
67: foreach ($value as $item) {
68: $row = $origData;
69: $row['value'] = $item;
70: $data[] = $row;
71: }
72: }
73:
74: //return $this->_spreadDataForStores($object, $attribute, $data);
75: return $data;
76: }
77:
78: protected function _isAttributeIndexable(Mage_Eav_Model_Entity_Attribute_Abstract $attribute)
79: {
80: if ($attribute->getIsFilterable() == 0 && $attribute->getIsVisibleInAdvancedSearch() == 0) {
81: return false;
82: }
83: if ($attribute->getFrontendInput() != 'select' && $attribute->getFrontendInput() != 'multiselect') {
84: return false;
85: }
86:
87: return true;
88: }
89:
90: protected function _getIndexableAttributeConditions()
91: {
92: $conditions = "main_table.frontend_input IN ('select', 'multiselect') AND (additional_table.is_filterable IN (1, 2) OR additional_table.is_visible_in_advanced_search = 1)";
93: return $conditions;
94:
95: $conditions = array();
96: $conditions['frontend_input'] = array('select', 'multiselect');
97: $conditions['or']['is_filterable'] = array(1, 2);
98: $conditions['or']['is_visible_in_advanced_search'] = 1;
99: }
100: }
101: