From 03d43a6fd517adb3f580b1da4995dc5d36c10c10 Mon Sep 17 00:00:00 2001 From: Oleksandr Karpenko <okarpenko@ebay.com> Date: Thu, 7 Apr 2016 14:52:24 +0300 Subject: [PATCH] MAGETWO-51604: [TD] Add functionality to save image in custom folder --- .../Theme/Model/Design/Backend/File.php | 62 ++++++-- .../Design/Config/FileUploader/Config.php | 147 ------------------ .../Config/FileUploader/FileProcessor.php | 75 +++++++-- 3 files changed, 112 insertions(+), 172 deletions(-) delete mode 100644 app/code/Magento/Theme/Model/Design/Config/FileUploader/Config.php diff --git a/app/code/Magento/Theme/Model/Design/Backend/File.php b/app/code/Magento/Theme/Model/Design/Backend/File.php index 52e4b3a35e6..5cfce8dc64b 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/File.php +++ b/app/code/Magento/Theme/Model/Design/Backend/File.php @@ -15,15 +15,16 @@ use Magento\Framework\Filesystem; use Magento\Framework\Model\Context; use Magento\Framework\Model\ResourceModel\AbstractResource; use Magento\Framework\Registry; +use Magento\Framework\UrlInterface; use Magento\MediaStorage\Model\File\UploaderFactory; -use Magento\Theme\Model\Design\Config\FileUploader\Config; +use Magento\Theme\Model\Design\Config\FileUploader\FileProcessor; class File extends BackendFile { /** - * @var Config + * @var UrlInterface */ - protected $fileConfig; + protected $urlBuilder; /** * @param Context $context @@ -33,10 +34,11 @@ class File extends BackendFile * @param UploaderFactory $uploaderFactory * @param RequestDataInterface $requestData * @param Filesystem $filesystem - * @param Config $fileConfig + * @param UrlInterface $urlBuilder * @param AbstractResource|null $resource * @param AbstractDb|null $resourceCollection * @param array $data + * @internal param Config $fileConfig * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -47,7 +49,7 @@ class File extends BackendFile UploaderFactory $uploaderFactory, RequestDataInterface $requestData, Filesystem $filesystem, - Config $fileConfig, + UrlInterface $urlBuilder, AbstractResource $resource = null, AbstractDb $resourceCollection = null, array $data = [] @@ -64,7 +66,7 @@ class File extends BackendFile $resourceCollection, $data ); - $this->fileConfig = $fileConfig; + $this->urlBuilder = $urlBuilder; } /** @@ -88,11 +90,11 @@ class File extends BackendFile } $filename = $value['file']; $result = $this->_mediaDirectory->copyFile( - $this->fileConfig->getTmpMediaPath($filename), + $this->getTmpMediaPath($filename), $this->_getUploadDir() . '/' . $filename ); if ($result) { - $this->_mediaDirectory->delete($this->fileConfig->getTmpMediaPath($filename)); + $this->_mediaDirectory->delete($this->getTmpMediaPath($filename)); if ($this->_addWhetherScopeInfo()) { $filename = $this->_prependScopeInfo($filename); } @@ -112,15 +114,19 @@ class File extends BackendFile $value = $this->getValue(); if ($value && !is_array($value)) { $fileName = $this->_getUploadDir() . '/' . basename($value); - $stat = $this->_mediaDirectory->stat($fileName); - $this->setValue([ - [ - 'url' => $this->fileConfig->getStoreMediaUrl() . $fileName, + $fileInfo = []; + if ($this->_mediaDirectory->isExist($fileName)) { + $stat = $this->_mediaDirectory->stat($fileName); + $url = $this->getStoreMediaUrl($value); + + $fileInfo = [ + 'url' => $url, 'file' => $value, 'size' => is_array($stat) ? $stat['size'] : 0, 'exists' => true - ] - ]); + ]; + } + $this->setValue([$fileInfo]); } return $this; } @@ -153,4 +159,32 @@ class File extends BackendFile { return $this->getData('value') ?: []; } + + /** + * Retrieve store media url + * + * @param string $fileName + * @return mixed + */ + public function getStoreMediaUrl($fileName) + { + $fieldConfig = $this->getFieldConfig(); + if (isset($fieldConfig['base_url'])) { + $baseUrl = $fieldConfig['base_url']; + $urlType = empty($baseUrl['type']) ? 'link' : (string)$baseUrl['type']; + $fileName = $this->urlBuilder->getBaseUrl(['_type' => $urlType]) . $baseUrl['value'] . '/' . $fileName; + } + return $fileName; + } + + /** + * Retrieve temp media path + * + * @param string $filename + * @return string + */ + public function getTmpMediaPath($filename) + { + return 'tmp/' . FileProcessor::FILE_DIR . '/' . $filename; + } } diff --git a/app/code/Magento/Theme/Model/Design/Config/FileUploader/Config.php b/app/code/Magento/Theme/Model/Design/Config/FileUploader/Config.php deleted file mode 100644 index 3d3e29e39d2..00000000000 --- a/app/code/Magento/Theme/Model/Design/Config/FileUploader/Config.php +++ /dev/null @@ -1,147 +0,0 @@ -<?php -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Theme\Model\Design\Config\FileUploader; - -use Magento\Framework\App\Helper\AbstractHelper; -use Magento\Framework\App\Helper\Context; -use Magento\Framework\Filesystem\Directory\WriteInterface; -use Magento\Framework\UrlInterface; -use Magento\Store\Model\StoreManagerInterface; -use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Filesystem; - -class Config extends AbstractHelper -{ - /** - * @var StoreManagerInterface - */ - protected $storeManager; - - /** - * Media Directory object (writable). - * - * @var WriteInterface - */ - protected $mediaDirectory; - - /** - * @var string - */ - protected $imageDir; - - /** - * @param Context $context - * @param StoreManagerInterface $storeManager - * @param Filesystem $filesystem - * @param string $imageDir - */ - public function __construct( - Context $context, - StoreManagerInterface $storeManager, - Filesystem $filesystem, - $imageDir = 'design/image' - ) { - parent::__construct($context); - $this->storeManager = $storeManager; - $this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); - $this->imageDir = $imageDir; - } - - /** - * Retrieve absolute temp media path - * - * @return string - */ - public function getAbsoluteTmpMediaPath() - { - return $this->mediaDirectory->getAbsolutePath($this->getBaseTmpMediaPath()); - } - - /** - * Retrieve base temp media url - * - * @return string - */ - public function getBaseTmpMediaUrl() - { - return $this->getStoreMediaUrl() . 'tmp/' . $this->imageDir; - } - - /** - * Retrieve temp media url - * - * @param string $file - * @return string - */ - public function getTmpMediaUrl($file) - { - return $this->getBaseTmpMediaUrl() . '/' . $this->prepareFile($file); - } - - /** - * Retrieve store media url - * - * @return mixed - */ - public function getStoreMediaUrl() - { - return $this->storeManager->getStore()->getBaseUrl(UrlInterface::URL_TYPE_MEDIA); - } - - /** - * Retrieve base media url - * - * @return string - */ - public function getBaseMediaUrl() - { - return $this->getStoreMediaUrl() . $this->imageDir; - } - - /** - * Retrieve media url - * - * @param string $file - * @return string - */ - public function getMediaUrl($file) - { - return $this->getBaseMediaUrl() . '/' . $this->prepareFile($file); - } - - /** - * Filesystem directory path of temporary images - * relatively to media folder - * - * @return string - */ - public function getBaseTmpMediaPath() - { - return 'tmp/' . $this->imageDir; - } - - /** - * Retrieve temp media path - * - * @param string $filename - * @return string - */ - public function getTmpMediaPath($filename) - { - return $this->getBaseTmpMediaPath() . '/' . $filename; - } - - /** - * Prepare file - * - * @param string $file - * @return string - */ - protected function prepareFile($file) - { - return ltrim(str_replace('\\', '/', $file), '/'); - } -} diff --git a/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php b/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php index 3bb27e0c168..349021a2129 100644 --- a/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php +++ b/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php @@ -6,10 +6,15 @@ namespace Magento\Theme\Model\Design\Config\FileUploader; use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Filesystem; use Magento\MediaStorage\Model\File\UploaderFactory; use Magento\Theme\Model\Design\Backend\File; use Magento\Theme\Model\Design\BackendModelFactory; use Magento\Theme\Model\Design\Config\MetadataProvider; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\Framework\UrlInterface; +use Magento\Store\Model\StoreManagerInterface; class FileProcessor { @@ -18,11 +23,6 @@ class FileProcessor */ protected $uploaderFactory; - /** - * @var Config - */ - protected $fileConfig; - /** * @var BackendModelFactory */ @@ -33,22 +33,42 @@ class FileProcessor */ protected $metadataProvider; + /** + * Media Directory object (writable). + * + * @var WriteInterface + */ + protected $mediaDirectory; + + /** + * @var StoreManagerInterface + */ + protected $storeManager; + + /** + * @var string + */ + const FILE_DIR = 'design/file'; + /** * @param UploaderFactory $uploaderFactory - * @param Config $fileConfig * @param BackendModelFactory $backendModelFactory * @param MetadataProvider $metadataProvider + * @param Filesystem $filesystem + * @param StoreManagerInterface $storeManager */ public function __construct( UploaderFactory $uploaderFactory, - Config $fileConfig, BackendModelFactory $backendModelFactory, - MetadataProvider $metadataProvider + MetadataProvider $metadataProvider, + Filesystem $filesystem, + StoreManagerInterface $storeManager ) { $this->uploaderFactory = $uploaderFactory; - $this->fileConfig = $fileConfig; $this->backendModelFactory = $backendModelFactory; $this->metadataProvider = $metadataProvider; + $this->storeManager = $storeManager; + $this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); } /** @@ -61,14 +81,47 @@ class FileProcessor public function saveToTmp($fileId) { try { - $result = $this->save($fileId, $this->fileConfig->getAbsoluteTmpMediaPath()); - $result['url'] = $this->fileConfig->getTmpMediaUrl($result['file']); + $result = $this->save($fileId, $this->getAbsoluteTmpMediaPath()); + $result['url'] = $this->getTmpMediaUrl($result['file']); } catch (\Exception $e) { $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()]; } return $result; } + /** + * Retrieve temp media url + * + * @param string $file + * @return string + */ + protected function getTmpMediaUrl($file) + { + return $this->storeManager->getStore()->getBaseUrl(UrlInterface::URL_TYPE_MEDIA) + . 'tmp/' . self::FILE_DIR . '/' . $this->prepareFile($file); + } + + /** + * Prepare file + * + * @param string $file + * @return string + */ + protected function prepareFile($file) + { + return ltrim(str_replace('\\', '/', $file), '/'); + } + + /** + * Retrieve absolute temp media path + * + * @return string + */ + protected function getAbsoluteTmpMediaPath() + { + return $this->mediaDirectory->getAbsolutePath('tmp/' . self::FILE_DIR); + } + /** * Save image * -- GitLab