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/Ecombricks/Interception/Framework/Code/Reader/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/Ecombricks/Interception/Framework/Code/Reader/ClassReader.php
<?php
/**
 * Copyright © eComBricks. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Ecombricks\Interception\Framework\Code\Reader;

/**
 * Class reader
 */
class ClassReader extends \Magento\Framework\Code\Reader\ClassReader
{
    
    /**
     * Interception configuration
     * 
     * @var \Ecombricks\Interception\Config\Config\Proxy
     */
    protected $interceptionInterceptionConfig;
    
    /**
     * Type reader
     * 
     * @var \Magento\Setup\Module\Di\Code\Reader\Type
     */
    protected $interceptionTypeReader;

    /**
     * Interceptable validator
     * 
     * @var \Magento\Framework\ObjectManager\InterceptableValidator
     */
    protected $interceptionInterceptableValidator;
    
    /**
     * Product metadata
     * 
     * @var \Magento\Framework\App\ProductMetadata 
     */
    protected $productMetadata;
    
    /**
     * Constructor
     * 
     * @param \Ecombricks\Interception\Config\Config\Proxy $interceptionInterceptionConfig
     * @param \Magento\Setup\Module\Di\Code\Reader\Type $interceptionTypeReader
     * @param \Magento\Framework\ObjectManager\InterceptableValidator $interceptionInterceptableValidator
     * @param \Magento\Framework\App\ProductMetadata $productMetadata
     * @return void
     */
    public function __construct(
        \Ecombricks\Interception\Config\Config\Proxy $interceptionInterceptionConfig,
        \Magento\Setup\Module\Di\Code\Reader\Type $interceptionTypeReader,
        \Magento\Framework\ObjectManager\InterceptableValidator $interceptionInterceptableValidator,
        \Magento\Framework\App\ProductMetadata $productMetadata
    )
    {
        $this->interceptionInterceptionConfig = $interceptionInterceptionConfig;
        $this->interceptionTypeReader = $interceptionTypeReader;
        $this->interceptionInterceptableValidator = $interceptionInterceptableValidator;
        $this->productMetadata = $productMetadata;
    }
    
    /**
     * Append parameters
     * 
     * @param array $result
     * @param array $parameters
     * @return $this
     */
    protected function appendParameters(&$result, $parameters)
    {
        if (empty($parameters)) {
            return $this;
        }
        foreach ($parameters as $parameter) {
            if ($parameter[2]) {
                $result[] = $parameter;
            }
        }
        foreach ($parameters as $parameter) {
            if (!$parameter[2]) {
                $result[] = $parameter;
            }
        }
        return $this;
    }
    
    /**
     * Add parameters
     * 
     * @param array $result
     * @param array $parameters
     * @return $this
     */
    protected function addParameters(&$result, $parameters)
    {
        $newResult = [];
        $parametersAdded = false;
        foreach ($result as $parameter) {
            if (!$parametersAdded && !$parameter[2]) {
                $this->appendParameters($newResult, $parameters);
                $parametersAdded = true;
            }
            $newResult[] = $parameter;
        }
        if (!$parametersAdded) {
            $this->appendParameters($newResult, $parameters);
        }
        $result = $newResult;
        return $this;
    }
    
    /**
     * Get constructor
     *
     * @param string $className
     * @return array|null
     * @throws \ReflectionException
     */
    public function getConstructor($className)
    {
        $result = parent::getConstructor($className);
        if (
            !$this->interceptionTypeReader->isConcrete($className) || 
            !$this->interceptionInterceptableValidator->validate($className)
        ) {
            return $result;
        }
        $properties = $this->interceptionInterceptionConfig->getProperties($className);
        if (empty($properties)) {
            return $result;
        }
        $parameters = [];
        foreach ($properties as $property) {
            if ($property['type'] == 'copy') {
                continue;
            }
            $type = ($property['type'] == 'object') ? '\\'.$this->interceptionInterceptionConfig->castTypeName($property['value']) : null;
            $isRequired = ($property['type'] != 'object') ? ($property['value'] === null ? true : false) : true;
            $defaultValue = (!$isRequired) ? $this->interceptionInterceptionConfig->castValue($property['type'], $property['value']) : null;
            if (version_compare($this->productMetadata->getVersion(), '2.3.4', '>=')) {
                $parameters[] = [
                    $property['name'],
                    $type,
                    $isRequired,
                    $defaultValue,
                    false,
                ];
            } else {
                $parameters[] = [
                    $property['name'],
                    $type,
                    $isRequired,
                    $defaultValue
                ];
            }
        }
        if ($result === null) {
            $result = [];
        }
        $this->addParameters($result, $parameters);
        return $result;
    }
    
}

Spamworldpro Mini