Skip to content

Commit d34145d

Browse files
committed
Merge remote-tracking branch 'origin/B2B-2037' into B2B-2079-combined
2 parents 909f2be + b9d5fec commit d34145d

File tree

31 files changed

+738
-236
lines changed

31 files changed

+738
-236
lines changed

app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteFolderTest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
<argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/>
9090
</actionGroup>
9191
<actionGroup ref="AdminMediaGalleryClickImageInGridActionGroup" stepKey="selectUploadedImage">
92-
<argument name="imageName" value="{{ImageUpload.file}}"/>
92+
<argument name="imageName" value="{{ImageUpload.filename}}"/>
9393
</actionGroup>
9494
<actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelected"/>
9595
<actionGroup ref="AdminSaveAndContinueEditCmsPageActionGroup" stepKey="savePage"/>

app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteImageTest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
<argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/>
8383
</actionGroup>
8484
<actionGroup ref="AdminMediaGalleryClickImageInGridActionGroup" stepKey="selectUploadedImage">
85-
<argument name="imageName" value="{{ImageUpload.file}}"/>
85+
<argument name="imageName" value="{{ImageUpload.filename}}"/>
8686
</actionGroup>
8787
<actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelected"/>
8888
<actionGroup ref="AdminSaveAndContinueEditCmsPageActionGroup" stepKey="savePage"/>
@@ -117,7 +117,7 @@
117117
<argument name="imageName" value="{{ImageUpload.file}}"/>
118118
</actionGroup>
119119
<actionGroup ref="AdminMediaGalleryAssertImageNotExistsInTheGridActionGroup" stepKey="assertImageDeleted">
120-
<argument name="title" value="ImageUpload.file"/>
120+
<argument name="title" value="ImageUpload.filename"/>
121121
</actionGroup>
122122

123123
<!-- Verify Images & Directories in S3 & Local File System -->

app/code/Magento/MediaGalleryMetadata/Model/AddIptcMetadata.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77

88
namespace Magento\MediaGalleryMetadata\Model;
99

10+
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\Framework\Exception\LocalizedException;
13+
use Magento\Framework\Filesystem;
1114
use Magento\Framework\Filesystem\DriverInterface;
1215
use Magento\MediaGalleryMetadata\Model\Jpeg\ReadFile;
1316
use Magento\MediaGalleryMetadataApi\Api\Data\MetadataInterface;
@@ -39,19 +42,31 @@ class AddIptcMetadata
3942
*/
4043
private $fileFactory;
4144

45+
/**
46+
* @var IptcEmbed
47+
*/
48+
private $iptcEmbed;
49+
4250
/**
4351
* @param FileInterfaceFactory $fileFactory
4452
* @param DriverInterface $driver
4553
* @param ReadFile $fileReader
54+
* @param Filesystem|null $filesystem
55+
* @param IptcEmbed|null $iptcEmbed
56+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4657
*/
4758
public function __construct(
4859
FileInterfaceFactory $fileFactory,
4960
DriverInterface $driver,
50-
ReadFile $fileReader
61+
ReadFile $fileReader,
62+
Filesystem $filesystem = null,
63+
IptcEmbed $iptcEmbed = null
5164
) {
5265
$this->fileFactory = $fileFactory;
53-
$this->driver = $driver;
5466
$this->fileReader = $fileReader;
67+
$filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
68+
$this->driver = $filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
69+
$this->iptcEmbed = $iptcEmbed ?? ObjectManager::getInstance()->get(IptcEmbed::class);
5570
}
5671

5772
/**
@@ -89,7 +104,7 @@ public function execute(FileInterface $file, MetadataInterface $metadata, ?Segme
89104
}
90105
}
91106

92-
$this->writeFile($file->getPath(), iptcembed($newData, $file->getPath()));
107+
$this->writeFile($file->getPath(), $this->iptcEmbed->get($newData, $file->getPath()));
93108

94109
$fileWithIptc = $this->fileReader->execute($file->getPath());
95110

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\MediaGalleryMetadata\Model;
9+
10+
use Magento\Framework\Exception\LocalizedException;
11+
12+
/**
13+
* Wrapper for the exif_read_data php function
14+
*/
15+
class ExifReader
16+
{
17+
/**
18+
* Returns result of exif_read_data function
19+
*
20+
* @param string $filePath
21+
* @return array|false
22+
* @throws LocalizedException
23+
*/
24+
public function get(string $filePath)
25+
{
26+
if (!is_callable('exif_read_data')) {
27+
throw new LocalizedException(
28+
__('exif_read_data() must be enabled in php configuration')
29+
);
30+
}
31+
32+
return exif_read_data($filePath);
33+
}
34+
}

app/code/Magento/MediaGalleryMetadata/Model/Gif/ReadFile.php

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77

88
namespace Magento\MediaGalleryMetadata\Model\Gif;
99

10+
use Magento\Framework\App\ObjectManager;
1011
use Magento\Framework\Exception\FileSystemException;
1112
use Magento\Framework\Exception\LocalizedException;
13+
use Magento\Framework\App\Filesystem\DirectoryList;
1214
use Magento\Framework\Filesystem\DriverInterface;
1315
use Magento\MediaGalleryMetadata\Model\SegmentNames;
1416
use Magento\MediaGalleryMetadataApi\Model\FileInterface;
@@ -17,6 +19,7 @@
1719
use Magento\MediaGalleryMetadataApi\Model\SegmentInterface;
1820
use Magento\MediaGalleryMetadataApi\Model\SegmentInterfaceFactory;
1921
use Magento\Framework\Exception\ValidatorException;
22+
use Magento\Framework\Filesystem;
2023

2124
/**
2225
* File segments reader
@@ -28,6 +31,11 @@ class ReadFile implements ReadFileInterface
2831
*/
2932
private $driver;
3033

34+
/**
35+
* @var Filesystem
36+
*/
37+
private $filesystem;
38+
3139
/**
3240
* @var SegmentInterfaceFactory
3341
*/
@@ -48,37 +56,40 @@ class ReadFile implements ReadFileInterface
4856
* @param FileInterfaceFactory $fileFactory
4957
* @param SegmentInterfaceFactory $segmentFactory
5058
* @param SegmentNames $segmentNames
59+
* @param Filesystem|null $filesystem
60+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
5161
*/
5262
public function __construct(
5363
DriverInterface $driver,
5464
FileInterfaceFactory $fileFactory,
5565
SegmentInterfaceFactory $segmentFactory,
56-
SegmentNames $segmentNames
66+
SegmentNames $segmentNames,
67+
Filesystem $filesystem = null
5768
) {
58-
$this->driver = $driver;
5969
$this->fileFactory = $fileFactory;
6070
$this->segmentFactory = $segmentFactory;
6171
$this->segmentNames = $segmentNames;
72+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
6273
}
6374

6475
/**
6576
* @inheritdoc
6677
*/
6778
public function execute(string $path): FileInterface
6879
{
69-
$resource = $this->driver->fileOpen($path, 'rb');
80+
$resource = $this->getDriver()->fileOpen($path, 'rb');
7081

7182
$header = $this->read($resource, 3);
7283

7384
if ($header != "GIF") {
74-
$this->driver->fileClose($resource);
85+
$this->getDriver()->fileClose($resource);
7586
throw new ValidatorException(__('Not a GIF image'));
7687
}
7788

7889
$version = $this->read($resource, 3);
7990

8091
if (!in_array($version, ['87a', '89a'])) {
81-
$this->driver->fileClose($resource);
92+
$this->getDriver()->fileClose($resource);
8293
throw new LocalizedException(__('Unexpected GIF version'));
8394
}
8495

@@ -103,6 +114,8 @@ public function execute(string $path): FileInterface
103114

104115
array_unshift($segments, $headerSegment, $generalSegment);
105116

117+
$this->getDriver()->fileClose($resource);
118+
106119
return $this->fileFactory->create([
107120
'path' => $path,
108121
'segments' => $segments
@@ -143,7 +156,7 @@ private function getSegments($resource): array
143156
}
144157

145158
$segments[] = $this->getExtensionSegment($resource);
146-
} while (!$this->driver->endOfFile($resource));
159+
} while (!$this->getDriver()->endOfFile($resource));
147160

148161
return $segments;
149162
}
@@ -272,8 +285,8 @@ private function read($resource, int $length): string
272285
{
273286
$data = '';
274287

275-
while (!$this->driver->endOfFile($resource) && strlen($data) < $length) {
276-
$data .= $this->driver->fileRead($resource, $length - strlen($data));
288+
while (!$this->getDriver()->endOfFile($resource) && strlen($data) < $length) {
289+
$data .= $this->getDriver()->fileRead($resource, $length - strlen($data));
277290
}
278291

279292
return $data;
@@ -315,4 +328,19 @@ private function readBlock($resource): string
315328
}
316329
return $blockLengthBinary . $this->read($resource, $blockLength) . $this->read($resource, 1);
317330
}
331+
332+
/**
333+
* Returns current driver for media directory
334+
*
335+
* @return DriverInterface
336+
* @throws FileSystemException
337+
*/
338+
private function getDriver(): DriverInterface
339+
{
340+
if ($this->driver === null) {
341+
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
342+
}
343+
344+
return $this->driver;
345+
}
318346
}

app/code/Magento/MediaGalleryMetadata/Model/Gif/WriteFile.php

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77

88
namespace Magento\MediaGalleryMetadata\Model\Gif;
99

10+
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\Framework\Exception\FileSystemException;
1113
use Magento\Framework\Exception\LocalizedException;
14+
use Magento\Framework\Filesystem;
1215
use Magento\Framework\Filesystem\DriverInterface;
1316
use Magento\MediaGalleryMetadata\Model\SegmentNames;
1417
use Magento\MediaGalleryMetadataApi\Model\FileInterface;
@@ -30,16 +33,24 @@ class WriteFile implements WriteFileInterface
3033
*/
3134
private $segmentNames;
3235

36+
/**
37+
* @var Filesystem
38+
*/
39+
private $filesystem;
40+
3341
/**
3442
* @param DriverInterface $driver
3543
* @param SegmentNames $segmentNames
44+
* @param Filesystem|null $filesystem
45+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
3646
*/
3747
public function __construct(
3848
DriverInterface $driver,
39-
SegmentNames $segmentNames
49+
SegmentNames $segmentNames,
50+
Filesystem $filesystem = null
4051
) {
41-
$this->driver = $driver;
4252
$this->segmentNames = $segmentNames;
53+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
4354
}
4455

4556
/**
@@ -51,10 +62,10 @@ public function __construct(
5162
*/
5263
public function execute(FileInterface $file): void
5364
{
54-
$resource = $this->driver->fileOpen($file->getPath(), 'wb');
65+
$resource = $this->getDriver()->fileOpen($file->getPath(), 'wb');
5566

5667
$this->writeSegments($resource, $file->getSegments());
57-
$this->driver->fileClose($resource);
68+
$this->getDriver()->fileClose($resource);
5869
}
5970

6071
/**
@@ -66,11 +77,26 @@ public function execute(FileInterface $file): void
6677
private function writeSegments($resource, array $segments): void
6778
{
6879
foreach ($segments as $segment) {
69-
$this->driver->fileWrite(
80+
$this->getDriver()->fileWrite(
7081
$resource,
7182
$segment->getData()
7283
);
7384
}
74-
$this->driver->fileWrite($resource, pack("C", ord(";")));
85+
$this->getDriver()->fileWrite($resource, pack("C", ord(";")));
86+
}
87+
88+
/**
89+
* Returns current driver for media directory
90+
*
91+
* @return DriverInterface
92+
* @throws FileSystemException
93+
*/
94+
private function getDriver(): DriverInterface
95+
{
96+
if ($this->driver === null) {
97+
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
98+
}
99+
100+
return $this->driver;
75101
}
76102
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\MediaGalleryMetadata\Model;
9+
10+
use Magento\Framework\Exception\LocalizedException;
11+
12+
/**
13+
* Wrapper for native iptcembed function
14+
*/
15+
class IptcEmbed
16+
{
17+
/**
18+
* Returns result of iptcembed function
19+
*
20+
* @param string $iptcData
21+
* @param string $filePath
22+
* @throws LocalizedException if iptcembed function is not enabled
23+
*/
24+
public function get(string $iptcData, string $filePath)
25+
{
26+
if (!is_callable('iptcembed')) {
27+
throw new LocalizedException(__('iptcembed() must be enabled in php configuration'));
28+
}
29+
30+
return iptcembed($iptcData, $filePath);
31+
}
32+
}

0 commit comments

Comments
 (0)