![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-catalog/Model/ResourceModel/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Model\ResourceModel; use Magento\Catalog\Model\Attribute\LockValidatorInterface; use Magento\Catalog\Model\ResourceModel\Attribute\RemoveProductAttributeData; use Magento\Framework\App\ObjectManager; /** * Catalog attribute resource model */ class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute { /** * Eav config * * @var \Magento\Eav\Model\Config */ protected $_eavConfig; /** * @var LockValidatorInterface */ protected $attrLockValidator; /** * @var RemoveProductAttributeData|null */ private $removeProductAttributeData; /** * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType * @param \Magento\Eav\Model\Config $eavConfig * @param LockValidatorInterface $lockValidator * @param string|null $connectionName * @param RemoveProductAttributeData|null $removeProductAttributeData */ public function __construct( \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType, \Magento\Eav\Model\Config $eavConfig, LockValidatorInterface $lockValidator, $connectionName = null, RemoveProductAttributeData $removeProductAttributeData = null ) { $this->attrLockValidator = $lockValidator; $this->_eavConfig = $eavConfig; $this->removeProductAttributeData = $removeProductAttributeData ?? ObjectManager::getInstance() ->get(RemoveProductAttributeData::class); parent::__construct($context, $storeManager, $eavEntityType, $connectionName); } /** * Perform actions before object save * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object) { $applyTo = $object->getApplyTo(); if (is_array($applyTo)) { $object->setApplyTo(implode(',', $applyTo)); } return parent::_beforeSave($object); } /** * Perform actions after object save * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { $this->_clearUselessAttributeValues($object); return parent::_afterSave($object); } /** * Clear useless attribute values * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _clearUselessAttributeValues(\Magento\Framework\Model\AbstractModel $object) { $origData = $object->getOrigData(); if ($object->isScopeGlobal() && isset( $origData['is_global'] ) && \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL != $origData['is_global'] ) { $attributeStoreIds = array_keys($this->_storeManager->getStores()); if (!empty($attributeStoreIds)) { $delCondition = [ 'attribute_id = ?' => (int)$object->getId(), 'store_id IN(?)' => $attributeStoreIds, ]; $this->getConnection()->delete($object->getBackendTable(), $delCondition); } } return $this; } /** * Delete entity * * @param \Magento\Framework\Model\AbstractModel $object * @return $this * @throws \Magento\Framework\Exception\LocalizedException */ public function deleteEntity(\Magento\Framework\Model\AbstractModel $object) { if (!$object->getEntityAttributeId()) { return $this; } $result = $this->getEntityAttribute($object->getEntityAttributeId()); if ($result) { $attribute = $this->_eavConfig->getAttribute( $object->getEntityTypeId(), $result['attribute_id'] ); try { $this->attrLockValidator->validate($attribute, $result['attribute_set_id']); } catch (\Magento\Framework\Exception\LocalizedException $exception) { throw new \Magento\Framework\Exception\LocalizedException( __('Attribute \'%1\' is locked. %2', $attribute->getAttributeCode(), $exception->getMessage()) ); } $this->removeProductAttributeData->removeData($object, (int)$result['attribute_set_id']); } $condition = ['entity_attribute_id = ?' => $object->getEntityAttributeId()]; $this->getConnection()->delete($this->getTable('eav_entity_attribute'), $condition); return $this; } }