Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions Model/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ class Configuration implements ConfigurationInterface
* @param ModuleListInterface $moduleList
* @param ProductMetadataInterface $productMetadata
* @param CloudinaryLogger $cloudinaryLogger
* @param registry $coreRegistry
* @param Registry $coreRegistry
*/
public function __construct(
ScopeConfigInterface $configReader,
Expand All @@ -182,7 +182,7 @@ public function __construct(
ModuleListInterface $moduleList,
ProductMetadataInterface $productMetadata,
CloudinaryLogger $cloudinaryLogger,
registry $coreRegistry
Registry $coreRegistry
) {
$this->configReader = $configReader;
$this->configWriter = $configWriter;
Expand All @@ -204,6 +204,14 @@ public function getStoreManager()
return $this->storeManager;
}

/**
* @return Registry
*/
public function getCoreRegistry()
{
return $this->coreRegistry;
}

/**
* @return Cloud
*/
Expand Down
51 changes: 46 additions & 5 deletions Model/SynchronisationChecker.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,15 @@
use Cloudinary\Cloudinary\Core\AutoUploadMapping\AutoUploadConfigurationInterface;
use Cloudinary\Cloudinary\Core\ConfigurationInterface;
use Cloudinary\Cloudinary\Core\Image\SynchronizationCheck;
use Magento\Framework\Registry;

class SynchronisationChecker implements SynchronizationCheck
{
/**
* @var string
*/
private $imageNameCacheKey;

/**
* @var SynchronisationRepositoryInterface
*/
Expand All @@ -29,30 +35,60 @@ class SynchronisationChecker implements SynchronizationCheck
*/
private $mediaLibraryMapFactory;

/**
* @var Registry
*/
private $coreRegistry;

/**
* @method __construct
* @param SynchronisationRepositoryInterface $synchronisationRepository
* @param ConfigurationInterface $configuration
* @param AutoUploadConfigurationInterface $autoUploadConfiguration
* @param MediaLibraryMapFactory $mediaLibraryMapFactory
* @param Registry $coreRegistry
*/
public function __construct(
SynchronisationRepositoryInterface $synchronisationRepository,
ConfigurationInterface $configuration,
AutoUploadConfigurationInterface $autoUploadConfiguration,
MediaLibraryMapFactory $mediaLibraryMapFactory
MediaLibraryMapFactory $mediaLibraryMapFactory,
Registry $coreRegistry
) {
$this->synchronisationRepository = $synchronisationRepository;
$this->configuration = $configuration;
$this->autoUploadConfiguration = $autoUploadConfiguration;
$this->mediaLibraryMapFactory = $mediaLibraryMapFactory;
$this->coreRegistry = $coreRegistry;
}

/**
* @method cacheResult
* @param bool $result
* @return mixed
*/
private function cacheResult($result)
{
$this->coreRegistry->unregister($this->imageNameCacheKey);
$this->coreRegistry->register($this->imageNameCacheKey, $result);
return $result;
}

/**
* @param $imageName
* @method cacheResult
* @return mixed
*/
private function getFromCache()
{
return $this->coreRegistry->registry($this->imageNameCacheKey);
}

/**
* @param string $imageName
* @param bool $refresh
* @return bool
*/
public function isSynchronized($imageName)
public function isSynchronized($imageName, $refresh = false)
{
if (!$imageName) {
return false;
Expand All @@ -62,17 +98,22 @@ public function isSynchronized($imageName)
return true;
}

$this->imageNameCacheKey = 'cldsynccheckcachekey_' . (string) $imageName;
if (!$refresh && ($cacheResult = $this->getFromCache()) !== null) {
return $cacheResult;
}

if ($this->configuration->isEnabledLocalMapping()) {
//Look for a match on the mapping table:
preg_match('/(cld_[A-Za-z0-9]{13}_).+$/i', $imageName, $cldUniqid);
if ($cldUniqid && isset($cldUniqid[1])) {
$mapped = $this->mediaLibraryMapFactory->create()->getCollection()->addFieldToFilter("cld_uniqid", $cldUniqid[1])->setPageSize(1)->getFirstItem();
if ($mapped && ($origPublicId = $mapped->getCldPublicId())) {
return true;
return $this->cacheResult(true);
}
}
}

return $this->synchronisationRepository->getListByImagePath($imageName)->getTotalCount() > 0;
return $this->cacheResult($this->synchronisationRepository->isSynchronizedImagePath($imageName));
}
}
37 changes: 31 additions & 6 deletions Model/SynchronisationRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,18 @@

namespace Cloudinary\Cloudinary\Model;

use Cloudinary\Cloudinary\Core\SynchroniseAssetsRepositoryInterface;

use Cloudinary\Cloudinary\Api\SynchronisationRepositoryInterface;
use Cloudinary\Cloudinary\Model\SynchronisationFactory;
use Cloudinary\Cloudinary\Model\ResourceModel\Synchronisation\CollectionFactory;

use Cloudinary\Cloudinary\Core\SynchroniseAssetsRepositoryInterface;
use Cloudinary\Cloudinary\Model\ResourceModel\Synchronisation\Collection as SynchronisationCollection;
use Cloudinary\Cloudinary\Model\ResourceModel\Synchronisation\CollectionFactory;

use Magento\Framework\Api\AbstractSimpleObject;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\Api\SearchCriteriaInterface;
use Magento\Framework\Api\SearchResultsInterface;
use Magento\Framework\Api\SearchResultsInterfaceFactory;
use Magento\Framework\App\ResourceConnection;

class SynchronisationRepository implements SynchronisationRepositoryInterface, SynchroniseAssetsRepositoryInterface
{
Expand Down Expand Up @@ -48,6 +47,11 @@ class SynchronisationRepository implements SynchronisationRepositoryInterface, S
*/
private $synchronisationFactory;

/**
* @var ResourceConnection
*/
private $connection;

/**
* @param FilterBuilder $filterBuilder
* @param SearchCriteriaBuilder $searchCriteriaBuilder
Expand All @@ -62,14 +66,16 @@ public function __construct(
CollectionFactory $collectionFactory,
SearchResultsInterface $searchResult,
SearchResultsInterfaceFactory $searchResultsFactory,
SynchronisationFactory $synchronisationFactory
SynchronisationFactory $synchronisationFactory,
ResourceConnection $resourceConnection
) {
$this->filterBuilder = $filterBuilder;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
$this->collectionFactory = $collectionFactory;
$this->searchResult = $searchResult;
$this->searchResultsFactory = $searchResultsFactory;
$this->synchronisationFactory = $synchronisationFactory;
$this->connection = $resourceConnection->getConnection();
}

/**
Expand Down Expand Up @@ -98,6 +104,9 @@ public function getList(SearchCriteriaInterface $searchCriteria)
}

/**
* @deprecated
* For checking if image path is synchronized, use isSynchronizedImagePath()
*
* @param string $imagePath
*
* @return SearchResultsInterface
Expand All @@ -109,6 +118,22 @@ public function getListByImagePath($imagePath)
return $this->getList($this->searchCriteriaBuilder->create());
}

/**
* @param string $imagePath
*
* @return bool
*/
public function isSynchronizedImagePath($imagePath)
{
return $this->connection->fetchAll($this->connection->select()
->from(
$this->connection->getTableName("cloudinary_synchronisation"),
['cloudinary_synchronisation_id']
)
->where('image_path = ?', $imagePath)
->limit(1)) ? true : false;
}

/**
* @param string $imagePath
*/
Expand Down
5 changes: 2 additions & 3 deletions Model/Transformation.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

namespace Cloudinary\Cloudinary\Model;

use Cloudinary\Cloudinary\Model\ResourceModel\Transformation as TransformationResourceModel;
use Cloudinary\Cloudinary\Model\Configuration;
use Cloudinary\Cloudinary\Core\Image\Transformation\Freeform;
use Cloudinary\Cloudinary\Core\Image\Transformation as ImageTransformation;
use Cloudinary\Cloudinary\Core\Image\Transformation\Freeform;
use Cloudinary\Cloudinary\Model\ResourceModel\Transformation as TransformationResourceModel;
use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\Model\AbstractModel;
use Magento\Framework\Model\Context;
Expand Down
8 changes: 8 additions & 0 deletions Setup/UpgradeSchema.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $con
$this->createProductSpinsetMapTable($setup);
}

if (version_compare($context->getVersion(), '1.14.9', '<')) {
$setup->getConnection()->addIndex(
$setup->getTable('cloudinary_synchronisation'),
$setup->getIdxName('cloudinary_synchronisation', ['image_path']),
['image_path']
);
}

$setup->endSetup();
}

Expand Down
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.14.8",
"version": "1.14.9",
"license": "MIT",
"require": {
"cloudinary/cloudinary_php": "^1.20.0"
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.14.8">
<module name="Cloudinary_Cloudinary" setup_version="1.14.9">
<sequence>
<module name="Magento_ProductVideo"/>
<module name="Magento_PageBuilder"/>
Expand Down
2 changes: 1 addition & 1 deletion marketplace.composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "cloudinary/cloudinary",
"description": "Cloudinary Magento 2 Integration.",
"type": "magento2-module",
"version": "1.14.8",
"version": "1.14.9",
"license": "MIT",
"require": {
"cloudinary/cloudinary_php": "^1.20.0"
Expand Down