/app/code/core/Mage/Eav/Model/Entity/Attribute/Set.php
https://github.com/gryzz/crystal_magento · PHP · 236 lines · 156 code · 18 blank · 62 comment · 22 complexity · 5e0e76613c03dd2bb75a490b38c462b3 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_Eav
- * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- */
- /**
- * Eav attribute set model
- *
- * @category Mage
- * @package Mage_Eav
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Mage_Eav_Model_Entity_Attribute_Set extends Mage_Core_Model_Abstract
- {
- /**
- * Initialize resource model
- *
- */
- protected function _construct()
- {
- $this->_init('eav/entity_attribute_set');
- }
- /**
- * Init attribute set from skeleton (another attribute set)
- *
- * @param int $skeletonId
- * @return Mage_Eav_Model_Entity_Attribute_Set
- */
- public function initFromSkeleton($skeletonId)
- {
- $groups = Mage::getModel('eav/entity_attribute_group')
- ->getResourceCollection()
- ->setAttributeSetFilter($skeletonId)
- ->load();
- $newGroups = array();
- foreach( $groups as $group ) {
- $newGroup = clone $group;
- $newGroup->setId(null)
- ->setAttributeSetId($this->getId())
- ->setDefaultId($group->getDefaultId());
- $groupAttributesCollection = Mage::getModel('eav/entity_attribute')
- ->getResourceCollection()
- ->setAttributeGroupFilter($group->getId())
- ->load();
- $newAttributes = array();
- foreach( $groupAttributesCollection as $attribute ) {
- $newAttribute = Mage::getModel('eav/entity_attribute')
- ->setId($attribute->getId())
- //->setAttributeGroupId($newGroup->getId())
- ->setAttributeSetId($this->getId())
- ->setEntityTypeId($this->getEntityTypeId())
- ->setSortOrder($attribute->getSortOrder());
- $newAttributes[] = $newAttribute;
- }
- $newGroup->setAttributes($newAttributes);
- $newGroups[] = $newGroup;
- }
- $this->setGroups($newGroups);
- return $this;
- }
- /**
- * Collect data for save
- *
- * @param array $data
- */
- public function organizeData($data)
- {
- $modelGroupArray = array();
- $modelAttributeArray = array();
- $attributeIds = array();
- if ($data['attributes']) {
- $ids = array();
- foreach ($data['attributes'] as $attribute) {
- $ids[] = $attribute[0];
- }
- $attributeIds = Mage::getResourceSingleton('eav/entity_attribute')
- ->getValidAttributeIds($ids);
- }
- if( $data['groups'] ) {
- foreach( $data['groups'] as $group ) {
- $modelGroup = Mage::getModel('eav/entity_attribute_group');
- $modelGroup->setId(is_numeric($group[0]) && $group[0] > 0 ? $group[0] : null)
- ->setAttributeGroupName($group[1])
- ->setAttributeSetId($this->getId())
- ->setSortOrder($group[2]);
- if( $data['attributes'] ) {
- foreach( $data['attributes'] as $attribute ) {
- if( $attribute[1] == $group[0] && in_array($attribute[0], $attributeIds) ) {
- $modelAttribute = Mage::getModel('eav/entity_attribute');
- $modelAttribute->setId($attribute[0])
- ->setAttributeGroupId($attribute[1])
- ->setAttributeSetId($this->getId())
- ->setEntityTypeId($this->getEntityTypeId())
- ->setSortOrder($attribute[2]);
- $modelAttributeArray[] = $modelAttribute;
- }
- }
- $modelGroup->setAttributes($modelAttributeArray);
- $modelAttributeArray = array();
- }
- $modelGroupArray[] = $modelGroup;
- }
- $this->setGroups($modelGroupArray);
- }
- if( $data['not_attributes'] ) {
- $modelAttributeArray = array();
- foreach( $data['not_attributes'] as $attributeId ) {
- $modelAttribute = Mage::getModel('eav/entity_attribute');
- $modelAttribute->setEntityAttributeId($attributeId);
- $modelAttributeArray[] = $modelAttribute;
- }
- $this->setRemoveAttributes($modelAttributeArray);
- }
- if( $data['removeGroups'] ) {
- $modelGroupArray = array();
- foreach( $data['removeGroups'] as $groupId ) {
- $modelGroup = Mage::getModel('eav/entity_attribute_group');
- $modelGroup->setId($groupId);
- $modelGroupArray[] = $modelGroup;
- }
- $this->setRemoveGroups($modelGroupArray);
- }
- $this->setAttributeSetName($data['attribute_set_name'])
- ->setEntityTypeId($this->getEntityTypeId());
- }
- /**
- * Validate attribute set name
- *
- * @param string $name
- * @throws Mage_Core_Exception
- * @return bool
- */
- public function validate()
- {
- if (!$this->_getResource()->validate($this, $this->getAttributeSetName())) {
- Mage::throwException(
- Mage::helper('eav')->__('Attribute set with the "%s" name already exists.', $this->getAttributeSetName())
- );
- }
- return true;
- }
- /**
- * Add set info to attributes
- *
- * @param string|Mage_Eav_Model_Entity_Type $entityType
- * @param array $attributes
- * @param int $setId
- * @return Mage_Eav_Model_Entity_Attribute_Set
- */
- public function addSetInfo($entityType, array $attributes, $setId = null)
- {
- $attributeIds = array();
- $config = Mage::getSingleton('eav/config');
- $entityType = $config->getEntityType($entityType);
- foreach ($attributes as $attribute) {
- $attribute = $config->getAttribute($entityType, $attribute);
- if ($setId && is_array($attribute->getAttributeSetInfo($setId))) {
- continue;
- }
- if (!$attribute->getAttributeId()) {
- continue;
- }
- $attributeIds[] = $attribute->getAttributeId();
- }
- if ($attributeIds) {
- $setInfo = $this->_getResource()
- ->getSetInfo($attributeIds, $setId);
- foreach ($attributes as $attribute) {
- $attribute = $config->getAttribute($entityType, $attribute);
- if (!$attribute->getAttributeId()) {
- continue;
- }
- if (!in_array($attribute->getAttributeId(), $attributeIds)) {
- continue;
- }
- if (is_numeric($setId)) {
- $attributeSetInfo = $attribute->getAttributeSetInfo();
- if (!is_array($attributeSetInfo)) {
- $attributeSetInfo = array();
- }
- if (isset($setInfo[$attribute->getAttributeId()][$setId])) {
- $attributeSetInfo[$setId] = $setInfo[$attribute->getAttributeId()][$setId];
- }
- $attribute->setAttributeSetInfo($attributeSetInfo);
- }
- else {
- if (isset($setInfo[$attribute->getAttributeId()])) {
- $attribute->setAttributeSetInfo($setInfo[$attribute->getAttributeId()]);
- }
- else {
- $attribute->setAttributeSetInfo(array());
- }
- }
- }
- }
- return $this;
- }
- }