/**
  * @param \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend $subject
  * @param \Closure $proceed
  * @param \Magento\Framework\DataObject $attribute
  * @return bool
  */
 public function aroundValidate(\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend $subject, \Closure $proceed, \Magento\Framework\DataObject $attribute)
 {
     $useDefault = $attribute->getUseDefault();
     $attrCode = $subject->getAttribute()->getAttributeCode();
     if ($useDefault && isset($useDefault[$attrCode])) {
         return true;
     }
     return $proceed($attribute);
 }
Esempio n. 2
0
 /**
  * Check whether attribute instance (attribute, backend, frontend or source) has method and applicable
  *
  * @param AbstractAttribute|\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend|\Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend|\Magento\Eav\Model\Entity\Attribute\Source\AbstractSource $instance
  * @param string $method
  * @param array $args array of arguments
  * @return boolean
  */
 protected function _isCallableAttributeInstance($instance, $method, $args)
 {
     if ($instance instanceof \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend && ($method == 'beforeSave' || $method == 'afterSave')) {
         $attributeCode = $instance->getAttribute()->getAttributeCode();
         if (isset($args[0]) && $args[0] instanceof \Magento\Framework\DataObject && $args[0]->getData($attributeCode) === false) {
             return false;
         }
     }
     return parent::_isCallableAttributeInstance($instance, $method, $args);
 }
 /**
  * @param \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend $subject
  * @param \Closure $proceed
  * @param \Magento\Framework\DataObject $entity
  * @return bool
  */
 public function aroundValidate(\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend $subject, \Closure $proceed, \Magento\Framework\DataObject $entity)
 {
     $isAllowedType = !empty(array_filter(array_map(function ($allowedEntity) use($entity) {
         return $entity instanceof $allowedEntity;
     }, $this->allowedEntityTypes)));
     if ($isAllowedType && $this->storeManager->getStore()->getId() !== Store::DEFAULT_STORE_ID) {
         $attrCode = $subject->getAttribute()->getAttributeCode();
         // Null is meaning "no value" which should be overridden by value from default scope
         if (array_key_exists($attrCode, $entity->getData()) && $entity->getData($attrCode) === null) {
             return true;
         }
     }
     return $proceed($entity);
 }