Skip to content

Commit

Permalink
CLOUDINARY-33: v1.6.4, In order to support Magento 2.3 & also apply b…
Browse files Browse the repository at this point in the history
…est practices - Removed the di override for \Magento\Widget\Model\Template\Filter & Built a plugin for that instead.
  • Loading branch information
pini-girit committed Dec 6, 2018
1 parent 290f332 commit 18ad1fe
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 97 deletions.
10 changes: 9 additions & 1 deletion Model/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ public function __construct(
$this->storeManager = $storeManager;
}

/**
* @return Cloud
*/
public function getStoreManager()
{
return $this->storeManager;
}

/**
* @return Cloud
*/
Expand Down Expand Up @@ -150,7 +158,7 @@ public function getCdnSubdomainStatus()
*/
public function getUserPlatform()
{
return sprintf(self::USER_PLATFORM_TEMPLATE, '1.6.3', '2.0.0');
return sprintf(self::USER_PLATFORM_TEMPLATE, '1.6.4', '2.0.0');
}

/**
Expand Down
97 changes: 5 additions & 92 deletions Model/Template/Filter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,105 +2,18 @@

namespace Cloudinary\Cloudinary\Model\Template;

use Cloudinary\Cloudinary\Core\Image\ImageFactory;
use Cloudinary\Cloudinary\Core\UrlGenerator;
use Magento\Widget\Model\Template\Filter as WidgetFilter;

class Filter extends WidgetFilter
{
/**
* @var ImageFactory
*/
private $imageFactory;

/**
* @var UrlGenerator
*/
private $urlGenerator;

/**
* @param \Magento\Framework\Stdlib\StringUtils $string
* @param \Psr\Log\LoggerInterface $logger
* @param \Magento\Framework\Escaper $escaper
* @param \Magento\Framework\View\Asset\Repository $assetRepo
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
* @param \Magento\Variable\Model\VariableFactory $coreVariableFactory
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Magento\Framework\View\LayoutInterface $layout
* @param \Magento\Framework\View\LayoutFactory $layoutFactory
* @param \Magento\Framework\App\State $appState
* @param \Magento\Framework\UrlInterface $urlModel
* @param \Pelago\Emogrifier $emogrifier
* @param \Magento\Email\Model\Source\Variables $configVariables
* @param \Magento\Widget\Model\ResourceModel\Widget $widgetResource
* @param \Magento\Widget\Model\Widget $widget
* @param ImageFactory $imageFactory
* @param UrlGenerator $urlGenerator
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
\Magento\Framework\Stdlib\StringUtils $string,
\Psr\Log\LoggerInterface $logger,
\Magento\Framework\Escaper $escaper,
\Magento\Framework\View\Asset\Repository $assetRepo,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Variable\Model\VariableFactory $coreVariableFactory,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\View\LayoutInterface $layout,
\Magento\Framework\View\LayoutFactory $layoutFactory,
\Magento\Framework\App\State $appState,
\Magento\Framework\UrlInterface $urlModel,
\Pelago\Emogrifier $emogrifier,
\Magento\Email\Model\Source\Variables $configVariables,
\Magento\Widget\Model\ResourceModel\Widget $widgetResource,
\Magento\Widget\Model\Widget $widget,
ImageFactory $imageFactory,
UrlGenerator $urlGenerator
) {
$this->imageFactory = $imageFactory;
$this->urlGenerator = $urlGenerator;

parent::__construct(
$string,
$logger,
$escaper,
$assetRepo,
$scopeConfig,
$coreVariableFactory,
$storeManager,
$layout,
$layoutFactory,
$appState,
$urlModel,
$emogrifier,
$configVariables,
$widgetResource,
$widget
);
}

/**
* Retrieve media file URL directive
* Return associative array of parameters *exposing $this->getParameters().
*
* @param string[] $construction
* @return string
* @param string $value raw parameters
* @return array
*/
public function mediaDirective($construction)
public function getParams($value)
{
$params = $this->getParameters($construction[2]);
$storeManager = $this->_storeManager;

$image = $this->imageFactory->build(
$params['url'],
function () use ($storeManager, $params) {
return sprintf(
'%s%s',
$storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA),
$params['url']
);
}
);

return $this->urlGenerator->generateFor($image);
return $this->getParameters($value);
}
}
82 changes: 82 additions & 0 deletions Plugin/Widget/Model/Template/Filter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?php

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

use Cloudinary\Cloudinary\Core\Image\ImageFactory;
use Cloudinary\Cloudinary\Core\UrlGenerator;
use Cloudinary\Cloudinary\Model\Template\Filter as CloudinaryWidgetFilter;
use Magento\Store\Model\StoreManagerInterface;

/**
* Plugin for Template Filter Model
*/
class Filter
{
/**
* @var StoreManagerInterface
*/
protected $_storeManager;
/**
* @var ImageFactory
*/
protected $_imageFactory;

/**
* @var UrlGenerator
*/
protected $_urlGenerator;

/**
* @var CloudinaryWidgetFilter
*/
protected $_cloudinaryWidgetFilter;

/**
* @param StoreManagerInterface $storeManager
* @param ImageFactory $imageFactory
* @param UrlGenerator $urlGenerator
* @param CloudinaryWidgetFilter $cloudinaryWidgetFilter
*/
public function __construct(
StoreManagerInterface $storeManager,
ImageFactory $imageFactory,
UrlGenerator $urlGenerator,
CloudinaryWidgetFilter $cloudinaryWidgetFilter
) {
$this->_storeManager = $storeManager;
$this->_imageFactory = $imageFactory;
$this->_urlGenerator = $urlGenerator;
$this->_cloudinaryWidgetFilter = $cloudinaryWidgetFilter;
}

/**
* Around retrieve media file URL directive
*
* @param \Magento\Widget\Model\Template\Filter $widgetFilter
* @param callable $proceed
* @param string[] $construction
* @return string
*/
public function aroundMediaDirective(\Magento\Widget\Model\Template\Filter $widgetFilter, callable $proceed, $construction)
{
$params = $this->_cloudinaryWidgetFilter->getParams($construction[2]);
if (!isset($params['url'])) {
return $proceed($construction);
}

$storeManager = $this->_storeManager;

$image = $this->_imageFactory->build(
$params['url'],
function () use ($storeManager, $params) {
return sprintf(
'%s%s',
$storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA),
$params['url']
);
}
);

return $this->_urlGenerator->generateFor($image);
}
}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "cloudinary/cloudinary-magento2",
"description": "Cloudinary Magento 2 Integration.",
"type": "magento2-module",
"version": "1.6.3",
"version": "1.6.4",
"minimum-stability": "dev",
"license": "MIT",
"repositories": {
Expand Down
5 changes: 3 additions & 2 deletions etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@
<preference for="Cloudinary\Cloudinary\Core\AutoUploadMapping\AutoUploadConfigurationInterface"
type="Cloudinary\Cloudinary\Model\AutoUploadMapping\AutoUploadConfiguration" />

<preference for="Magento\Widget\Model\Template\Filter"
type="Cloudinary\Cloudinary\Model\Template\Filter" />
<type name="Magento\Widget\Model\Template\Filter">
<plugin name="cloudinary_plugin_widget_model_template_filter" type="Cloudinary\Cloudinary\Plugin\Widget\Model\Template\Filter" />
</type>

<type name="Magento\Catalog\Helper\Image">
<plugin name="cloudinary_image_helper_plugin" type="Cloudinary\Cloudinary\Plugin\ImageHelper" />
Expand Down
2 changes: 1 addition & 1 deletion etc/module.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Cloudinary_Cloudinary" setup_version="1.6.3">
<module name="Cloudinary_Cloudinary" setup_version="1.6.4">
<sequence>
<module name="Magento_ProductVideo"/>
</sequence>
Expand Down

0 comments on commit 18ad1fe

Please sign in to comment.