From b06df231d2c5ceea14ddee621527e190539efc6b Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Wed, 6 Apr 2016 18:13:53 +0300
Subject: [PATCH] MAGETWO-51604: [TD] Add functionality to save image in custom
 folder

---
 app/code/Magento/Theme/Model/Design/Backend/File.php   |  2 +-
 app/code/Magento/Theme/Model/Design/Config/Storage.php |  2 ++
 .../Magento/Theme/Model/Design/Config/ValueChecker.php |  4 ++++
 .../Theme/Model/Design/Config/ValueProcessor.php       |  6 +++++-
 .../Model/ResourceModel/Design/Config/Collection.php   | 10 +++++++++-
 .../ResourceModel/Design/Config/Scope/Collection.php   |  2 ++
 .../Theme/Test/Unit/Model/Design/Backend/FileTest.php  |  6 +++---
 .../Test/Unit/Model/Design/Config/StorageTest.php      |  2 +-
 .../Unit/Model/Design/Config/ValueProcessorTest.php    |  6 +++++-
 9 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Theme/Model/Design/Backend/File.php b/app/code/Magento/Theme/Model/Design/Backend/File.php
index 92380b70530..52e4b3a35e6 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/File.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/File.php
@@ -111,7 +111,7 @@ class File extends BackendFile
     {
         $value = $this->getValue();
         if ($value && !is_array($value)) {
-            $fileName = $this->_getUploadDir() . '/' . $value;
+            $fileName = $this->_getUploadDir() . '/' . basename($value);
             $stat = $this->_mediaDirectory->stat($fileName);
             $this->setValue([
                 [
diff --git a/app/code/Magento/Theme/Model/Design/Config/Storage.php b/app/code/Magento/Theme/Model/Design/Config/Storage.php
index 76c2ec65163..8857e79297f 100644
--- a/app/code/Magento/Theme/Model/Design/Config/Storage.php
+++ b/app/code/Magento/Theme/Model/Design/Config/Storage.php
@@ -78,6 +78,8 @@ class Storage
             $value = $this->valueProcessor->process(
                 $this->scopeConfig->getValue($fieldData->getPath(), $scope, $scopeId),
                 $fieldData->getPath(),
+                $scope,
+                $scopeId,
                 $fieldData->getFieldConfig()
             );
             if ($value !== null) {
diff --git a/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php b/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php
index 755173055ba..4c8c790fa42 100644
--- a/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php
+++ b/app/code/Magento/Theme/Model/Design/Config/ValueChecker.php
@@ -58,11 +58,15 @@ class ValueChecker
                 $this->valueProcessor->process(
                     $value,
                     $fieldConfig['path'],
+                    $scope,
+                    $scopeId,
                     $fieldConfig
                 ),
                 $this->valueProcessor->process(
                     $this->appConfig->getValue($fieldConfig['path'], $scope, $scopeId),
                     $fieldConfig['path'],
+                    $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 5c6b1edc1e5..77d027b87ec 100644
--- a/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php
+++ b/app/code/Magento/Theme/Model/Design/Config/ValueProcessor.php
@@ -28,16 +28,20 @@ class ValueProcessor
      *
      * @param string $value
      * @param string $path
+     * @param string $scope
+     * @param string $scopeId
      * @param array $fieldConfig
      * @return mixed
      */
-    public function process($value, $path, array $fieldConfig)
+    public function process($value, $path, $scope, $scopeId, array $fieldConfig)
     {
         $backendModel = $this->backendModelFactory->createByPath(
             $path,
             [
                 'value' => $value,
                 'field_config' => $fieldConfig,
+                'scope' => $scope,
+                'scope_id' => $scopeId
             ]
         );
         $backendModel->afterLoad();
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 0bd41722b9c..eeb73108d96 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 968ac481981..ce7eda260fd 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
@@ -102,6 +102,8 @@ class Collection extends \Magento\Framework\Data\Collection
                 $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/Model/Design/Backend/FileTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php
index 1c8f6225f81..c11b539f2b8 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/FileTest.php
@@ -85,7 +85,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
 
     public function testAfterLoad()
     {
-        $value = 'store/1/filename.jpg';
+        $value = '/filename.jpg';
         $this->fileBackend->setValue($value);
         $this->fileBackend->setFieldConfig(
             [
@@ -97,7 +97,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
         );
         $this->mediaDirectory->expects($this->once())
             ->method('stat')
-            ->with('/' . $value)
+            ->with($value)
             ->willReturn(['size' => 234234]);
         $this->fileConfig->expects($this->once())
             ->method('getStoreMediaUrl')
@@ -106,7 +106,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(
             [
                 [
-                    'url' => 'http://magento2.com/pub/media/' . $value,
+                    'url' => 'http://magento2.com/pub/media' . $value,
                     'file' => $value,
                     'size' => 234234,
                     'exists' => true,
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 9e4b97ff5ca..075e0984627 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
@@ -184,7 +184,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
             ->willReturn('value');
         $this->valueProcessor->expects($this->once())
             ->method('process')
-            ->with('value', 'path', [])
+            ->with('value', 'path', 'website', 1, [])
             ->willReturnArgument(0);
         $this->designConfigData->expects($this->once())
             ->method('setValue')
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 318016a7007..19f3da24aca 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,6 +35,8 @@ 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')
@@ -43,6 +45,8 @@ class ValueProcessorTest extends \PHPUnit_Framework_TestCase
                 [
                     'value' => $value,
                     'field_config' => [],
+                    'scope' => $scope,
+                    'scope_id' => $scopeId
                 ]
             )
             ->willReturn($this->backendModel);
@@ -51,6 +55,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, $scope, $scopeId, []));
     }
 }
-- 
GitLab