diff --git a/app/code/Magento/Config/Model/Config/Backend/File.php b/app/code/Magento/Config/Model/Config/Backend/File.php index f12d7bfdcec8ce5a935329730c33df742c015e18..809014f11f46f0109fe1476108642539b7e8f387 100644 --- a/app/code/Magento/Config/Model/Config/Backend/File.php +++ b/app/code/Magento/Config/Model/Config/Backend/File.php @@ -179,7 +179,6 @@ class File extends \Magento\Framework\App\Config\Value protected function _getUploadDir() { $fieldConfig = $this->getFieldConfig(); - /* @var $fieldConfig \Magento\Framework\Simplexml\Element */ if (!array_key_exists('upload_dir', $fieldConfig)) { throw new \Magento\Framework\Exception\LocalizedException( @@ -189,13 +188,15 @@ class File extends \Magento\Framework\App\Config\Value if (is_array($fieldConfig['upload_dir'])) { $uploadDir = $fieldConfig['upload_dir']['value']; - if (array_key_exists('scope_info', $fieldConfig['upload_dir']) && $fieldConfig['upload_dir']['scope_info'] + if ( + array_key_exists('scope_info', $fieldConfig['upload_dir']) + && $fieldConfig['upload_dir']['scope_info'] ) { $uploadDir = $this->_appendScopeInfo($uploadDir); } if (array_key_exists('config', $fieldConfig['upload_dir'])) { - $uploadDir = $this->_mediaDirectory->getAbsolutePath($uploadDir); + $uploadDir = $this->getUploadDirPath($uploadDir); } } else { $uploadDir = (string)$fieldConfig['upload_dir']; @@ -204,6 +205,17 @@ class File extends \Magento\Framework\App\Config\Value return $uploadDir; } + /** + * Retrieve upload directory path + * + * @param string $uploadDir + * @return string + */ + protected function getUploadDirPath($uploadDir) + { + return $this->_mediaDirectory->getAbsolutePath($uploadDir); + } + /** * Prepend path with scope info * diff --git a/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/FileUploader/Save.php b/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/FileUploader/Save.php index a9595a01207c085460a0ce9d68eb5d4c474ff624..23eb7590ca604a6b3ecdfdedfab810bc77f31d7f 100644 --- a/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/FileUploader/Save.php +++ b/app/code/Magento/Theme/Controller/Adminhtml/Design/Config/FileUploader/Save.php @@ -8,25 +8,25 @@ namespace Magento\Theme\Controller\Adminhtml\Design\Config\FileUploader; use Magento\Backend\App\Action; use Magento\Backend\App\Action\Context; use Magento\Framework\Controller\ResultFactory; -use Magento\Theme\Model\Design\Config\FileUploader\ImageProcessor; +use Magento\Theme\Model\Design\Config\FileUploader\FileProcessor; class Save extends Action { /** - * @var ImageProcessor + * @var FileProcessor */ - protected $imageProcessor; + protected $fileProcessor; /** * @param Context $context - * @param ImageProcessor $imageProcessor + * @param FileProcessor $fileProcessor */ public function __construct( Context $context, - ImageProcessor $imageProcessor + FileProcessor $fileProcessor ) { parent::__construct($context); - $this->imageProcessor = $imageProcessor; + $this->fileProcessor = $fileProcessor; } /** @@ -34,7 +34,7 @@ class Save extends Action */ public function execute() { - $result = $this->imageProcessor->saveToTmp(key($_FILES)); + $result = $this->fileProcessor->saveToTmp(key($_FILES)); return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($result); } } diff --git a/app/code/Magento/Theme/Model/Design/Backend/Favicon.php b/app/code/Magento/Theme/Model/Design/Backend/Favicon.php index 46496287caf88a2c2d76fbfaf931642b75932801..ebab873f99f60a9f4d77f688f25861213151ed63 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/Favicon.php +++ b/app/code/Magento/Theme/Model/Design/Backend/Favicon.php @@ -5,12 +5,36 @@ */ namespace Magento\Theme\Model\Design\Backend; +use Magento\Framework\Filesystem; + class Favicon extends Image { /** - * @var string + * The tail part of directory path for uploading + * + */ + const UPLOAD_DIR = 'favicon'; + + /** + * Return path to directory for upload file + * + * @return string + * @throw \Magento\Framework\Exception\LocalizedException + */ + protected function _getUploadDir() + { + return $this->_mediaDirectory->getRelativePath($this->_appendScopeInfo(self::UPLOAD_DIR)); + } + + /** + * Makes a decision about whether to add info about the scope. + * + * @return boolean */ - protected $uploadDir = 'favicon'; + protected function _addWhetherScopeInfo() + { + return true; + } /** * Getter for allowed extensions of uploaded files. diff --git a/app/code/Magento/Theme/Model/Design/Backend/File.php b/app/code/Magento/Theme/Model/Design/Backend/File.php new file mode 100644 index 0000000000000000000000000000000000000000..52e4b3a35e6004c62d018a8105a3a0df7ae1c7e5 --- /dev/null +++ b/app/code/Magento/Theme/Model/Design/Backend/File.php @@ -0,0 +1,156 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Theme\Model\Design\Backend; + +use Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface; +use Magento\Config\Model\Config\Backend\File as BackendFile; +use Magento\Framework\App\Cache\TypeListInterface; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\Data\Collection\AbstractDb; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Filesystem; +use Magento\Framework\Model\Context; +use Magento\Framework\Model\ResourceModel\AbstractResource; +use Magento\Framework\Registry; +use Magento\MediaStorage\Model\File\UploaderFactory; +use Magento\Theme\Model\Design\Config\FileUploader\Config; + +class File extends BackendFile +{ + /** + * @var Config + */ + protected $fileConfig; + + /** + * @param Context $context + * @param Registry $registry + * @param ScopeConfigInterface $config + * @param TypeListInterface $cacheTypeList + * @param UploaderFactory $uploaderFactory + * @param RequestDataInterface $requestData + * @param Filesystem $filesystem + * @param Config $fileConfig + * @param AbstractResource|null $resource + * @param AbstractDb|null $resourceCollection + * @param array $data + * @SuppressWarnings(PHPMD.ExcessiveParameterList) + */ + public function __construct( + Context $context, + Registry $registry, + ScopeConfigInterface $config, + TypeListInterface $cacheTypeList, + UploaderFactory $uploaderFactory, + RequestDataInterface $requestData, + Filesystem $filesystem, + Config $fileConfig, + AbstractResource $resource = null, + AbstractDb $resourceCollection = null, + array $data = [] + ) { + parent::__construct( + $context, + $registry, + $config, + $cacheTypeList, + $uploaderFactory, + $requestData, + $filesystem, + $resource, + $resourceCollection, + $data + ); + $this->fileConfig = $fileConfig; + } + + /** + * Save uploaded file and remote temporary file before saving config value + * + * @return $this + * @throws LocalizedException + */ + public function beforeSave() + { + $values = $this->getValue(); + $value = reset($values) ?: []; + if (!isset($value['file'])) { + throw new LocalizedException( + __('%1 does not contain field \'file\'', $this->getData('field_config/field')) + ); + } + if (isset($value['exists'])) { + $this->setValue($value['file']); + return $this; + } + $filename = $value['file']; + $result = $this->_mediaDirectory->copyFile( + $this->fileConfig->getTmpMediaPath($filename), + $this->_getUploadDir() . '/' . $filename + ); + if ($result) { + $this->_mediaDirectory->delete($this->fileConfig->getTmpMediaPath($filename)); + if ($this->_addWhetherScopeInfo()) { + $filename = $this->_prependScopeInfo($filename); + } + $this->setValue($filename); + } else { + $this->unsValue(); + } + + return $this; + } + + /** + * @return array + */ + public function afterLoad() + { + $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, + 'file' => $value, + 'size' => is_array($stat) ? $stat['size'] : 0, + 'exists' => true + ] + ]); + } + return $this; + } + + /** + * Getter for allowed extensions of uploaded files + * + * @return array + */ + public function getAllowedExtensions() + { + return []; + } + + /** + * Retrieve upload directory path + * + * @param string $uploadDir + * @return string + */ + protected function getUploadDirPath($uploadDir) + { + return $this->_mediaDirectory->getRelativePath($uploadDir); + } + + /** + * @return array + */ + public function getValue() + { + return $this->getData('value') ?: []; + } +} diff --git a/app/code/Magento/Theme/Model/Design/Backend/Image.php b/app/code/Magento/Theme/Model/Design/Backend/Image.php index 8f7dbbca100d4588aaae35e6cb1361ff4fccfcaf..f9e80b921fd1391edba904002b1aff06eb3a8fae 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/Image.php +++ b/app/code/Magento/Theme/Model/Design/Backend/Image.php @@ -5,129 +5,8 @@ */ namespace Magento\Theme\Model\Design\Backend; -use Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface; -use \Magento\Config\Model\Config\Backend\File as File; -use Magento\Framework\App\Cache\TypeListInterface; -use Magento\Framework\App\Config\ScopeConfigInterface; -use Magento\Framework\Data\Collection\AbstractDb; -use Magento\Framework\Exception\LocalizedException; -use Magento\Framework\Filesystem; -use Magento\Framework\Model\Context; -use Magento\Framework\Model\ResourceModel\AbstractResource; -use Magento\Framework\Registry; -use Magento\MediaStorage\Model\File\UploaderFactory; -use Magento\Theme\Model\Design\Config\FileUploader\Config; - class Image extends File { - /** - * @var string - */ - protected $uploadDir = 'image'; - - /** - * @var Config - */ - protected $imageConfig; - - /** - * @param Context $context - * @param Registry $registry - * @param ScopeConfigInterface $config - * @param TypeListInterface $cacheTypeList - * @param UploaderFactory $uploaderFactory - * @param RequestDataInterface $requestData - * @param Filesystem $filesystem - * @param Config $imageConfig - * @param AbstractResource|null $resource - * @param AbstractDb|null $resourceCollection - * @param array $data - * @SuppressWarnings(PHPMD.ExcessiveParameterList) - */ - public function __construct( - Context $context, - Registry $registry, - ScopeConfigInterface $config, - TypeListInterface $cacheTypeList, - UploaderFactory $uploaderFactory, - RequestDataInterface $requestData, - Filesystem $filesystem, - Config $imageConfig, - AbstractResource $resource = null, - AbstractDb $resourceCollection = null, - array $data = [] - ) { - parent::__construct( - $context, - $registry, - $config, - $cacheTypeList, - $uploaderFactory, - $requestData, - $filesystem, - $resource, - $resourceCollection, - $data - ); - $this->imageConfig = $imageConfig; - } - - /** - * Save uploaded file and remote temporary file before saving config value - * - * @return $this - * @throws LocalizedException - */ - public function beforeSave() - { - $values = $this->getValue(); - $value = reset($values) ?: []; - if (!isset($value['file'])) { - throw new LocalizedException( - __('%1 does not contain field \'file\'', $this->getData('field_config/field')) - ); - } - if (isset($value['exists'])) { - $this->setValue($value['file']); - return $this; - } - $filename = $value['file']; - $result = $this->_mediaDirectory->copyFile( - $this->imageConfig->getTmpMediaPath($filename), - $this->_appendScopeInfo($this->uploadDir) . '/' . $filename - ); - if ($result) { - $this->_mediaDirectory->delete($this->imageConfig->getTmpMediaPath($filename)); - $filename = $this->_prependScopeInfo($filename); - $this->setValue($filename); - } else { - $this->unsValue(); - } - - return $this; - } - - /** - * @return array - */ - public function afterLoad() - { - $value = $this->getValue(); - if ($value && !is_array($value)) { - $fileName = '/' . $this->uploadDir . '/' . $value; - $stat = $this->_mediaDirectory->stat($fileName); - $this->setValue([ - [ - 'url' => $this->imageConfig->getStoreMediaUrl() . $fileName, - 'file' => $value, - 'size' => is_array($stat) ? $stat['size'] : 0, - 'exists' => true - ] - ]); - } - return $this; - } - /** * Getter for allowed extensions of uploaded files * @@ -137,12 +16,4 @@ class Image extends File { return ['jpg', 'jpeg', 'gif', 'png']; } - - /** - * @return array - */ - public function getValue() - { - return $this->getData('value') ?: []; - } } diff --git a/app/code/Magento/Theme/Model/Design/Backend/Logo.php b/app/code/Magento/Theme/Model/Design/Backend/Logo.php index b658bfefa312d3c4484b148b9bf94c30f2b33305..78bc7603492aba395fbd7bce9493ce21cf2ee1e1 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/Logo.php +++ b/app/code/Magento/Theme/Model/Design/Backend/Logo.php @@ -8,9 +8,31 @@ namespace Magento\Theme\Model\Design\Backend; class Logo extends Image { /** - * @var string + * The tail part of directory path for uploading + * */ - protected $uploadDir = 'logo'; + const UPLOAD_DIR = 'logo'; + + /** + * Return path to directory for upload file + * + * @return string + * @throw \Magento\Framework\Exception\LocalizedException + */ + protected function _getUploadDir() + { + return $this->_mediaDirectory->getRelativePath($this->_appendScopeInfo(self::UPLOAD_DIR)); + } + + /** + * Makes a decision about whether to add info about the scope. + * + * @return boolean + */ + protected function _addWhetherScopeInfo() + { + return true; + } /** * Getter for allowed extensions of uploaded files. diff --git a/app/code/Magento/Theme/Model/Design/Config/FileUploader/ImageProcessor.php b/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php similarity index 86% rename from app/code/Magento/Theme/Model/Design/Config/FileUploader/ImageProcessor.php rename to app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php index f8eaa277b157469ef1a95f0f189b5a34d3dceb05..3bb27e0c168e6b5aea5f18aa20aeac3c5a6ee7bf 100644 --- a/app/code/Magento/Theme/Model/Design/Config/FileUploader/ImageProcessor.php +++ b/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php @@ -7,11 +7,11 @@ namespace Magento\Theme\Model\Design\Config\FileUploader; use Magento\Framework\Exception\LocalizedException; use Magento\MediaStorage\Model\File\UploaderFactory; -use Magento\Theme\Model\Design\Backend\Image; +use Magento\Theme\Model\Design\Backend\File; use Magento\Theme\Model\Design\BackendModelFactory; use Magento\Theme\Model\Design\Config\MetadataProvider; -class ImageProcessor +class FileProcessor { /** * @var UploaderFactory @@ -21,7 +21,7 @@ class ImageProcessor /** * @var Config */ - protected $imageConfig; + protected $fileConfig; /** * @var BackendModelFactory @@ -35,18 +35,18 @@ class ImageProcessor /** * @param UploaderFactory $uploaderFactory - * @param Config $imageConfig + * @param Config $fileConfig * @param BackendModelFactory $backendModelFactory * @param MetadataProvider $metadataProvider */ public function __construct( UploaderFactory $uploaderFactory, - Config $imageConfig, + Config $fileConfig, BackendModelFactory $backendModelFactory, MetadataProvider $metadataProvider ) { $this->uploaderFactory = $uploaderFactory; - $this->imageConfig = $imageConfig; + $this->fileConfig = $fileConfig; $this->backendModelFactory = $backendModelFactory; $this->metadataProvider = $metadataProvider; } @@ -61,8 +61,8 @@ class ImageProcessor public function saveToTmp($fileId) { try { - $result = $this->save($fileId, $this->imageConfig->getAbsoluteTmpMediaPath()); - $result['url'] = $this->imageConfig->getTmpMediaUrl($result['file']); + $result = $this->save($fileId, $this->fileConfig->getAbsoluteTmpMediaPath()); + $result['url'] = $this->fileConfig->getTmpMediaUrl($result['file']); } catch (\Exception $e) { $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()]; } @@ -80,7 +80,7 @@ class ImageProcessor protected function save($fileId, $destination) { $result = ['file' => '', 'size' => '']; - /** @var Image $backendModel */ + /** @var File $backendModel */ $backendModel = $this->getBackendModel($fileId); $uploader = $this->uploaderFactory->create(['fileId' => $fileId]); $uploader->setAllowRenameFiles(true); @@ -94,7 +94,7 @@ class ImageProcessor * Retrieve backend model by field code * * @param string $code - * @return Image + * @return File * @throws LocalizedException */ protected function getBackendModel($code) diff --git a/app/code/Magento/Theme/Model/Design/Config/Storage.php b/app/code/Magento/Theme/Model/Design/Config/Storage.php index aa518a085a54805556110be7cb96d1eb16e11e35..5e47d1aefe4e0255174833e55e6f8e77b0bd73aa 100644 --- a/app/code/Magento/Theme/Model/Design/Config/Storage.php +++ b/app/code/Magento/Theme/Model/Design/Config/Storage.php @@ -77,7 +77,9 @@ class Storage foreach ($fieldsData as &$fieldData) { $value = $this->valueProcessor->process( $this->scopeConfig->getValue($fieldData->getPath(), $scope, $scopeId), - $fieldData->getPath() + $scope, + $scopeId, + $fieldData->getFieldConfig() ); if ($value !== null) { $fieldData->setValue($value); @@ -113,7 +115,7 @@ class Storage $fieldData->getValue(), $designConfig->getScope(), $designConfig->getScopeId(), - $fieldData->getFieldConfig()['path'] + $fieldData->getFieldConfig() ) ) { $saveTransaction->addObject($backendModel); diff --git a/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php b/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php index a65c566a61b3461a0f90b405baff1010b1a0d505..0a1c61f75644f02d64c5b40197735b715f71afb5 100644 --- a/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php +++ b/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php @@ -47,21 +47,25 @@ class ValueChecker * @param string $value * @param string $scope * @param int $scopeId - * @param string $path + * @param array $fieldConfig * @return bool */ - public function isDifferentFromDefault($value, $scope, $scopeId, $path) + public function isDifferentFromDefault($value, $scope, $scopeId, array $fieldConfig) { list($scope, $scopeId) = $this->fallbackResolver->getFallbackScope($scope, $scopeId); if ($scope) { return !$this->isEqual( $this->valueProcessor->process( $value, - $path + $scope, + $scopeId, + $fieldConfig ), $this->valueProcessor->process( - $this->appConfig->getValue($path, $scope, $scopeId), - $path + $this->appConfig->getValue($fieldConfig['path'], $scope, $scopeId), + $scope, + $scopeId, + $fieldConfig ) ); } diff --git a/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php b/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php index 7ce660f625f09e4e3426eba6a52e810d9336355c..ed3ae3809fdbe1c67e638673ce571ea8c219039e 100644 --- a/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php +++ b/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php @@ -27,12 +27,22 @@ class ValueProcessor * Process value * * @param string $value - * @param string $path + * @param string $scope + * @param string $scopeId + * @param array $fieldConfig * @return mixed */ - public function process($value, $path) + public function process($value, $scope, $scopeId, array $fieldConfig) { - $backendModel = $this->backendModelFactory->createByPath($path, ['value' => $value]); + $backendModel = $this->backendModelFactory->createByPath( + $fieldConfig['path'], + [ + 'value' => $value, + 'field_config' => $fieldConfig, + 'scope' => $scope, + 'scope_id' => $scopeId + ] + ); $backendModel->afterLoad(); return $backendModel->getValue(); } diff --git a/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Collection.php index 0bd41722b9cfa37635ef6e52c0b52a02c3c091a8..eeb73108d96e844f2366fedfaa34ca1d5bbe691d 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Collection.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Collection.php @@ -73,7 +73,15 @@ class Collection extends ConfigCollection protected function _afterLoad() { foreach ($this->_items as $item) { - $item->setData('value', $this->valueProcessor->process($item->getData('value'), $item->getData('path'))); + $item->setData( + 'value', + $this->valueProcessor->process( + $item->getData('value'), + $this->getData('scope'), + $this->getData('scope_id'), + $item->getData('path') + ) + ); } parent::_afterLoad(); } diff --git a/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Scope/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Scope/Collection.php index 9196d6d55644bb7d5b740b01f70384ec8676f229..7c1b50024ba6ecc85b9ffcccabe9c202cdfa2828 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Scope/Collection.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Design/Config/Scope/Collection.php @@ -101,7 +101,9 @@ class Collection extends \Magento\Framework\Data\Collection if (isset($itemData['use_in_grid']) && (boolean)$itemData['use_in_grid']) { $result[$itemName] = $this->valueProcessor->process( $this->appConfig->getValue($itemData['path'], $scope, $scopeId), - $itemData['path'] + $scope, + $scopeId, + $itemData ); } } diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/FileUploader/SaveTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/FileUploader/SaveTest.php index c155934c9f579e2138bd34f1ac006424f1b12891..011f89b342bc775759f2eaf0b40b34f4b0ca6699 100644 --- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/FileUploader/SaveTest.php +++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/Design/Config/FileUploader/SaveTest.php @@ -19,8 +19,8 @@ class SaveTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Framework\Controller\ResultInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $resultPage; - /** @var \Magento\Theme\Model\Design\Config\FileUploader\ImageProcessor|\PHPUnit_Framework_MockObject_MockObject */ - protected $imageProcessor; + /** @var \Magento\Theme\Model\Design\Config\FileUploader\FileProcessor|\PHPUnit_Framework_MockObject_MockObject */ + protected $fileProcessor; /** @var Save */ protected $controller; @@ -36,14 +36,14 @@ class SaveTest extends \PHPUnit_Framework_TestCase $this->resultPage = $this->getMockBuilder('Magento\Framework\Controller\ResultInterface') ->setMethods(['setData']) ->getMockForAbstractClass(); - $this->imageProcessor = $this->getMockBuilder('Magento\Theme\Model\Design\Config\FileUploader\ImageProcessor') + $this->fileProcessor = $this->getMockBuilder('Magento\Theme\Model\Design\Config\FileUploader\FileProcessor') ->disableOriginalConstructor() ->getMock(); $this->context->expects($this->once()) ->method('getResultFactory') ->willReturn($this->resultFactory); - $this->controller = new Save($this->context, $this->imageProcessor); + $this->controller = new Save($this->context, $this->fileProcessor); } public function testExecute() @@ -55,7 +55,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase ]; $resultJson = '{"file": "", "url": ""}'; - $this->imageProcessor->expects($this->once()) + $this->fileProcessor->expects($this->once()) ->method('saveToTmp') ->with('test_key') ->willReturn($result); diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ImageTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php similarity index 72% rename from app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ImageTest.php rename to app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php index ce2a8c47419e79487940f5b79451fe2287e833b0..c11b539f2b807953673046aa075a46398272c810 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ImageTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php @@ -5,20 +5,19 @@ */ namespace Magento\Theme\Test\Unit\Model\Design\Backend; -use Magento\Theme\Model\Design\Backend\Image; +use Magento\Theme\Model\Design\Backend\File; use Magento\Framework\App\Filesystem\DirectoryList; -class ImageTest extends \PHPUnit_Framework_TestCase +class FileTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\Framework\Filesystem\Directory\WriteInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $mediaDirectory; /** @var \Magento\Theme\Model\Design\Config\FileUploader\Config|\PHPUnit_Framework_MockObject_MockObject */ - protected $imageConfig; + protected $fileConfig; - /** @var Image */ - protected $imageBackend; + /** @var File */ + protected $fileBackend; public function setUp() { @@ -31,7 +30,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase 'Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface' ); $filesystem = $this->getMockObject('Magento\Framework\Filesystem'); - $this->imageConfig = $this->getMockObject('Magento\Theme\Model\Design\Config\FileUploader\Config'); + $this->fileConfig = $this->getMockObject('Magento\Theme\Model\Design\Config\FileUploader\Config'); $this->mediaDirectory = $this->getMockObjectForAbstractClass( 'Magento\Framework\Filesystem\Directory\WriteInterface' @@ -42,7 +41,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase ->with(DirectoryList::MEDIA) ->willReturn($this->mediaDirectory); - $this->imageBackend = new Image( + $this->fileBackend = new File( $context, $registry, $config, @@ -50,13 +49,13 @@ class ImageTest extends \PHPUnit_Framework_TestCase $uploaderFactory, $requestData, $filesystem, - $this->imageConfig + $this->fileConfig ); } public function tearDown() { - unset($this->imageBackend); + unset($this->fileBackend); } /** @@ -86,26 +85,34 @@ class ImageTest extends \PHPUnit_Framework_TestCase public function testAfterLoad() { - $value = 'store/1/filename.jpg'; - $this->imageBackend->setValue($value); + $value = '/filename.jpg'; + $this->fileBackend->setValue($value); + $this->fileBackend->setFieldConfig( + [ + 'upload_dir' => [ + 'value' => 'value', + 'config' => 'system/filesystem/media', + ], + ] + ); $this->mediaDirectory->expects($this->once()) ->method('stat') - ->with('/image/' . $value) + ->with($value) ->willReturn(['size' => 234234]); - $this->imageConfig->expects($this->once()) + $this->fileConfig->expects($this->once()) ->method('getStoreMediaUrl') ->willReturn('http://magento2.com/pub/media'); - $this->imageBackend->afterLoad(); + $this->fileBackend->afterLoad(); $this->assertEquals( [ [ - 'url' => 'http://magento2.com/pub/media/image/' . $value, + 'url' => 'http://magento2.com/pub/media' . $value, 'file' => $value, 'size' => 234234, 'exists' => true, ] ], - $this->imageBackend->getValue() + $this->fileBackend->getValue() ); } @@ -113,9 +120,9 @@ class ImageTest extends \PHPUnit_Framework_TestCase { $value = 'filename.jpg'; $tmpMediaPath = 'tmp/image/' . $value; - $this->imageBackend->setScope('store'); - $this->imageBackend->setScopeId(1); - $this->imageBackend->setValue( + $this->fileBackend->setScope('store'); + $this->fileBackend->setScopeId(1); + $this->fileBackend->setValue( [ [ 'url' => 'http://magento2.com/pub/media/tmp/image/' . $value, @@ -124,24 +131,29 @@ class ImageTest extends \PHPUnit_Framework_TestCase ] ] ); - $this->imageConfig->expects($this->exactly(2)) + $this->fileBackend->setFieldConfig( + [ + 'upload_dir' => [ + 'value' => 'value', + 'config' => 'system/filesystem/media', + ], + ] + ); + $this->fileConfig->expects($this->exactly(2)) ->method('getTmpMediaPath') ->with($value) ->willReturn($tmpMediaPath); $this->mediaDirectory->expects($this->once()) ->method('copyFile') - ->with( - $tmpMediaPath, - 'image/store/1/' . $value - ) + ->with($tmpMediaPath, '/' . $value) ->willReturn(true); $this->mediaDirectory->expects($this->once()) ->method('delete') ->with($tmpMediaPath); - $this->imageBackend->beforeSave(); - $this->assertEquals('store/1/filename.jpg', $this->imageBackend->getValue()); + $this->fileBackend->beforeSave(); + $this->assertEquals('filename.jpg', $this->fileBackend->getValue()); } /** @@ -150,7 +162,7 @@ class ImageTest extends \PHPUnit_Framework_TestCase */ public function testBeforeSaveWithoutFile() { - $this->imageBackend->setData( + $this->fileBackend->setData( [ 'value' => [ 'test' => '' @@ -160,13 +172,13 @@ class ImageTest extends \PHPUnit_Framework_TestCase ], ] ); - $this->imageBackend->beforeSave(); + $this->fileBackend->beforeSave(); } public function testBeforeSaveWithExistingFile() { $value = 'filename.jpg'; - $this->imageBackend->setValue( + $this->fileBackend->setValue( [ [ 'url' => 'http://magento2.com/pub/media/tmp/image/' . $value, @@ -176,10 +188,10 @@ class ImageTest extends \PHPUnit_Framework_TestCase ] ] ); - $this->imageBackend->beforeSave(); + $this->fileBackend->beforeSave(); $this->assertEquals( $value, - $this->imageBackend->getValue() + $this->fileBackend->getValue() ); } } diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/ImageProcessorTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php similarity index 90% rename from app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/ImageProcessorTest.php rename to app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php index 4449104fdd76148cf97de19a831df4808e474a5e..efb8334e67a17a6fbf43379962d1b5d9c9b3c9d1 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/ImageProcessorTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php @@ -5,9 +5,9 @@ */ namespace Magento\Theme\Test\Unit\Model\Design\Config\FileUploader; -use Magento\Theme\Model\Design\Config\FileUploader\ImageProcessor; +use Magento\Theme\Model\Design\Config\FileUploader\FileProcessor; -class ImageProcessorTest extends \PHPUnit_Framework_TestCase +class FileProcessorTest extends \PHPUnit_Framework_TestCase { /** @var \Magento\MediaStorage\Model\File\UploaderFactory|\PHPUnit_Framework_MockObject_MockObject */ protected $uploaderFactory; @@ -21,14 +21,14 @@ class ImageProcessorTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Theme\Model\Design\BackendModelFactory|\PHPUnit_Framework_MockObject_MockObject */ protected $backendModelFactory; - /** @var \Magento\Theme\Model\Design\Backend\Image|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Theme\Model\Design\Backend\File|\PHPUnit_Framework_MockObject_MockObject */ protected $backendModel; /** @var \Magento\Theme\Model\Design\Config\MetadataProvider|\PHPUnit_Framework_MockObject_MockObject */ protected $metadataProvider; - /** @var ImageProcessor */ - protected $imageProcessor; + /** @var FileProcessor */ + protected $fileProcessor; public function setUp() { @@ -45,13 +45,13 @@ class ImageProcessorTest extends \PHPUnit_Framework_TestCase $this->backendModelFactory = $this->getMockBuilder('Magento\Theme\Model\Design\BackendModelFactory') ->disableOriginalConstructor() ->getMock(); - $this->backendModel = $this->getMockBuilder('Magento\Theme\Model\Design\Backend\Image') + $this->backendModel = $this->getMockBuilder('Magento\Theme\Model\Design\Backend\File') ->disableOriginalConstructor() ->getMock(); $this->metadataProvider = $this->getMockBuilder('Magento\Theme\Model\Design\Config\MetadataProvider') ->disableOriginalConstructor() ->getMock(); - $this->imageProcessor = new ImageProcessor( + $this->fileProcessor = new FileProcessor( $this->uploaderFactory, $this->imageConfig, $this->backendModelFactory, @@ -66,7 +66,7 @@ class ImageProcessorTest extends \PHPUnit_Framework_TestCase $metadata = [ $fieldCode => [ 'path' => $path, - 'backend_model' => 'Magento\Theme\Model\Design\Backend\Image' + 'backend_model' => 'Magento\Theme\Model\Design\Backend\File' ], ]; @@ -115,7 +115,7 @@ class ImageProcessorTest extends \PHPUnit_Framework_TestCase 'size' => '234234', 'url' => 'http://magento2.com/pub/media/tmp/file.jpg' ], - $this->imageProcessor->saveToTmp($fieldCode) + $this->fileProcessor->saveToTmp($fieldCode) ); } } diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/StorageTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/StorageTest.php index 77c1b2b7ca81161e98fdcc62185f65c4192fadf8..58d993cf20cfdc1c2bc71ab51d745a8fb6685e3d 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/StorageTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/StorageTest.php @@ -145,7 +145,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase ->willReturn($this->backendModelMock); $this->valueCheckerMock->expects($this->once()) ->method('isDifferentFromDefault') - ->with('value', $scope, $scopeId, 'design/head/default_title') + ->with('value', $scope, $scopeId, ['path' => 'design/head/default_title']) ->willReturn(true); $this->transactionMock->expects($this->once()) ->method('addObject') @@ -175,13 +175,16 @@ class StorageTest extends \PHPUnit_Framework_TestCase $this->designConfigData->expects($this->atLeastOnce()) ->method('getPath') ->willReturn('path'); + $this->designConfigData->expects($this->atLeastOnce()) + ->method('getFieldConfig') + ->willReturn(['path' => 'path']); $this->scopeConfig->expects($this->once()) ->method('getValue') ->with('path', $scope, $scopeId) ->willReturn('value'); $this->valueProcessor->expects($this->once()) ->method('process') - ->with('value', 'path') + ->with('value', 'website', 1, ['path' => 'path']) ->willReturnArgument(0); $this->designConfigData->expects($this->once()) ->method('setValue') diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueCheckerTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueCheckerTest.php index 35afbdfc4660630cc121f9d8b32f088909b7e418..2a41342a855c67d60959705609329b1e3918be4e 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueCheckerTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueCheckerTest.php @@ -53,7 +53,7 @@ class ValueCheckerTest extends \PHPUnit_Framework_TestCase 'value', 'default', 0, - 'design/head/default_title' + ['path' => 'design/head/default_title'] ) ); } @@ -77,7 +77,7 @@ class ValueCheckerTest extends \PHPUnit_Framework_TestCase 'value', 'website', 1, - 'design/head/default_title' + ['path' => 'design/head/default_title'] ) ); } @@ -111,7 +111,7 @@ class ValueCheckerTest extends \PHPUnit_Framework_TestCase ], 'website', 1, - $path + ['path' => $path] ) ); } diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueProcessorTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueProcessorTest.php index ac8097a28fa271f0589bdee59bb912732e5d34d3..03eaca7853a52163544c8987ab6aa13c14b06df8 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueProcessorTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/ValueProcessorTest.php @@ -35,16 +35,26 @@ class ValueProcessorTest extends \PHPUnit_Framework_TestCase { $path = 'design/head/logo'; $value = 'path/to/logo'; + $scope = 'websites'; + $scopeId = 1; $this->backendModelFactory->expects($this->once()) ->method('createByPath') - ->with($path, ['value' => $value]) + ->with( + $path, + [ + 'value' => $value, + 'field_config' => ['path' => $path], + 'scope' => $scope, + 'scope_id' => $scopeId + ] + ) ->willReturn($this->backendModel); $this->backendModel->expects($this->once()) ->method('afterLoad'); $this->backendModel->expects($this->once()) ->method('getValue') ->willReturn($value); - $this->assertEquals($value, $this->valueProcessor->process($value, $path)); + $this->assertEquals($value, $this->valueProcessor->process($value, $scope, $scopeId, ['path' => $path])); } } diff --git a/app/code/Magento/Theme/Test/Unit/Model/ResourceModel/Design/Config/Scope/CollectionTest.php b/app/code/Magento/Theme/Test/Unit/Model/ResourceModel/Design/Config/Scope/CollectionTest.php index 45a812039df8b20b1e76118d279ba528f1a1a74e..378016bb7e140104c579a2124a9bd098c292fb8f 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/ResourceModel/Design/Config/Scope/CollectionTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/ResourceModel/Design/Config/Scope/CollectionTest.php @@ -113,9 +113,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $this->valueProcessor->expects($this->atLeastOnce()) ->method('process') ->withConsecutive( - ['DefaultValue', 'second/field/path'], - ['WebsiteValue', 'second/field/path'], - ['WebsiteValue', 'second/field/path'] + ['DefaultValue', 'default', null, ['path' => 'second/field/path', 'use_in_grid' => 1]], + ['WebsiteValue', 'website', 1, ['path' => 'second/field/path', 'use_in_grid' => 1]], + ['WebsiteValue', 'store', 1, ['path' => 'second/field/path', 'use_in_grid' => 1]] ) ->willReturnOnConsecutiveCalls( 'DefaultValue',