123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
- use Magento\Eav\Model\Entity\Attribute\AttributeGroupAlreadyExistsException;
- use Magento\Eav\Model\ResourceModel\Entity\Attribute;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\DB\Adapter\DuplicateException;
- use Magento\Framework\Model\AbstractModel;
- /**
- * Eav Resource Entity Attribute Group
- */
- class Group extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
- {
- /**
- * @var Attribute
- */
- private $attributeResource;
- /**
- * @inheritDoc
- */
- public function __construct(
- \Magento\Framework\Model\ResourceModel\Db\Context $context,
- $connectionName = null,
- Attribute $attributeResource = null
- ) {
- parent::__construct($context, $connectionName);
- $this->attributeResource = $attributeResource ?: ObjectManager::getInstance()->get(Attribute::class);
- }
- /**
- * Resource initialization
- *
- * @return void
- * @codeCoverageIgnore
- */
- protected function _construct()
- {
- $this->_init('eav_attribute_group', 'attribute_group_id');
- }
- /**
- * Checks if attribute group exists
- *
- * @param \Magento\Eav\Model\Entity\Attribute\Group $object
- * @return bool
- */
- public function itemExists($object)
- {
- $connection = $this->getConnection();
- $bind = [
- 'attribute_set_id' => $object->getAttributeSetId(),
- 'attribute_group_name' => $object->getAttributeGroupName(),
- ];
- $select = $connection->select()->from(
- $this->getMainTable()
- )->where(
- 'attribute_set_id = :attribute_set_id'
- )->where(
- 'attribute_group_name = :attribute_group_name'
- );
- return $connection->fetchRow($select, $bind) > 0;
- }
- /**
- * Perform actions before object save
- *
- * @param AbstractModel $object
- * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
- */
- protected function _beforeSave(AbstractModel $object)
- {
- if (!$object->getSortOrder()) {
- $object->setSortOrder($this->_getMaxSortOrder($object) + 1);
- }
- return parent::_beforeSave($object);
- }
- /**
- * Perform actions after object save
- *
- * @param AbstractModel $object
- * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
- */
- protected function _afterSave(AbstractModel $object)
- {
- if ($object->getAttributes()) {
- foreach ($object->getAttributes() as $attribute) {
- /** @var $attribute \Magento\Eav\Api\Data\AttributeInterface */
- $attribute->setAttributeGroupId($object->getId());
- $this->attributeResource->saveInSetIncluding(
- $attribute
- );
- }
- }
- return parent::_afterSave($object);
- }
- /**
- * Retrieve max sort order
- *
- * @param AbstractModel $object
- * @return int
- */
- protected function _getMaxSortOrder($object)
- {
- $connection = $this->getConnection();
- $bind = [':attribute_set_id' => $object->getAttributeSetId()];
- $select = $connection->select()->from(
- $this->getMainTable(),
- new \Zend_Db_Expr("MAX(sort_order)")
- )->where(
- 'attribute_set_id = :attribute_set_id'
- );
- return $connection->fetchOne($select, $bind);
- }
- /**
- * Set any group default if old one was removed
- *
- * @param integer $attributeSetId
- * @return $this
- */
- public function updateDefaultGroup($attributeSetId)
- {
- $connection = $this->getConnection();
- $bind = [':attribute_set_id' => $attributeSetId];
- $select = $connection->select()->from(
- $this->getMainTable(),
- $this->getIdFieldName()
- )->where(
- 'attribute_set_id = :attribute_set_id'
- )->order(
- 'default_id ' . \Magento\Framework\Data\Collection::SORT_ORDER_DESC
- )->limit(
- 1
- );
- $groupId = $connection->fetchOne($select, $bind);
- if ($groupId) {
- $data = ['default_id' => 1];
- $where = ['attribute_group_id =?' => $groupId];
- $connection->update($this->getMainTable(), $data, $where);
- }
- return $this;
- }
- /**
- * {@inheritdoc}
- */
- protected function saveNewObject(AbstractModel $object)
- {
- try {
- return parent::saveNewObject($object);
- } catch (DuplicateException $e) {
- throw new AttributeGroupAlreadyExistsException(
- __(
- 'Attribute group with same code already exist. Please rename "%1" group',
- $object->getAttributeGroupName()
- )
- );
- }
- }
- /**
- * {@inheritdoc}
- */
- protected function updateObject(AbstractModel $object)
- {
- try {
- return parent::updateObject($object);
- } catch (DuplicateException $e) {
- throw new AttributeGroupAlreadyExistsException(
- __(
- 'Attribute group with same code already exist. Please rename "%1" group',
- $object->getAttributeGroupName()
- )
- );
- }
- }
- }
|