268 lines
6.6 KiB
PHP
Executable File
268 lines
6.6 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © 2016 Magento. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace FME\Banners\Model;
|
|
|
|
/**
|
|
* Catalog image uploader
|
|
*/
|
|
class ImageUploader
|
|
{
|
|
/**
|
|
* Core file storage database
|
|
*
|
|
* @var \Magento\MediaStorage\Helper\File\Storage\Database
|
|
*/
|
|
protected $coreFileStorageDatabase;
|
|
|
|
/**
|
|
* Media directory object (writable).
|
|
*
|
|
* @var \Magento\Framework\Filesystem\Directory\WriteInterface
|
|
*/
|
|
protected $mediaDirectory;
|
|
|
|
/**
|
|
* Uploader factory
|
|
*
|
|
* @var \Magento\MediaStorage\Model\File\UploaderFactory
|
|
*/
|
|
private $uploaderFactory;
|
|
|
|
/**
|
|
* Store manager
|
|
*
|
|
* @var \Magento\Store\Model\StoreManagerInterface
|
|
*/
|
|
protected $storeManager;
|
|
|
|
/**
|
|
* @var \Psr\Log\LoggerInterface
|
|
*/
|
|
protected $logger;
|
|
|
|
/**
|
|
* Base tmp path
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $baseTmpPath;
|
|
|
|
/**
|
|
* Base path
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $basePath;
|
|
|
|
/**
|
|
* Allowed extensions
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $allowedExtensions;
|
|
|
|
/**
|
|
* ImageUploader constructor
|
|
*
|
|
* @param \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDatabase
|
|
* @param \Magento\Framework\Filesystem $filesystem
|
|
* @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory
|
|
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
|
|
* @param \Psr\Log\LoggerInterface $logger
|
|
* @param string $baseTmpPath
|
|
* @param string $basePath
|
|
* @param string[] $allowedExtensions
|
|
*/
|
|
public function __construct(
|
|
\Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDatabase,
|
|
\Magento\Framework\Filesystem $filesystem,
|
|
\Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory,
|
|
\Magento\Store\Model\StoreManagerInterface $storeManager,
|
|
\Psr\Log\LoggerInterface $logger,
|
|
$baseTmpPath,
|
|
$basePath,
|
|
$allowedExtensions
|
|
) {
|
|
$this->coreFileStorageDatabase = $coreFileStorageDatabase;
|
|
$this->mediaDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA);
|
|
$this->uploaderFactory = $uploaderFactory;
|
|
$this->storeManager = $storeManager;
|
|
$this->logger = $logger;
|
|
$this->baseTmpPath = $baseTmpPath;
|
|
$this->basePath = $basePath;
|
|
$this->allowedExtensions = $allowedExtensions;
|
|
}
|
|
|
|
/**
|
|
* Set base tmp path
|
|
*
|
|
* @param string $baseTmpPath
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setBaseTmpPath($baseTmpPath)
|
|
{
|
|
$this->baseTmpPath = $baseTmpPath;
|
|
}
|
|
|
|
/**
|
|
* Set base path
|
|
*
|
|
* @param string $basePath
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setBasePath($basePath)
|
|
{
|
|
$this->basePath = $basePath;
|
|
}
|
|
|
|
/**
|
|
* Set allowed extensions
|
|
*
|
|
* @param string[] $allowedExtensions
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setAllowedExtensions($allowedExtensions)
|
|
{
|
|
$this->allowedExtensions = $allowedExtensions;
|
|
}
|
|
|
|
/**
|
|
* Retrieve base tmp path
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getBaseTmpPath()
|
|
{
|
|
|
|
return $this->baseTmpPath;
|
|
}
|
|
|
|
/**
|
|
* Retrieve base path
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getBasePath()
|
|
{
|
|
return $this->basePath;
|
|
}
|
|
|
|
/**
|
|
* Retrieve base path
|
|
*
|
|
* @return string[]
|
|
*/
|
|
public function getAllowedExtensions()
|
|
{
|
|
return $this->allowedExtensions;
|
|
}
|
|
|
|
/**
|
|
* Retrieve path
|
|
*
|
|
* @param string $path
|
|
* @param string $imageName
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getFilePath($path, $imageName)
|
|
{
|
|
return rtrim($path, '/') . '/' . ltrim($imageName, '/');
|
|
}
|
|
|
|
/**
|
|
* Checking file for moving and move it
|
|
*
|
|
* @param string $imageName
|
|
*
|
|
* @return string
|
|
*
|
|
* @throws \Magento\Framework\Exception\LocalizedException
|
|
*/
|
|
public function moveFileFromTmp($imageName)
|
|
{
|
|
$baseTmpPath = $this->getBaseTmpPath();
|
|
$basePath = $this->getBasePath();
|
|
|
|
|
|
$baseImagePath = $this->getFilePath($basePath, $imageName);
|
|
$baseTmpImagePath = $this->getFilePath($baseTmpPath, $imageName);
|
|
|
|
try {
|
|
$this->coreFileStorageDatabase->copyFile(
|
|
$baseTmpImagePath,
|
|
$baseImagePath
|
|
);
|
|
$this->mediaDirectory->renameFile(
|
|
$baseTmpImagePath,
|
|
$baseImagePath
|
|
);
|
|
} catch (\Exception $e) {
|
|
throw new \Magento\Framework\Exception\LocalizedException(
|
|
__('Something went wrong while saving the file(s).')
|
|
);
|
|
}
|
|
|
|
return $imageName;
|
|
}
|
|
|
|
/**
|
|
* Checking file for save and save it to tmp dir
|
|
*
|
|
* @param string $fileId
|
|
*
|
|
* @return string[]
|
|
*
|
|
* @throws \Magento\Framework\Exception\LocalizedException
|
|
*/
|
|
public function saveFileToTmpDir($fileId)
|
|
{
|
|
$baseTmpPath = $this->getBaseTmpPath();
|
|
|
|
|
|
$uploader = $this->uploaderFactory->create(['fileId' => $fileId]);
|
|
$uploader->setAllowedExtensions($this->getAllowedExtensions());
|
|
$uploader->setAllowRenameFiles(true);
|
|
|
|
$result = $uploader->save($this->mediaDirectory->getAbsolutePath($baseTmpPath));
|
|
|
|
if (!$result) {
|
|
throw new \Magento\Framework\Exception\LocalizedException(
|
|
__('File can not be saved to the destination folder.')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Workaround for prototype 1.7 methods "isJSON", "evalJSON" on Windows OS
|
|
*/
|
|
$result['tmp_name'] = str_replace('\\', '/', $result['tmp_name']);
|
|
$result['path'] = str_replace('\\', '/', $result['path']);
|
|
$result['url'] = $this->storeManager
|
|
->getStore()
|
|
->getBaseUrl(
|
|
\Magento\Framework\UrlInterface::URL_TYPE_MEDIA
|
|
) . $this->getFilePath($baseTmpPath, $result['file']);
|
|
$result['name'] = $result['file'];
|
|
|
|
if (isset($result['file'])) {
|
|
try {
|
|
$relativePath = rtrim($baseTmpPath, '/') . '/' . ltrim($result['file'], '/');
|
|
$this->coreFileStorageDatabase->saveFile($relativePath);
|
|
} catch (\Exception $e) {
|
|
$this->logger->critical($e);
|
|
throw new \Magento\Framework\Exception\LocalizedException(
|
|
__('Something went wrong while saving the file(s).')
|
|
);
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|