/vendor/magento/module-eav/Model/ResourceModel/Entity/Attribute/Set.php
https://gitlab.com/yousafsyed/easternglamor · PHP · 236 lines · 142 code · 19 blank · 75 comment · 13 complexity · 4c7714cbf6251876a7e3595791f082f5 MD5 · raw file
- <?php
- /**
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
- /**
- * Eav attribute set resource model
- *
- * @author Magento Core Team <core@magentocommerce.com>
- */
- class Set extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
- {
- /**
- * EAV cache ids
- */
- const ATTRIBUTES_CACHE_ID = 'EAV_ENTITY_ATTRIBUTES_BY_SET_ID';
- /**
- * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\GroupFactory
- */
- protected $_attrGroupFactory;
- /**
- * @var \Magento\Eav\Model\Config
- */
- protected $eavConfig;
- /**
- * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
- * @param GroupFactory $attrGroupFactory
- * @param \Magento\Eav\Model\Config $eavConfig
- * @param string $connectionName
- * @codeCoverageIgnore
- */
- public function __construct(
- \Magento\Framework\Model\ResourceModel\Db\Context $context,
- \Magento\Eav\Model\ResourceModel\Entity\Attribute\GroupFactory $attrGroupFactory,
- \Magento\Eav\Model\Config $eavConfig,
- $connectionName = null
- ) {
- parent::__construct($context, $connectionName);
- $this->_attrGroupFactory = $attrGroupFactory;
- $this->eavConfig = $eavConfig;
- }
- /**
- * Initialize connection
- *
- * @return void
- * @codeCoverageIgnore
- */
- protected function _construct()
- {
- $this->_init('eav_attribute_set', 'attribute_set_id');
- }
- /**
- * Perform actions after object save
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return $this
- */
- protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
- {
- if ($object->getGroups()) {
- /* @var $group \Magento\Eav\Model\Entity\Attribute\Group */
- foreach ($object->getGroups() as $group) {
- $group->setAttributeSetId($object->getId());
- if ($group->itemExists() && !$group->getId()) {
- continue;
- }
- $group->save();
- }
- }
- if ($object->getRemoveGroups()) {
- foreach ($object->getRemoveGroups() as $group) {
- /* @var $group \Magento\Eav\Model\Entity\Attribute\Group */
- $group->delete();
- }
- $this->_attrGroupFactory->create()->updateDefaultGroup($object->getId());
- }
- if ($object->getRemoveAttributes()) {
- foreach ($object->getRemoveAttributes() as $attribute) {
- /* @var $attribute \Magento\Eav\Model\Entity\Attribute */
- $attribute->deleteEntity();
- }
- }
- return parent::_afterSave($object);
- }
- /**
- * Perform actions before object delete
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return $this
- * @throws \Magento\Framework\Exception\StateException
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- protected function _beforeDelete(\Magento\Framework\Model\AbstractModel $object)
- {
- /** @var \Magento\Eav\Api\Data\AttributeSetInterface $object */
- $defaultAttributeSetId = $this->eavConfig
- ->getEntityType($object->getEntityTypeId())
- ->getDefaultAttributeSetId();
- if ($object->getAttributeSetId() == $defaultAttributeSetId) {
- throw new \Magento\Framework\Exception\StateException(
- __('Default attribute set can not be deleted')
- );
- }
- return parent::_beforeDelete($object);
- }
- /**
- * Validate attribute set name
- *
- * @param \Magento\Eav\Model\Entity\Attribute\Set $object
- * @param string $attributeSetName
- * @return bool
- */
- public function validate($object, $attributeSetName)
- {
- $connection = $this->getConnection();
- $bind = ['attribute_set_name' => trim($attributeSetName), 'entity_type_id' => $object->getEntityTypeId()];
- $select = $connection->select()->from(
- $this->getMainTable()
- )->where(
- 'attribute_set_name = :attribute_set_name'
- )->where(
- 'entity_type_id = :entity_type_id'
- );
- if ($object->getId()) {
- $bind['attribute_set_id'] = $object->getId();
- $select->where('attribute_set_id != :attribute_set_id');
- }
- return !$connection->fetchOne($select, $bind) ? true : false;
- }
- /**
- * Retrieve Set info by attributes
- *
- * @param array $attributeIds
- * @param int $setId
- * @return array
- */
- public function getSetInfo(array $attributeIds, $setId = null)
- {
- $cacheKey = self::ATTRIBUTES_CACHE_ID . $setId;
- if ($this->eavConfig->isCacheEnabled() && ($cache = $this->eavConfig->getCache()->load($cacheKey))) {
- $setInfoData = unserialize($cache);
- } else {
- $attributeSetData = $this->fetchAttributeSetData($setId);
- $setInfoData = [];
- foreach ($attributeSetData as $row) {
- $data = [
- 'group_id' => $row['attribute_group_id'],
- 'group_sort' => $row['group_sort_order'],
- 'sort' => $row['sort_order'],
- ];
- $setInfoData[$row['attribute_id']][$row['attribute_set_id']] = $data;
- }
- if ($this->eavConfig->isCacheEnabled()) {
- $this->eavConfig->getCache()->save(
- serialize($setInfoData),
- $cacheKey,
- [
- \Magento\Eav\Model\Cache\Type::CACHE_TAG,
- \Magento\Eav\Model\Entity\Attribute::CACHE_TAG
- ]
- );
- }
- }
- $setInfo = [];
- foreach ($attributeIds as $attributeId) {
- $setInfo[$attributeId] = isset($setInfoData[$attributeId]) ? $setInfoData[$attributeId] : [];
- }
- return $setInfo;
- }
- /**
- * Retrurn default attribute group id for attribute set id
- *
- * @param int $setId
- * @return int|null
- */
- public function getDefaultGroupId($setId)
- {
- $connection = $this->getConnection();
- $bind = ['attribute_set_id' => (int)$setId];
- $select = $connection->select()->from(
- $this->getTable('eav_attribute_group'),
- 'attribute_group_id'
- )->where(
- 'attribute_set_id = :attribute_set_id'
- )->where(
- 'default_id = 1'
- )->limit(
- 1
- );
- return $connection->fetchOne($select, $bind);
- }
- /**
- * Returns data from eav_entity_attribute table for given $setId (or all if $setId is null)
- *
- * @param int $setId
- * @return array
- */
- protected function fetchAttributeSetData($setId = null)
- {
- $connection = $this->getConnection();
- $select = $connection->select()->from(
- ['entity' => $this->getTable('eav_entity_attribute')],
- ['attribute_id', 'attribute_set_id', 'attribute_group_id', 'sort_order']
- )->joinLeft(
- ['attribute_group' => $this->getTable('eav_attribute_group')],
- 'entity.attribute_group_id = attribute_group.attribute_group_id',
- ['group_sort_order' => 'sort_order']
- );
- $bind = [];
- if (is_numeric($setId)) {
- $bind[':attribute_set_id'] = $setId;
- $select->where('entity.attribute_set_id = :attribute_set_id');
- }
- return $connection->fetchAll($select, $bind);
- }
- }