Skip to content

Commit 313a5f1

Browse files
author
Pini
authored
Merge pull request #11 from cloudinary/v1.6.8
V1.6.8
2 parents 9169ad3 + 9846d73 commit 313a5f1

16 files changed

+193
-42
lines changed

Core/AutoUploadMapping/RequestProcessor.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ public function __construct(
2929
/**
3030
* @param string $folder
3131
* @param string $url
32+
* @param bool $force
3233
* @return bool
3334
*/
34-
public function handle($folder, $url)
35+
public function handle($folder, $url, $force = false)
3536
{
36-
if ($this->configuration->isActive() == $this->configuration->getRequestState()) {
37+
if ($this->configuration->isActive() == $this->configuration->getRequestState() && !$force) {
3738
return true;
3839
}
3940

Core/CloudinaryImageProvider.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,11 @@ public function retrieveTransformed(Image $image, Transformation $transformation
9999
]);
100100

101101
if ($this->configuration->getUseRootPath()) {
102-
$imagePath = str_replace(".com/{$this->configuration->getCloud()}/image/upload/", ".com/{$this->configuration->getCloud()}/", $imagePath);
102+
if (strpos($imagePath, "cloudinary.com/{$this->configuration->getCloud()}/image/upload/") !== false) {
103+
$imagePath = str_replace("cloudinary.com/{$this->configuration->getCloud()}/image/upload/", "cloudinary.com/{$this->configuration->getCloud()}/", $imagePath);
104+
} elseif (strpos($imagePath, "cloudinary.com/image/upload/") !== false) {
105+
$imagePath = str_replace("cloudinary.com/image/upload/", "cloudinary.com/", $imagePath);
106+
}
103107
}
104108

105109
if ($this->configuration->getRemoveVersionNumber()) {

Core/Image/ImageFactory.php

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Cloudinary\Cloudinary\Core\Image;
44

55
use Cloudinary\Cloudinary\Core\ConfigurationInterface;
6-
use Cloudinary\Cloudinary\Core\Image\SynchronizationCheck;
76
use Cloudinary\Cloudinary\Core\Image;
87

98
class ImageFactory

Model/Configuration.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public function getCdnSubdomainStatus()
159159
*/
160160
public function getUserPlatform()
161161
{
162-
return sprintf(self::USER_PLATFORM_TEMPLATE, '1.6.5', '2.0.0');
162+
return sprintf(self::USER_PLATFORM_TEMPLATE, '1.6.8', '2.0.0');
163163
}
164164

165165
/**
@@ -277,7 +277,7 @@ public function getRemoveVersionNumber()
277277
*/
278278
public function getUseRootPath()
279279
{
280-
return (bool) $this->configReader->getValue(self::CONFIG_PATH_REMOVE_VERSION_NUMBER);
280+
return (bool) $this->configReader->getValue(self::CONFIG_PATH_USE_ROOT_PATH);
281281
}
282282

283283
/**

Model/Observer/Configuration.php

+6-5
Original file line numberDiff line numberDiff line change
@@ -57,25 +57,26 @@ public function __construct(
5757
*/
5858
public function execute(Observer $observer)
5959
{
60+
$force = false;
6061
//Clear config cache if needed
6162
$this->changedPaths = (array) $observer->getEvent()->getChangedPaths();
62-
if (in_array($this->changedPaths, [
63+
if (count(array_intersect($this->changedPaths, [
6364
\Cloudinary\Cloudinary\Model\Configuration::CONFIG_PATH_ENABLED,
6465
\Cloudinary\Cloudinary\Model\Configuration::CONFIG_PATH_ENVIRONMENT_VARIABLE,
6566
\Cloudinary\Cloudinary\Model\AutoUploadMapping\AutoUploadConfiguration::REQUEST_PATH
66-
])) {
67+
])) > 0) {
6768
$this->cleanConfigCache();
69+
$force = true;
6870
}
6971

70-
if (!$this->requestProcessor->handle('media', $this->configuration->getMediaBaseUrl())) {
72+
if (!$this->requestProcessor->handle('media', $this->configuration->getMediaBaseUrl(), $force)) {
7173
$this->messageManager->addErrorMessage(self::AUTO_UPLOAD_SETUP_FAIL_MESSAGE);
7274
}
7375
}
7476

7577
protected function cleanConfigCache()
7678
{
77-
$this->_cacheTypeList->cleanType(\Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER);
78-
$this->_cacheTypeList->cleanType(\Magento\PageCache\Model\Cache\Type::TYPE_IDENTIFIER);
79+
$this->cacheTypeList->cleanType(\Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER);
7980
return $this;
8081
}
8182
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Cloudinary\Cloudinary\Plugin\Catalog\Block\Product;
6+
7+
use Cloudinary\Cloudinary\Core\ConfigurationInterface;
8+
use Cloudinary\Cloudinary\Core\Image\ImageFactory as CloudinaryImageFactory;
9+
use Cloudinary\Cloudinary\Core\Image\Transformation;
10+
use Cloudinary\Cloudinary\Core\Image\Transformation\Crop;
11+
use Cloudinary\Cloudinary\Core\Image\Transformation\Dimensions;
12+
use Cloudinary\Cloudinary\Core\UrlGenerator;
13+
use Cloudinary\Cloudinary\Model\Transformation as TransformationModel;
14+
use Cloudinary\Cloudinary\Model\TransformationFactory;
15+
use Magento\Catalog\Api\Data\ProductInterface;
16+
use Magento\Catalog\Block\Product\Image as ImageBlock;
17+
use Magento\Catalog\Block\Product\ImageFactory as CatalogImageFactory;
18+
use Magento\Catalog\Model\Product;
19+
20+
class ImageFactory
21+
{
22+
/**
23+
* @var CloudinaryImageFactory
24+
*/
25+
private $cloudinaryImageFactory;
26+
27+
/**
28+
* @var UrlGenerator
29+
*/
30+
private $urlGenerator;
31+
32+
/**
33+
* @var ProductInterface
34+
*/
35+
private $product;
36+
37+
/**
38+
* @var Dimensions
39+
*/
40+
private $dimensions;
41+
42+
/**
43+
* @var ConfigurationInterface
44+
*/
45+
private $configuration;
46+
47+
/**
48+
* @var string
49+
*/
50+
private $imageFile;
51+
52+
/**
53+
* @var bool
54+
*/
55+
private $keepFrame;
56+
57+
/**
58+
* @var TransformationModel
59+
*/
60+
private $transformationModel;
61+
62+
/**
63+
* @param CloudinaryImageFactory $cloudinaryImageFactory
64+
* @param UrlGenerator $urlGenerator
65+
* @param ConfigurationInterface $configuration
66+
*/
67+
public function __construct(
68+
CloudinaryImageFactory $cloudinaryImageFactory,
69+
UrlGenerator $urlGenerator,
70+
ConfigurationInterface $configuration,
71+
TransformationFactory $transformationFactory
72+
) {
73+
$this->cloudinaryImageFactory = $cloudinaryImageFactory;
74+
$this->urlGenerator = $urlGenerator;
75+
$this->configuration = $configuration;
76+
$this->transformationModel = $transformationFactory->create();
77+
$this->dimensions = null;
78+
$this->imageFile = null;
79+
$this->keepFrame = true;
80+
}
81+
82+
/**
83+
* Create image block from product
84+
* @param CatalogImageFactory $catalogImageFactory
85+
* @param callable $proceed
86+
* @param Product $product
87+
* @param string $imageId
88+
* @param array|null $attributes
89+
* @return ImageBlock
90+
*/
91+
public function aroundCreate(CatalogImageFactory $catalogImageFactory, callable $proceed, Product $product, string $imageId, array $attributes = null): ImageBlock
92+
{
93+
$imageBlock = $proceed($product, $imageId, $attributes);
94+
if (!$this->configuration->isEnabled()) {
95+
return $imageBlock;
96+
}
97+
98+
try {
99+
if (strpos($imageBlock->getImageUrl(), $this->configuration->getMediaBaseUrl()) === 0) {
100+
$imagePath = preg_replace('/^' . preg_quote($this->configuration->getMediaBaseUrl(), '/') . '/', '', $imageBlock->getImageUrl());
101+
$imagePath = preg_replace('/\/cache\/[a-f0-9]{32}\//', '/', $imagePath);
102+
$image = $this->cloudinaryImageFactory->build(
103+
$imagePath,
104+
function () use ($imageBlock) {
105+
return $imageBlock->getImageUrl();
106+
}
107+
);
108+
$generatedImageUrl = $this->urlGenerator->generateFor(
109+
$image,
110+
$this->transformationModel->addFreeformTransformationForImage(
111+
$this->createTransformation($imageBlock),
112+
$imagePath
113+
)
114+
);
115+
$imageBlock->setOriginalImageUrl($imageBlock->setImageUrl());
116+
$imageBlock->setImageUrl($generatedImageUrl);
117+
}
118+
} catch (\Exception $e) {
119+
$imageBlock = $proceed($product, $imageId, $attributes);
120+
}
121+
122+
return $imageBlock;
123+
}
124+
125+
/**
126+
* @param ImageBlock $imageBlock
127+
* @return Transformation
128+
*/
129+
private function createTransformation(ImageBlock $imageBlock)
130+
{
131+
$dimensions = $this->dimensions ?: Dimensions::fromWidthAndHeight($imageBlock->getWidth(), $imageBlock->getHeight());
132+
133+
$transform = $this->configuration->getDefaultTransformation()->withDimensions($dimensions);
134+
135+
if ($this->keepFrame) {
136+
$transform->withCrop(Crop::fromString('lpad'))
137+
->withDimensions(Dimensions::squareMissingDimension($dimensions));
138+
} else {
139+
$transform->withCrop(Crop::fromString('fit'));
140+
}
141+
142+
return $transform;
143+
}
144+
}

Plugin/FileRemover.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace Cloudinary\Cloudinary\Plugin;
44

5-
use Cloudinary\Cloudinary\Core\Image;
65
use Cloudinary\Cloudinary\Core\CloudinaryImageManager;
6+
use Cloudinary\Cloudinary\Core\Image;
77
use Magento\Cms\Model\Wysiwyg\Images\Storage;
88
use Magento\Framework\App\Filesystem\DirectoryList;
99
use Magento\Framework\Filesystem;

Plugin/FileUploader.php

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace Cloudinary\Cloudinary\Plugin;
44

5-
use Cloudinary\Cloudinary\Core\Image;
65
use Cloudinary\Cloudinary\Core\CloudinaryImageManager;
6+
use Cloudinary\Cloudinary\Core\Image;
77
use Magento\Framework\App\Filesystem\DirectoryList;
88
use Magento\Framework\File\Uploader;
99

@@ -41,11 +41,9 @@ public function afterSave(Uploader $uploader, $result)
4141
$filepath = $this->absoluteFilePath($result);
4242

4343
if ($this->isMediaFilePath($filepath) && !$this->isMediaTmpFilePath($filepath)) {
44-
4544
$this->cloudinaryImageManager->uploadAndSynchronise(
4645
Image::fromPath($filepath, $this->mediaRelativePath($filepath))
4746
);
48-
4947
}
5048

5149
return $result;

Plugin/ImageHelper.php

+3
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ public function beforeKeepFrame(CatalogImageHelper $helper, $flag)
134134
*/
135135
public function aroundGetUrl(CatalogImageHelper $helper, \Closure $originalMethod)
136136
{
137+
if (!$this->configuration->isEnabled()) {
138+
return $originalMethod();
139+
}
137140
$imagePath = $this->imageFile ?: $this->product->getData($helper->getType());
138141

139142
$image = $this->imageFactory->build(sprintf('catalog/product%s', $imagePath), $originalMethod);

Plugin/MediaConfig.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@ public function aroundGetMediaUrl(CatalogMediaConfig $mediaConfig, \Closure $ori
3939
{
4040
$image = $this->imageFactory->build(
4141
$mediaConfig->getBaseMediaPath() . $file,
42-
function() use ($originalMethod, $file) { return $originalMethod($file); }
42+
function () use ($originalMethod, $file) {
43+
return $originalMethod($file);
44+
}
4345
);
4446

45-
return $this->urlGenerator->generateFor($image);
47+
return $this->urlGenerator->generateFor($image);
4648
}
4749
}

Plugin/Widget/Model/Template/Filter.php

+15-15
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Cloudinary\Cloudinary\Plugin\Widget\Model\Template;
44

5+
use Cloudinary\Cloudinary\Core\ConfigurationInterface;
56
use Cloudinary\Cloudinary\Core\Image\ImageFactory;
67
use Cloudinary\Cloudinary\Core\UrlGenerator;
78
use Cloudinary\Cloudinary\Model\Template\Filter as CloudinaryWidgetFilter;
@@ -12,10 +13,6 @@
1213
*/
1314
class Filter
1415
{
15-
/**
16-
* @var StoreManagerInterface
17-
*/
18-
protected $_storeManager;
1916
/**
2017
* @var ImageFactory
2118
*/
@@ -26,13 +23,17 @@ class Filter
2623
*/
2724
protected $_urlGenerator;
2825

26+
/**
27+
* @var ConfigurationInterface
28+
*/
29+
protected $_configuration;
30+
2931
/**
3032
* @var CloudinaryWidgetFilter
3133
*/
3234
protected $_cloudinaryWidgetFilter;
3335

3436
/**
35-
* @param StoreManagerInterface $storeManager
3637
* @param ImageFactory $imageFactory
3738
* @param UrlGenerator $urlGenerator
3839
* @param CloudinaryWidgetFilter $cloudinaryWidgetFilter
@@ -41,11 +42,12 @@ public function __construct(
4142
StoreManagerInterface $storeManager,
4243
ImageFactory $imageFactory,
4344
UrlGenerator $urlGenerator,
45+
ConfigurationInterface $configuration,
4446
CloudinaryWidgetFilter $cloudinaryWidgetFilter
4547
) {
46-
$this->_storeManager = $storeManager;
4748
$this->_imageFactory = $imageFactory;
4849
$this->_urlGenerator = $urlGenerator;
50+
$this->_configuration = $configuration;
4951
$this->_cloudinaryWidgetFilter = $cloudinaryWidgetFilter;
5052
}
5153

@@ -59,21 +61,19 @@ public function __construct(
5961
*/
6062
public function aroundMediaDirective(\Magento\Widget\Model\Template\Filter $widgetFilter, callable $proceed, $construction)
6163
{
64+
if (!$this->_configuration->isEnabled()) {
65+
return $proceed($construction);
66+
}
6267
$params = $this->_cloudinaryWidgetFilter->getParams($construction[2]);
6368
if (!isset($params['url'])) {
6469
return $proceed($construction);
6570
}
66-
67-
$storeManager = $this->_storeManager;
71+
$url = (preg_match('/^&quot;.+&quot;$/', $params['url'])) ? preg_replace('/(^&quot;)|(&quot;$)/', '', $params['url']) : $params['url'];
6872

6973
$image = $this->_imageFactory->build(
70-
$params['url'],
71-
function () use ($storeManager, $params) {
72-
return sprintf(
73-
'%s%s',
74-
$storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA),
75-
$params['url']
76-
);
74+
$url,
75+
function () use ($proceed, $construction) {
76+
return $proceed($construction);
7777
}
7878
);
7979

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ Run the following command under your Magento 2 root dir:
99

1010
```
1111
composer require cloudinary/cloudinary-magento2
12+
php bin/magento maintenance:enable
1213
php bin/magento setup:upgrade
1314
php bin/magento setup:di:compile
1415
php bin/magento setup:static-content:deploy
16+
php bin/magento maintenance:disable
1517
php bin/magento cache:flush
1618
```
1719

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "cloudinary/cloudinary-magento2",
33
"description": "Cloudinary Magento 2 Integration.",
44
"type": "magento2-module",
5-
"version": "1.6.5",
5+
"version": "1.6.8",
66
"minimum-stability": "dev",
77
"license": "MIT",
88
"repositories": {

etc/di.xml

+4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
<plugin name="cloudinary_image_helper_plugin" type="Cloudinary\Cloudinary\Plugin\ImageHelper" />
4444
</type>
4545

46+
<type name="Magento\Catalog\Block\Product\ImageFactory">
47+
<plugin name="cloudinary_plugin_catalog_block_product_imagefactory" type="Cloudinary\Cloudinary\Plugin\Catalog\Block\Product\ImageFactory" />
48+
</type>
49+
4650
<type name="Magento\Catalog\Model\Product\Media\Config">
4751
<plugin name="cloudinary_product_media_config_plugin" type="Cloudinary\Cloudinary\Plugin\MediaConfig" />
4852
</type>

0 commit comments

Comments
 (0)