Skip to content
This repository was archived by the owner on Dec 19, 2019. It is now read-only.

Commit 5465a44

Browse files
authored
Merge pull request #5118 from magento-tango/DEC-PR-01
[tango] DEC PR 01
2 parents 9a36b85 + fe261b6 commit 5465a44

File tree

9 files changed

+284
-59
lines changed

9 files changed

+284
-59
lines changed

app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php

+37-33
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@
55
*/
66
namespace Magento\Catalog\Model\Category\Attribute\Backend;
77

8+
use Magento\Catalog\Model\ImageUploader;
89
use Magento\Framework\App\Filesystem\DirectoryList;
10+
use Magento\Framework\App\ObjectManager;
911
use Magento\Framework\File\Uploader;
12+
use Magento\Store\Api\Data\StoreInterface;
13+
use Magento\Store\Model\StoreManagerInterface;
1014

1115
/**
1216
* Catalog category image attribute backend model
@@ -45,7 +49,7 @@ class Image extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
4549
protected $_logger;
4650

4751
/**
48-
* @var \Magento\Catalog\Model\ImageUploader
52+
* @var ImageUploader
4953
*/
5054
private $imageUploader;
5155

@@ -54,19 +58,32 @@ class Image extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
5458
*/
5559
private $additionalData = '_additional_data_';
5660

61+
/**
62+
* @var StoreManagerInterface
63+
*/
64+
private $storeManager;
65+
5766
/**
5867
* @param \Psr\Log\LoggerInterface $logger
5968
* @param \Magento\Framework\Filesystem $filesystem
6069
* @param \Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory
70+
* @param StoreManagerInterface $storeManager
71+
* @param ImageUploader $imageUploader
6172
*/
6273
public function __construct(
6374
\Psr\Log\LoggerInterface $logger,
6475
\Magento\Framework\Filesystem $filesystem,
65-
\Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory
76+
\Magento\MediaStorage\Model\File\UploaderFactory $fileUploaderFactory,
77+
StoreManagerInterface $storeManager = null,
78+
ImageUploader $imageUploader = null
6679
) {
6780
$this->_filesystem = $filesystem;
6881
$this->_fileUploaderFactory = $fileUploaderFactory;
6982
$this->_logger = $logger;
83+
$this->storeManager = $storeManager ??
84+
ObjectManager::getInstance()->get(StoreManagerInterface::class);
85+
$this->imageUploader = $imageUploader ??
86+
ObjectManager::getInstance()->get(ImageUploader::class);
7087
}
7188

7289
/**
@@ -91,16 +108,17 @@ private function getUploadedImageName($value)
91108
*
92109
* @param string $imageName
93110
* @return string
111+
* @throws \Magento\Framework\Exception\FileSystemException
94112
*/
95113
private function checkUniqueImageName(string $imageName): string
96114
{
97-
$imageUploader = $this->getImageUploader();
98115
$mediaDirectory = $this->_filesystem->getDirectoryWrite(DirectoryList::MEDIA);
99116
$imageAbsolutePath = $mediaDirectory->getAbsolutePath(
100-
$imageUploader->getBasePath() . DIRECTORY_SEPARATOR . $imageName
117+
$this->imageUploader->getBasePath() . DIRECTORY_SEPARATOR . $imageName
101118
);
102119

103-
$imageName = Uploader::getNewFilename($imageAbsolutePath);
120+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
121+
$imageName = call_user_func([Uploader::class, 'getNewFilename'], $imageAbsolutePath);
104122

105123
return $imageName;
106124
}
@@ -112,14 +130,26 @@ private function checkUniqueImageName(string $imageName): string
112130
*
113131
* @param \Magento\Framework\DataObject $object
114132
* @return $this
133+
* @throws \Magento\Framework\Exception\FileSystemException
115134
* @since 101.0.8
116135
*/
117136
public function beforeSave($object)
118137
{
119138
$attributeName = $this->getAttribute()->getName();
120139
$value = $object->getData($attributeName);
121140

122-
if ($this->fileResidesOutsideCategoryDir($value)) {
141+
if ($this->isTmpFileAvailable($value) && $imageName = $this->getUploadedImageName($value)) {
142+
try {
143+
/** @var StoreInterface $store */
144+
$store = $this->storeManager->getStore();
145+
$baseMediaDir = $store->getBaseMediaDir();
146+
$newImgRelativePath = $this->imageUploader->moveFileFromTmp($imageName, true);
147+
$value[0]['url'] = '/' . $baseMediaDir . '/' . $newImgRelativePath;
148+
$value[0]['name'] = $value[0]['url'];
149+
} catch (\Exception $e) {
150+
$this->_logger->critical($e);
151+
}
152+
} elseif ($this->fileResidesOutsideCategoryDir($value)) {
123153
// use relative path for image attribute so we know it's outside of category dir when we fetch it
124154
// phpcs:ignore Magento2.Functions.DiscouragedFunction
125155
$value[0]['url'] = parse_url($value[0]['url'], PHP_URL_PATH);
@@ -139,23 +169,6 @@ public function beforeSave($object)
139169
return parent::beforeSave($object);
140170
}
141171

142-
/**
143-
* Get Instance of Category Image Uploader.
144-
*
145-
* @return \Magento\Catalog\Model\ImageUploader
146-
*
147-
* @deprecated 101.0.0
148-
*/
149-
private function getImageUploader()
150-
{
151-
if ($this->imageUploader === null) {
152-
$this->imageUploader = \Magento\Framework\App\ObjectManager::getInstance()
153-
->get(\Magento\Catalog\CategoryImageUpload::class);
154-
}
155-
156-
return $this->imageUploader;
157-
}
158-
159172
/**
160173
* Check if temporary file is available for new image upload.
161174
*
@@ -194,19 +207,10 @@ private function fileResidesOutsideCategoryDir($value)
194207
*
195208
* @param \Magento\Framework\DataObject $object
196209
* @return \Magento\Catalog\Model\Category\Attribute\Backend\Image
210+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
197211
*/
198212
public function afterSave($object)
199213
{
200-
$value = $object->getData($this->additionalData . $this->getAttribute()->getName());
201-
202-
if ($this->isTmpFileAvailable($value) && $imageName = $this->getUploadedImageName($value)) {
203-
try {
204-
$this->getImageUploader()->moveFileFromTmp($imageName);
205-
} catch (\Exception $e) {
206-
$this->_logger->critical($e);
207-
}
208-
}
209-
210214
return $this;
211215
}
212216
}

app/code/Magento/Catalog/Model/ImageUploader.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,12 @@ public function getFilePath($path, $imageName)
191191
* Checking file for moving and move it
192192
*
193193
* @param string $imageName
194-
*
194+
* @param bool $returnRelativePath
195195
* @return string
196196
*
197197
* @throws \Magento\Framework\Exception\LocalizedException
198198
*/
199-
public function moveFileFromTmp($imageName)
199+
public function moveFileFromTmp($imageName, $returnRelativePath = false)
200200
{
201201
$baseTmpPath = $this->getBaseTmpPath();
202202
$basePath = $this->getBasePath();
@@ -226,7 +226,7 @@ public function moveFileFromTmp($imageName)
226226
);
227227
}
228228

229-
return $imageName;
229+
return $returnRelativePath ? $baseImagePath : $imageName;
230230
}
231231

232232
/**

0 commit comments

Comments
 (0)