diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml index 7a0a9602aa0ec9d7939f17f415a10c811fc3a0ac..65e14be97edd1e665caa49615319724f8b62fecf 100644 --- a/app/code/Magento/Catalog/etc/di.xml +++ b/app/code/Magento/Catalog/etc/di.xml @@ -635,7 +635,7 @@ <item name="watermark_image_image" xsi:type="array"> <item name="path" xsi:type="string">design/watermark/image_image</item> <item name="fieldset" xsi:type="string">other_settings/watermark/image</item> - <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\File</item> + <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\Image</item> <item name="upload_dir" xsi:type="array"> <item name="config" xsi:type="string">system/filesystem/media</item> <item name="scope_info" xsi:type="string">1</item> @@ -663,7 +663,7 @@ <item name="watermark_small_image_image" xsi:type="array"> <item name="path" xsi:type="string">design/watermark/small_image_image</item> <item name="fieldset" xsi:type="string">other_settings/watermark/small_image</item> - <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\File</item> + <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\Image</item> <item name="upload_dir" xsi:type="array"> <item name="config" xsi:type="string">system/filesystem/media</item> <item name="scope_info" xsi:type="string">1</item> @@ -691,7 +691,7 @@ <item name="watermark_thumbnail_image" xsi:type="array"> <item name="path" xsi:type="string">design/watermark/thumbnail_image</item> <item name="fieldset" xsi:type="string">other_settings/watermark/thumbnail</item> - <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\File</item> + <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\Image</item> <item name="upload_dir" xsi:type="array"> <item name="config" xsi:type="string">system/filesystem/media</item> <item name="scope_info" xsi:type="string">1</item> 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/Swatches/etc/di.xml b/app/code/Magento/Swatches/etc/di.xml index c9d963f1ccb5f41b35027d422f8072e188d57233..f73753acfb71422589a2c5ea483b3badabc194a9 100644 --- a/app/code/Magento/Swatches/etc/di.xml +++ b/app/code/Magento/Swatches/etc/di.xml @@ -43,7 +43,7 @@ <item name="watermark_swatch_image_image" xsi:type="array"> <item name="path" xsi:type="string">design/watermark/swatch_image_image</item> <item name="fieldset" xsi:type="string">other_settings/watermark/swatch_image</item> - <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\File</item> + <item name="backend_model" xsi:type="string">Magento\Theme\Model\Design\Backend\Image</item> <item name="upload_dir" xsi:type="array"> <item name="config" xsi:type="string">system/filesystem/media</item> <item name="scope_info" xsi:type="string">1</item> 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/File.php b/app/code/Magento/Theme/Model/Design/Backend/File.php index bb8a2b90a776b0abaec9b5050892634ccc126168..92380b70530f29eb30522f1d934da9633665fbd9 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/File.php +++ b/app/code/Magento/Theme/Model/Design/Backend/File.php @@ -6,7 +6,7 @@ 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\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; @@ -126,47 +126,24 @@ class File extends BackendFile } /** - * Return path to directory for upload file + * Getter for allowed extensions of uploaded files * - * @return string - * @throws \Magento\Framework\Exception\LocalizedException + * @return array */ - protected function _getUploadDir() + public function getAllowedExtensions() { - $fieldConfig = $this->getFieldConfig(); - - if (!array_key_exists('upload_dir', $fieldConfig)) { - throw new \Magento\Framework\Exception\LocalizedException( - __('The base directory to upload file is not specified.') - ); - } - - $uploadDir = (string)$fieldConfig['upload_dir']; - 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'] - ) { - $uploadDir = $this->_appendScopeInfo($uploadDir); - } - - if (array_key_exists('config', $fieldConfig['upload_dir'])) { - $uploadDir = $this->_mediaDirectory->getRelativePath($uploadDir); - } - } - - return $uploadDir; + return []; } /** - * Getter for allowed extensions of uploaded files + * Retrieve upload directory path * - * @return string[] + * @param string $uploadDir + * @return string */ - public function getAllowedExtensions() + protected function getUploadDirPath($uploadDir) { - return ['jpg', 'jpeg', 'gif', 'png']; + return $this->_mediaDirectory->getRelativePath($uploadDir); } /** diff --git a/app/code/Magento/Theme/Model/Design/Backend/Image.php b/app/code/Magento/Theme/Model/Design/Backend/Image.php new file mode 100644 index 0000000000000000000000000000000000000000..f9e80b921fd1391edba904002b1aff06eb3a8fae --- /dev/null +++ b/app/code/Magento/Theme/Model/Design/Backend/Image.php @@ -0,0 +1,19 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Theme\Model\Design\Backend; + +class Image extends File +{ + /** + * Getter for allowed extensions of uploaded files + * + * @return string[] + */ + public function getAllowedExtensions() + { + return ['jpg', 'jpeg', 'gif', 'png']; + } +} 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 89% 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 d9d216cf01906fbe123588af7def378d4ff78902..3bb27e0c168e6b5aea5f18aa20aeac3c5a6ee7bf 100644 --- a/app/code/Magento/Theme/Model/Design/Config/FileUploader/ImageProcessor.php +++ b/app/code/Magento/Theme/Model/Design/Config/FileUploader/FileProcessor.php @@ -11,7 +11,7 @@ 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()]; } diff --git a/app/code/Magento/Theme/Model/Design/Config/Storage.php b/app/code/Magento/Theme/Model/Design/Config/Storage.php index eb121698682248837ed98861f6eccb80bcaae92c..76c2ec651639cb3833652fa3fe688e6876838a48 100644 --- a/app/code/Magento/Theme/Model/Design/Config/Storage.php +++ b/app/code/Magento/Theme/Model/Design/Config/Storage.php @@ -114,7 +114,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..755173055bae104c307947000feedf01e2da6313 100644 --- a/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php +++ b/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php @@ -47,21 +47,23 @@ 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 + $fieldConfig['path'], + $fieldConfig ), $this->valueProcessor->process( - $this->appConfig->getValue($path, $scope, $scopeId), - $path + $this->appConfig->getValue($fieldConfig['path'], $scope, $scopeId), + $fieldConfig['path'], + $fieldConfig ) ); } diff --git a/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php b/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php index f52101d91d1848706caf43909cd23051cdc9a3b2..5c6b1edc1e52e160846d2501d3565198c01f50d3 100644 --- a/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php +++ b/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php @@ -31,7 +31,7 @@ class ValueProcessor * @param array $fieldConfig * @return mixed */ - public function process($value, $path, array $fieldConfig = []) + public function process($value, $path, array $fieldConfig) { $backendModel = $this->backendModelFactory->createByPath( $path, 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..968ac48198106d03d03fa88da8489e3efaa691e6 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,8 @@ 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'] + $itemData['path'], + $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/Config/FileUploader/ImageProcessorTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Config/FileUploader/FileProcessorTest.php similarity index 93% 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 b38c7c8ec178346e3291edf3e2d8ccce1979979f..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; @@ -27,8 +27,8 @@ class ImageProcessorTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Theme\Model\Design\Config\MetadataProvider|\PHPUnit_Framework_MockObject_MockObject */ protected $metadataProvider; - /** @var ImageProcessor */ - protected $imageProcessor; + /** @var FileProcessor */ + protected $fileProcessor; public function setUp() { @@ -51,7 +51,7 @@ class ImageProcessorTest extends \PHPUnit_Framework_TestCase $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, @@ -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 ffbb9335a5522cebbd15ce73f2632de3a420e819..9e4b97ff5ca666af912f872f7a1a199b3eeb5e51 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') 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 3121a9e2b6c76818023b8ed7c7e6f56fc859f5dd..318016a7007522e772b443e06d22b49249a4c30c 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 @@ -51,6 +51,6 @@ class ValueProcessorTest extends \PHPUnit_Framework_TestCase $this->backendModel->expects($this->once()) ->method('getValue') ->willReturn($value); - $this->assertEquals($value, $this->valueProcessor->process($value, $path)); + $this->assertEquals($value, $this->valueProcessor->process($value, $path, [])); } }