/** * Determine filter type for specified attribute. * * @static * @param Mage_Eav_Model_Entity_Attribute $attribute * @throws Exception * @return string */ public static function getAttributeFilterType(Mage_Eav_Model_Entity_Attribute $attribute) { if ($attribute->usesSource() || $attribute->getFilterOptions()) { return self::FILTER_TYPE_SELECT; } elseif ('datetime' == $attribute->getBackendType()) { return self::FILTER_TYPE_DATE; } elseif ('decimal' == $attribute->getBackendType() || 'int' == $attribute->getBackendType()) { return self::FILTER_TYPE_NUMBER; } elseif ($attribute->isStatic() || 'varchar' == $attribute->getBackendType() || 'text' == $attribute->getBackendType()) { return self::FILTER_TYPE_INPUT; } else { Mage::throwException(Mage::helper('importexport')->__('Can not determine attribute filter type')); } }
/** * Get attribute type for upcoming validation. * * @param Mage_Eav_Model_Entity_Attribute $attribute * @return string */ public static function getAttributeType(Mage_Eav_Model_Entity_Attribute $attribute) { if ($attribute->usesSource()) { return $attribute->getFrontendInput() == 'multiselect' ? 'multiselect' : 'select'; } elseif ($attribute->isStatic()) { return $attribute->getFrontendInput() == 'date' ? 'datetime' : 'varchar'; } else { return $attribute->getBackendType(); } }
/** * Migrate Entries from source to target tables (if possible) * * TODO: Delete existing Select/Multiselect Values if the new Backend Type is not one of Select/Multiselect * * @param Mage_Eav_Model_Entity_Attribute $attribute Attribute Model * @param string $targetType Target Backend Type * @return void */ protected function _migrateData($attribute, $targetType) { /** @var Varien_Db_Adapter_Interface $_dbConnection */ $_dbConnection = Mage::getSingleton('core/resource')->getConnection('core_write'); // e.g. Entity is 'catalog_product' $entityTypeCode = $attribute->getEntity()->getData('entity_type_code'); // Set Backend Types for later reference $sourceType = $attribute->getBackendType(); // Create complete Entity Table names, e.g. 'catalog_product_entity_text' $sourceTable = implode([$entityTypeCode, 'entity', $sourceType], '_'); $targetTable = implode([$entityTypeCode, 'entity', $targetType], '_'); // Select all existing entries for given Attribute $srcSql = 'SELECT' . ' * FROM ' . $sourceTable . ' WHERE attribute_id = ? AND entity_type_id = ?'; /** @var Zend_Db_Statement_Interface $sourceQuery */ $sourceQuery = $_dbConnection->query($srcSql, [$attribute->getId(), $attribute->getEntity()->getData('entity_type_id')]); $this->_migrateNonSelect($targetType, $sourceQuery, $sourceType, $targetTable, $_dbConnection, $sourceTable); }