Spamworldpro Mini Shell
Spamworldpro


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-eav/Model/Validator/Attribute/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/magento/module-eav/Model/Validator/Attribute/Data.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Eav\Model\Validator\Attribute;

use Magento\Eav\Model\Attribute;
use Magento\Eav\Model\AttributeDataFactory;
use Magento\Framework\DataObject;

/**
 * EAV attribute data validator
 *
 * @author     Magento Core Team <[email protected]>
 */
class Data extends \Magento\Framework\Validator\AbstractValidator
{
    /**
     * @var array
     */
    protected $_attributes = [];

    /**
     * @var array
     */
    protected $allowedAttributesList = [];

    /**
     * @var array
     */
    protected $deniedAttributesList = [];

    /**
     * @var array
     */
    protected $_data = [];

    /**
     * @var AttributeDataFactory
     */
    protected $_attrDataFactory;

    /**
     * @var array
     */
    private $ignoredAttributesByTypesList;

    /**
     * @param AttributeDataFactory $attrDataFactory
     * @param array $ignoredAttributesByTypesList
     */
    public function __construct(
        AttributeDataFactory $attrDataFactory,
        array $ignoredAttributesByTypesList = []
    ) {
        $this->_attrDataFactory = $attrDataFactory;
        $this->ignoredAttributesByTypesList = $ignoredAttributesByTypesList;
    }

    /**
     * Set list of attributes for validation in isValid method.
     *
     * @param Attribute[] $attributes
     * @return $this
     */
    public function setAttributes(array $attributes)
    {
        $this->_attributes = $attributes;
        return $this;
    }

    /**
     * Set codes of attributes that should be filtered in validation process.
     *
     * All attributes not in this list 't be involved in validation.
     *
     * @param array $attributesCodes
     * @return $this
     */
    public function setAllowedAttributesList(array $attributesCodes)
    {
        $this->allowedAttributesList = $attributesCodes;
        return $this;
    }

    /**
     * Set codes of attributes that should be excluded in validation process.
     *
     * All attributes in this list won't be involved in validation.
     *
     * @param array $attributesCodes
     * @return $this
     */
    public function setDeniedAttributesList(array $attributesCodes)
    {
        $this->deniedAttributesList = $attributesCodes;
        return $this;
    }

    /**
     * Set data for validation in isValid method.
     *
     * @param array $data
     * @return $this
     */
    public function setData(array $data)
    {
        $this->_data = $data;
        return $this;
    }

    /**
     * Validate EAV model attributes with data models
     *
     * @param \Magento\Framework\Model\AbstractModel $entity
     * @return bool
     */
    public function isValid($entity)
    {
        /** @var $attributes Attribute[] */
        $attributes = $this->_getAttributes($entity);

        $data = $this->retrieveData($entity);

        foreach ($attributes as $attribute) {
            $attributeCode = $attribute->getAttributeCode();
            if (!$attribute->getDataModel() && !$attribute->getFrontendInput()) {
                continue;
            }
            if (!isset($data[$attributeCode]) && !$attribute->getIsVisible()) {
                continue;
            }

            $dataModel = $this->_attrDataFactory->create($attribute, $entity);
            $dataModel->setExtractedData($data);
            if (!isset($data[$attributeCode])) {
                $data[$attributeCode] = '';
            }
            $result = $dataModel->validateValue($data[$attributeCode]);
            if (true !== $result) {
                $this->_addErrorMessages($attributeCode, (array)$result);
            }
        }
        return count($this->_messages) == 0;
    }

    /**
     * Get attributes involved in validation.
     *
     * This method return specified $_attributes if they defined by setAttributes method, otherwise if $entity
     * is EAV-model it returns it's all available attributes, otherwise it return empty array.
     *
     * @param \Magento\Framework\Model\AbstractModel $entity
     * @return array
     */
    protected function _getAttributes($entity)
    {
        /** @var \Magento\Eav\Model\Attribute[] $attributes */
        $attributes = [];
        $ignoreAttributes = $this->deniedAttributesList;

        if ($this->_attributes) {
            $attributes = $this->_attributes;
        } elseif ($entity instanceof \Magento\Framework\Model\AbstractModel &&
            $entity->getResource() instanceof \Magento\Eav\Model\Entity\AbstractEntity
        ) { // $entity is EAV-model
            /** @var \Magento\Eav\Model\Entity\Type $entityType */
            $entityType = $entity->getEntityType();
            $attributes = $entityType->getAttributeCollection()->getItems();

            $ignoredTypeAttributes = $this->ignoredAttributesByTypesList[$entityType->getEntityTypeCode()] ?? [];
            if ($ignoredTypeAttributes) {
                $ignoreAttributes = array_merge($ignoreAttributes, $ignoredTypeAttributes);
            }
        }

        $attributesByCode = [];
        $attributesCodes = [];
        foreach ($attributes as $attribute) {
            $attributeCode = $attribute->getAttributeCode();
            $attributesByCode[$attributeCode] = $attribute;
            $attributesCodes[] = $attributeCode;
        }

        if ($this->allowedAttributesList) {
            $ignoreAttributes = array_merge(
                $ignoreAttributes,
                array_diff($attributesCodes, $this->allowedAttributesList)
            );
        }
        foreach ($ignoreAttributes as $attributeCode) {
            unset($attributesByCode[$attributeCode]);
        }

        return $attributesByCode;
    }

    /**
     * Add error messages
     *
     * @param string $code
     * @param array $messages
     * @return void
     */
    protected function _addErrorMessages($code, array $messages)
    {
        if (!array_key_exists($code, $this->_messages)) {
            $this->_messages[$code] = $messages;
        } else {
            $this->_messages[$code] = array_merge($this->_messages[$code], $messages);
        }
    }

    /**
     * Retrieve entity data
     *
     * @param \Magento\Framework\Model\AbstractModel $entity
     * @return array
     */
    private function retrieveData($entity): array
    {
        $data = [];
        if ($this->_data) {
            $data = $this->_data;
        } elseif ($entity instanceof DataObject) {
            $data = $entity->getData();
        }

        return $data;
    }
}

Spamworldpro Mini