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-cms/Helper/Wysiwyg/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/magento/module-cms/Helper/Wysiwyg/Images.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Cms\Helper\Wysiwyg;

use Exception;
use InvalidArgumentException;
use Magento\Backend\Helper\Data;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Framework\App\Helper\Context;
use Magento\Framework\Escaper;
use Magento\Framework\Exception\FileSystemException;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Filesystem;
use Magento\Framework\Filesystem\Directory\Read;
use Magento\Framework\Filesystem\Directory\Write;
use Magento\Framework\UrlInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Theme\Helper\Storage;

/**
 * Wysiwyg Images Helper.
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class Images extends AbstractHelper
{
    /**
     * Image directory subpath relative to media directory
     *
     * @var string
     */
    private $imageDirectorySubpath;

    /**
     * Current directory path
     *
     * @var string
     */
    protected $_currentPath;

    /**
     * Current directory URL
     *
     * @var string
     */
    protected $_currentUrl;

    /**
     * Currently selected store ID if applicable
     *
     * @var int
     */
    protected $_storeId;

    /**
     * @var Write
     */
    protected $_directory;

    /**
     * Adminhtml data
     *
     * @var Data
     */
    protected $_backendData;

    /**
     * @var StoreManagerInterface
     */
    protected $_storeManager;

    /**
     * String escaper
     *
     * @var Escaper
     */
    protected $escaper;

    /**
     * @var Read
     */
    private $_readDirectory;

    /**
     * Construct
     *
     * @param Context $context
     * @param Data $backendData
     * @param Filesystem $filesystem
     * @param StoreManagerInterface $storeManager
     * @param Escaper $escaper
     */
    public function __construct(
        Context $context,
        Data $backendData,
        Filesystem $filesystem,
        StoreManagerInterface $storeManager,
        Escaper $escaper
    ) {
        parent::__construct($context);
        $this->_backendData = $backendData;
        $this->_storeManager = $storeManager;
        $this->escaper = $escaper;

        $this->_directory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
        $this->_directory->create($this->getStorageRoot());
        $this->_readDirectory = $filesystem->getDirectoryReadByPath($this->getStorageRoot());
    }

    /**
     * Set a specified store ID value
     *
     * @param int $store
     * @return $this
     */
    public function setStoreId($store)
    {
        $this->_storeId = $store;
        return $this;
    }

    /**
     * Images Storage root directory
     *
     * @return string
     */
    public function getStorageRoot()
    {
        return $this->_directory->getAbsolutePath($this->getStorageRootSubpath());
    }

    /**
     * Get image storage root subpath.  User is unable to traverse outside of this subpath in media gallery
     *
     * @return string
     */
    public function getStorageRootSubpath()
    {
        return '';
    }

    /**
     * Images Storage base URL
     *
     * @return string
     */
    public function getBaseUrl()
    {
        return $this->_storeManager->getStore()->getBaseUrl(UrlInterface::URL_TYPE_MEDIA);
    }

    /**
     * Ext Tree node key name
     *
     * @return string
     */
    public function getTreeNodeName()
    {
        return 'node';
    }

    /**
     * Encode path to HTML element id
     *
     * @param string $path Path to file/directory
     * @return string
     */
    public function convertPathToId($path)
    {
        $path = $path === null ? '' : str_replace($this->getStorageRoot(), '', $path);
        return $this->idEncode($path);
    }

    /**
     * Decode HTML element id.
     *
     * @param string $id
     * @return string
     * @throws InvalidArgumentException
     */
    public function convertIdToPath($id)
    {
        if ($id === Storage::NODE_ROOT) {
            return $this->getStorageRoot();
        } else {
            $path = $this->getStorageRoot() . $this->idDecode($id);

            try {
                $this->_readDirectory->getAbsolutePath($path);
            } catch (Exception $e) {
                throw new InvalidArgumentException('Path is invalid');
            }

            return $path;
        }
    }

    /**
     * Check whether using static URLs is allowed
     *
     * @return bool
     */
    public function isUsingStaticUrlsAllowed()
    {
        $checkResult = (object)[];
        $checkResult->isAllowed = false;
        $this->_eventManager->dispatch(
            'cms_wysiwyg_images_static_urls_allowed',
            ['result' => $checkResult, 'store_id' => $this->_storeId]
        );
        return $checkResult->isAllowed;
    }

    /**
     * Prepare Image insertion declaration for Wysiwyg or textarea(as_is mode)
     *
     * @param string $filename Filename transferred via Ajax
     * @param bool $renderAsTag Leave image HTML as is or transform it to controller directive
     * @return string
     */
    public function getImageHtmlDeclaration($filename, $renderAsTag = false)
    {
        $fileUrl = $this->getCurrentUrl() . $filename;
        $mediaUrl = $this->_storeManager->getStore($this->_storeId)->getBaseUrl(UrlInterface::URL_TYPE_MEDIA);
        $mediaPath = str_replace($mediaUrl, '', $fileUrl);
        $directive = sprintf('{{media url="%s"}}', $mediaPath);
        if ($renderAsTag) {
            $src = $this->isUsingStaticUrlsAllowed() ? $fileUrl : $this->escaper->escapeHtml($directive);
            $html = sprintf('<img src="%s" alt="" />', $src);
        } else {
            if ($this->isUsingStaticUrlsAllowed()) {
                $html = $fileUrl;
            } else {
                $directive = $this->urlEncoder->encode($directive);
                $html = $this->_backendData->getUrl(
                    'cms/wysiwyg/directive',
                    [
                        '___directive' => $directive,
                        '_escape_params' => false,
                    ]
                );
            }
        }
        return $html;
    }

    /**
     * Return path of the root directory for startup. Also try to create target directory if it doesn't exist
     *
     * @return string
     * @throws LocalizedException
     */
    public function getCurrentPath()
    {
        if (!$this->_currentPath) {
            $currentPath = $this->getStorageRoot();
            $path = $this->_getRequest()->getParam($this->getTreeNodeName());
            if ($path) {
                $path = $this->convertIdToPath($path);
                if ($this->_directory->isDirectory($this->_directory->getRelativePath($path))) {
                    $currentPath = $path;
                }
            }

            $currentTreePath = $this->_getRequest()->getParam('current_tree_path');
            if ($currentTreePath) {
                $currentTreePath = $this->convertIdToPath($currentTreePath);
                $this->createSubDirIfNotExist($currentTreePath);
            }

            $this->_currentPath = $currentPath;
        }

        return $this->_currentPath;
    }

    /**
     * Create subdirectory if doesn't exist
     *
     * @param string $absPath Path of subdirectory to create
     * @throws LocalizedException
     */
    private function createSubDirIfNotExist(string $absPath)
    {
        $relPath = $this->_directory->getRelativePath($absPath);
        if (!$this->_directory->isExist($relPath)) {
            try {
                $this->_directory->create($relPath);
            } catch (FileSystemException $e) {
                $message = __(
                    'Can\'t create %1 as subdirectory of %2, you might have some permission issue.',
                    $relPath,
                    $this->_directory->getAbsolutePath()
                );
                throw new LocalizedException($message);
            }
        }
    }

    /**
     * Return URL based on current selected directory or root directory for startup
     *
     * @return string
     */
    public function getCurrentUrl()
    {
        if (!$this->_currentUrl) {
            $path = $this->getCurrentPath();
            $mediaUrl = $this->_storeManager->getStore(
                $this->_storeId
            )->getBaseUrl(
                UrlInterface::URL_TYPE_MEDIA
            );
            $this->_currentUrl = rtrim($mediaUrl . $this->_directory->getRelativePath($path), '/') . '/';
        }
        return $this->_currentUrl;
    }

    /**
     * Encode string to valid HTML id element, based on base64 encoding
     *
     * @param string $string
     * @return string
     */
    public function idEncode($string)
    {
        return $string === null ? '' : strtr(base64_encode($string), '+/=', ':_-');
    }

    /**
     * Revert operation to idEncode
     *
     * @param string $string
     * @return string
     */
    public function idDecode($string)
    {
        $string = $string === null ? '' : strtr($string, ':_-', '+/=');

        // phpcs:ignore Magento2.Functions.DiscouragedFunction
        return base64_decode($string);
    }

    /**
     * Reduce filename by replacing some characters with dots
     *
     * @param string $filename
     * @param int $maxLength Maximum filename
     * @return string Truncated filename
     */
    public function getShortFilename($filename, $maxLength = 20)
    {
        if (strlen((string)$filename) <= $maxLength) {
            return $filename;
        }
        return substr($filename, 0, $maxLength) . '...';
    }

    /**
     * Set user-traversable image directory subpath relative to media directory and relative to nested storage root
     *
     * @param string $subpath
     * @return void
     */
    public function setImageDirectorySubpath($subpath)
    {
        $this->imageDirectorySubpath = $subpath;
    }
}

Spamworldpro Mini