![]() 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-customer/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Customer\Model; use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\CustomerMetadataInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\File\Mime; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\WriteInterface; use Magento\Framework\Url\EncoderInterface; use Magento\Framework\UrlInterface; use Magento\MediaStorage\Model\File\Uploader; use Magento\MediaStorage\Model\File\UploaderFactory; /** * Processor class for work with uploaded files */ class FileProcessor { /** * Temporary directory name */ public const TMP_DIR = 'tmp'; private const CUSTOMER_FILE_URL_PATH = 'customer/index/viewfile'; private const CUSTOMER_ADDRESS_FILE_URL_PATH = 'customer/address/viewfile'; /** * @var WriteInterface */ private $mediaDirectory; /** * @var UploaderFactory */ private $uploaderFactory; /** * @var UrlInterface */ private $urlBuilder; /** * @var EncoderInterface */ private $urlEncoder; /** * @var string */ private $entityTypeCode; /** * @var array */ private $allowedExtensions = []; /** * @var Mime */ private $mime; /** * @var string */ private $customerFileUrlPath; /** * @var string */ private $customerAddressFileUrlPath; /** * @param Filesystem $filesystem * @param UploaderFactory $uploaderFactory * @param UrlInterface $urlBuilder * @param EncoderInterface $urlEncoder * @param string $entityTypeCode * @param Mime $mime * @param array $allowedExtensions * @param string $customerFileUrlPath * @param string $customerAddressFileUrlPath */ public function __construct( Filesystem $filesystem, UploaderFactory $uploaderFactory, UrlInterface $urlBuilder, EncoderInterface $urlEncoder, $entityTypeCode, Mime $mime, array $allowedExtensions = [], string $customerFileUrlPath = self::CUSTOMER_FILE_URL_PATH, string $customerAddressFileUrlPath = self::CUSTOMER_ADDRESS_FILE_URL_PATH ) { $this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); $this->uploaderFactory = $uploaderFactory; $this->urlBuilder = $urlBuilder; $this->urlEncoder = $urlEncoder; $this->entityTypeCode = $entityTypeCode; $this->mime = $mime; $this->allowedExtensions = $allowedExtensions; $this->customerFileUrlPath = $customerFileUrlPath; $this->customerAddressFileUrlPath = $customerAddressFileUrlPath; } /** * Retrieve base64 encoded file content * * @param string $fileName * @return string */ public function getBase64EncodedData($fileName) { $filePath = $this->entityTypeCode . '/' . ($fileName === null ? '' : ltrim($fileName, '/')); $fileContent = $this->mediaDirectory->readFile($filePath); return base64_encode($fileContent); } /** * Get file statistics data * * @param string $fileName * @return array */ public function getStat($fileName) { $filePath = $this->entityTypeCode . '/' . ($fileName === null ? '' : ltrim($fileName, '/')); return $this->mediaDirectory->stat($filePath); } /** * Retrieve MIME type of requested file * * @param string $fileName * @return string */ public function getMimeType($fileName) { $filePath = $this->entityTypeCode . '/' . ($fileName === null ? '' : ltrim($fileName, '/')); $absoluteFilePath = $this->mediaDirectory->getAbsolutePath($filePath); return $this->mime->getMimeType($absoluteFilePath); } /** * Check if the file exists * * @param string $fileName * @return bool */ public function isExist($fileName) { $filePath = $this->entityTypeCode . '/' . ($fileName === null ? '' : ltrim($fileName, '/')); return $this->mediaDirectory->isExist($filePath); } /** * Retrieve customer/index/viewfile action URL * * @param string $filePath * @param string $type * @return string */ public function getViewUrl($filePath, $type) { $viewUrl = ''; if ($this->entityTypeCode == AddressMetadataInterface::ENTITY_TYPE_ADDRESS) { $viewUrl = $this->urlBuilder->getUrl( $this->customerAddressFileUrlPath, [$type => $filePath === null ? '' : $this->urlEncoder->encode(ltrim($filePath, '/'))] ); } if ($this->entityTypeCode == CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER) { $viewUrl = $this->urlBuilder->getUrl( $this->customerFileUrlPath, [$type => $filePath === null ? '' : $this->urlEncoder->encode(ltrim($filePath, '/'))] ); } return $viewUrl; } /** * Save uploaded file to temporary directory * * @param string $fileId * @return \string[] * @throws LocalizedException */ public function saveTemporaryFile($fileId) { /** @var Uploader $uploader */ $uploader = $this->uploaderFactory->create(['fileId' => $fileId]); $uploader->setFilesDispersion(false); $uploader->setFilenamesCaseSensitivity(false); $uploader->setAllowRenameFiles(true); $uploader->setAllowedExtensions($this->allowedExtensions); $path = $this->mediaDirectory->getAbsolutePath( $this->entityTypeCode . '/' . self::TMP_DIR ); $result = $uploader->save($path); if (!$result) { throw new LocalizedException( __('File can not be saved to the destination folder.') ); } unset($result['path']); return $result; } /** * Move file from temporary directory into base directory * * @param string $fileName * @return string * @throws LocalizedException */ public function moveTemporaryFile($fileName) { if (!$this->isFileTemporary($fileName)) { return $fileName; } $fileName = ltrim($fileName, '/'); $dispersionPath = Uploader::getDispersionPath($fileName); $destinationPath = $this->entityTypeCode . $dispersionPath; if (!$this->mediaDirectory->create($destinationPath)) { throw new LocalizedException( __('Unable to create directory %1.', $destinationPath) ); } if (!$this->mediaDirectory->isWritable($destinationPath)) { throw new LocalizedException( __('Destination folder is not writable or does not exists.') ); } $destinationFileName = Uploader::getNewFileName( $this->mediaDirectory->getAbsolutePath($destinationPath) . '/' . $fileName ); try { $this->mediaDirectory->renameFile( $this->entityTypeCode . '/' . self::TMP_DIR . '/' . $fileName, $destinationPath . '/' . $destinationFileName ); } catch (\Exception $e) { throw new \Magento\Framework\Exception\LocalizedException( __('Something went wrong while saving the file.'), $e ); } return $dispersionPath . '/' . $destinationFileName; } /** * Remove uploaded file * * @param string $fileName * @return bool */ public function removeUploadedFile($fileName) { $filePath = $this->entityTypeCode . '/' . ($fileName === null ? '' : ltrim($fileName, '/')); return $this->mediaDirectory->delete($filePath); } /** * Verify if given file temporary. * * @param string $fileName * @return bool */ private function isFileTemporary(string $fileName): bool { $tmpFile = $this->entityTypeCode . '/' . self::TMP_DIR . '/' . ltrim($fileName, '/'); $destinationFile = $this->entityTypeCode . '/' . ltrim($fileName, '/'); return $this->mediaDirectory->isExist($tmpFile) && !$this->mediaDirectory->isExist($destinationFile); } }