Attribute.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Catalog\Model\Entity;
  7. use Magento\Catalog\Model\Attribute\LockValidatorInterface;
  8. use Magento\Framework\Api\AttributeValueFactory;
  9. use Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface;
  10. /**
  11. * Product attribute extension with event dispatching
  12. *
  13. * @method string getFrontendInputRenderer()
  14. * @method \Magento\Catalog\Model\Entity\Attribute setFrontendInputRenderer(string $value)
  15. * @method int setIsGlobal(int $value)
  16. * @method int getIsVisible()
  17. * @method int setIsVisible(int $value)
  18. * @method int getIsSearchable()
  19. * @method \Magento\Catalog\Model\Entity\Attribute setIsSearchable(int $value)
  20. * @method int getSearchWeight()
  21. * @method \Magento\Catalog\Model\Entity\Attribute setSearchWeight(int $value)
  22. * @method int getIsFilterable()
  23. * @method \Magento\Catalog\Model\Entity\Attribute setIsFilterable(int $value)
  24. * @method int getIsComparable()
  25. * @method \Magento\Catalog\Model\Entity\Attribute setIsComparable(int $value)
  26. * @method \Magento\Catalog\Model\Entity\Attribute setIsVisibleOnFront(int $value)
  27. * @method int getIsHtmlAllowedOnFront()
  28. * @method \Magento\Catalog\Model\Entity\Attribute setIsHtmlAllowedOnFront(int $value)
  29. * @method int getIsUsedForPriceRules()
  30. * @method \Magento\Catalog\Model\Entity\Attribute setIsUsedForPriceRules(int $value)
  31. * @method int getIsFilterableInSearch()
  32. * @method \Magento\Catalog\Model\Entity\Attribute setIsFilterableInSearch(int $value)
  33. * @method \Magento\Catalog\Model\Entity\Attribute setUsedInProductListing(int $value)
  34. * @method \Magento\Catalog\Model\Entity\Attribute setUsedForSortBy(int $value)
  35. * @method \Magento\Catalog\Model\Entity\Attribute setApplyTo(string $value)
  36. * @method int getIsVisibleInAdvancedSearch()
  37. * @method \Magento\Catalog\Model\Entity\Attribute setIsVisibleInAdvancedSearch(int $value)
  38. * @method \Magento\Catalog\Model\Entity\Attribute setPosition(int $value)
  39. * @method int getIsWysiwygEnabled()
  40. * @method \Magento\Catalog\Model\Entity\Attribute setIsWysiwygEnabled(int $value)
  41. * @method int getIsUsedForPromoRules()
  42. * @method \Magento\Catalog\Model\Entity\Attribute setIsUsedForPromoRules(int $value)
  43. * @method \Magento\Eav\Api\Data\AttributeExtensionInterface getExtensionAttributes()
  44. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  45. */
  46. class Attribute extends \Magento\Eav\Model\Entity\Attribute
  47. {
  48. /**
  49. * Event Prefix
  50. *
  51. * @var string
  52. */
  53. protected $_eventPrefix = 'catalog_entity_attribute';
  54. /**
  55. * Event Object
  56. *
  57. * @var string
  58. */
  59. protected $_eventObject = 'attribute';
  60. const MODULE_NAME = 'Magento_Catalog';
  61. /**
  62. * @var LockValidatorInterface
  63. */
  64. protected $attrLockValidator;
  65. /**
  66. * @param \Magento\Framework\Model\Context $context
  67. * @param \Magento\Framework\Registry $registry
  68. * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
  69. * @param AttributeValueFactory $customAttributeFactory
  70. * @param \Magento\Eav\Model\Config $eavConfig
  71. * @param \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory
  72. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  73. * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
  74. * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
  75. * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
  76. * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
  77. * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
  78. * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  79. * @param \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList
  80. * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
  81. * @param DateTimeFormatterInterface $dateTimeFormatter
  82. * @param LockValidatorInterface $lockValidator
  83. * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
  84. * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
  85. * @param array $data
  86. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  87. */
  88. public function __construct(
  89. \Magento\Framework\Model\Context $context,
  90. \Magento\Framework\Registry $registry,
  91. \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
  92. AttributeValueFactory $customAttributeFactory,
  93. \Magento\Eav\Model\Config $eavConfig,
  94. \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory,
  95. \Magento\Store\Model\StoreManagerInterface $storeManager,
  96. \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
  97. \Magento\Framework\Validator\UniversalFactory $universalFactory,
  98. \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
  99. \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
  100. \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
  101. \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
  102. \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList,
  103. \Magento\Framework\Locale\ResolverInterface $localeResolver,
  104. DateTimeFormatterInterface $dateTimeFormatter,
  105. LockValidatorInterface $lockValidator,
  106. \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
  107. \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
  108. array $data = []
  109. ) {
  110. $this->attrLockValidator = $lockValidator;
  111. parent::__construct(
  112. $context,
  113. $registry,
  114. $extensionFactory,
  115. $customAttributeFactory,
  116. $eavConfig,
  117. $eavTypeFactory,
  118. $storeManager,
  119. $resourceHelper,
  120. $universalFactory,
  121. $optionDataFactory,
  122. $dataObjectProcessor,
  123. $dataObjectHelper,
  124. $localeDate,
  125. $reservedAttributeList,
  126. $localeResolver,
  127. $dateTimeFormatter,
  128. $resource,
  129. $resourceCollection,
  130. $data
  131. );
  132. }
  133. /**
  134. * Processing object before save data
  135. *
  136. * @return \Magento\Framework\Model\AbstractModel
  137. * @throws \Magento\Framework\Exception\LocalizedException
  138. */
  139. public function beforeSave()
  140. {
  141. try {
  142. $this->attrLockValidator->validate($this);
  143. } catch (\Magento\Framework\Exception\LocalizedException $exception) {
  144. throw new \Magento\Framework\Exception\LocalizedException(__($exception->getMessage()));
  145. }
  146. $this->setData('modulePrefix', self::MODULE_NAME);
  147. return parent::beforeSave();
  148. }
  149. /**
  150. * Processing object after save data
  151. *
  152. * @return \Magento\Framework\Model\AbstractModel
  153. */
  154. public function afterSave()
  155. {
  156. /**
  157. * Fix saving attribute in admin
  158. */
  159. $this->_eavConfig->clear();
  160. return parent::afterSave();
  161. }
  162. }