diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/ActionGroup/AssertAdminMediaGalleryAssetFilterPlaceHolderActionGroup.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/ActionGroup/AssertAdminMediaGalleryAssetFilterPlaceHolderActionGroup.xml
new file mode 100644
index 0000000000000..c9c9a25d8a2a3
--- /dev/null
+++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/ActionGroup/AssertAdminMediaGalleryAssetFilterPlaceHolderActionGroup.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Assert asset filter placeholder value
+
+
+
+
+
+
+
+
diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Section/AdminMediaGalleryCatalogUiCategoryGridSection.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Section/AdminMediaGalleryCatalogUiCategoryGridSection.xml
index 5267a215c8edd..e5ad84ac5b9df 100644
--- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Section/AdminMediaGalleryCatalogUiCategoryGridSection.xml
+++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Section/AdminMediaGalleryCatalogUiCategoryGridSection.xml
@@ -9,6 +9,7 @@
+
diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterTest.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterTest.xml
index d68fd4cb7cca8..74633fbb73542 100644
--- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterTest.xml
+++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterTest.xml
@@ -62,12 +62,20 @@
+
+
+
+
+
+
+
+
-
+
diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml
index e761ef5cd08ba..7e0fa6c477c45 100644
--- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml
+++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml
@@ -54,6 +54,9 @@
+
+
+
diff --git a/app/code/Magento/MediaGalleryCatalogUi/Ui/Component/Listing/Filters/UsedInProducts.php b/app/code/Magento/MediaGalleryCatalogUi/Ui/Component/Listing/Filters/UsedInProducts.php
index 254ebd047c954..d86617e12b8f8 100644
--- a/app/code/Magento/MediaGalleryCatalogUi/Ui/Component/Listing/Filters/UsedInProducts.php
+++ b/app/code/Magento/MediaGalleryCatalogUi/Ui/Component/Listing/Filters/UsedInProducts.php
@@ -80,54 +80,36 @@ public function prepare()
{
$options = [];
$productIds = [];
- $bookmarks = $this->bookmarkManagement->loadByNamespace($this->context->getNameSpace())->getItems();
- foreach ($bookmarks as $bookmark) {
- if ($bookmark->getIdentifier() === 'current') {
- $applied = $bookmark->getConfig()['current']['filters']['applied'];
- if (isset($applied[$this->getName()])) {
- $productIds = $applied[$this->getName()];
- }
- }
+ $bookmark = $this->bookmarkManagement->getByIdentifierNamespace(
+ 'current',
+ $this->context->getNameSpace()
+ );
+ if ($bookmark === null) {
+ parent::prepare();
+ return;
}
- foreach ($productIds as $id) {
- $product = $this->productRepository->getById($id);
- $options[] = [
- 'value' => $id,
- 'label' => $product->getName(),
- 'is_active' => $product->getStatus(),
- 'path' => $product->getSku(),
- 'optgroup' => false
+ $applied = $bookmark->getConfig()['current']['filters']['applied'];
- ];
+ if (isset($applied[$this->getName()])) {
+ $productIds = $applied[$this->getName()];
}
- $this->wrappedComponent = $this->uiComponentFactory->create(
- $this->getName(),
- parent::COMPONENT,
- [
- 'context' => $this->getContext(),
- 'options' => $options
- ]
- );
-
- $this->wrappedComponent->prepare();
- $productsFilterJsConfig = array_replace_recursive(
- $this->getJsConfig($this->wrappedComponent),
- $this->getJsConfig($this)
- );
- $this->setData('js_config', $productsFilterJsConfig);
-
- $this->setData(
- 'config',
- array_replace_recursive(
- (array)$this->wrappedComponent->getData('config'),
- (array)$this->getData('config')
- )
- );
-
- $this->applyFilter();
-
+ foreach ($productIds as $id) {
+ try {
+ $product = $this->productRepository->getById($id);
+ $options[] = [
+ 'value' => $id,
+ 'label' => $product->getName(),
+ 'is_active' => $product->getStatus(),
+ 'path' => $product->getSku(),
+ 'optgroup' => false
+ ];
+ } catch (\Exception $e) {
+ continue;
+ }
+ }
+ $this->optionsProvider = $options;
parent::prepare();
}
}
diff --git a/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInBlocks.php b/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInBlocks.php
index 09fea24c8a2a9..66f8caa71d70a 100644
--- a/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInBlocks.php
+++ b/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInBlocks.php
@@ -80,52 +80,36 @@ public function prepare()
{
$options = [];
$blockIds = [];
- $bookmarks = $this->bookmarkManagement->loadByNamespace($this->context->getNameSpace())->getItems();
- foreach ($bookmarks as $bookmark) {
- if ($bookmark->getIdentifier() === 'current') {
- $applied = $bookmark->getConfig()['current']['filters']['applied'];
- if (isset($applied[$this->getName()])) {
- $blockIds = $applied[$this->getName()];
- }
- }
- }
-
- foreach ($blockIds as $id) {
- $block = $this->blockRepository->getById($id);
- $options[] = [
- 'value' => $id,
- 'label' => $block->getTitle(),
- 'is_active' => $block->isActive(),
- 'optgroup' => false
- ];
+ $bookmark = $this->bookmarkManagement->getByIdentifierNamespace(
+ 'current',
+ $this->context->getNameSpace()
+ );
+ if ($bookmark === null) {
+ parent::prepare();
+ return;
}
- $this->wrappedComponent = $this->uiComponentFactory->create(
- $this->getName(),
- parent::COMPONENT,
- [
- 'context' => $this->getContext(),
- 'options' => $options
- ]
- );
+ $applied = $bookmark->getConfig()['current']['filters']['applied'];
- $this->wrappedComponent->prepare();
- $jsConfig = array_replace_recursive(
- $this->getJsConfig($this->wrappedComponent),
- $this->getJsConfig($this)
- );
- $this->setData('js_config', $jsConfig);
-
- $this->setData(
- 'config',
- array_replace_recursive(
- (array)$this->wrappedComponent->getData('config'),
- (array)$this->getData('config')
- )
- );
+ if (isset($applied[$this->getName()])) {
+ $blockIds = $applied[$this->getName()];
+ }
- $this->applyFilter();
+ foreach ($blockIds as $id) {
+ try {
+ $block = $this->blockRepository->getById($id);
+ $options[] = [
+ 'value' => $id,
+ 'label' => $block->getTitle(),
+ 'is_active' => $block->isActive(),
+ 'optgroup' => false
+ ];
+ } catch (\Exception $e) {
+ continue;
+ }
+ }
+ $this->optionsProvider = $options;
parent::prepare();
}
}
diff --git a/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInPages.php b/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInPages.php
index 235a77cdcb8c5..78ab1b63d32d1 100644
--- a/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInPages.php
+++ b/app/code/Magento/MediaGalleryCmsUi/Ui/Component/Listing/Filters/UsedInPages.php
@@ -80,52 +80,35 @@ public function prepare()
{
$options = [];
$pageIds = [];
- $bookmarks = $this->bookmarkManagement->loadByNamespace($this->context->getNameSpace())->getItems();
- foreach ($bookmarks as $bookmark) {
- if ($bookmark->getIdentifier() === 'current') {
- $applied = $bookmark->getConfig()['current']['filters']['applied'];
- if (isset($applied[$this->getName()])) {
- $pageIds = $applied[$this->getName()];
- }
- }
- }
-
- foreach ($pageIds as $id) {
- $page = $this->pageRepository->getById($id);
- $options[] = [
- 'value' => $id,
- 'label' => $page->getTitle(),
- 'is_active' => $page->isActive(),
- 'optgroup' => false
- ];
- }
-
- $this->wrappedComponent = $this->uiComponentFactory->create(
- $this->getName(),
- parent::COMPONENT,
- [
- 'context' => $this->getContext(),
- 'options' => $options
- ]
- );
-
- $this->wrappedComponent->prepare();
- $pagesFilterjsConfig = array_replace_recursive(
- $this->getJsConfig($this->wrappedComponent),
- $this->getJsConfig($this)
+ $bookmark = $this->bookmarkManagement->getByIdentifierNamespace(
+ 'current',
+ $this->context->getNameSpace()
);
- $this->setData('js_config', $pagesFilterjsConfig);
+ if ($bookmark === null) {
+ parent::prepare();
+ return;
+ }
- $this->setData(
- 'config',
- array_replace_recursive(
- (array)$this->wrappedComponent->getData('config'),
- (array)$this->getData('config')
- )
- );
+ $applied = $bookmark->getConfig()['current']['filters']['applied'];
- $this->applyFilter();
+ if (isset($applied[$this->getName()])) {
+ $pageIds = $applied[$this->getName()];
+ }
+ foreach ($pageIds as $id) {
+ try {
+ $page = $this->pageRepository->getById($id);
+ $options[] = [
+ 'value' => $id,
+ 'label' => $page->getTitle(),
+ 'is_active' => $page->isActive(),
+ 'optgroup' => false
+ ];
+ } catch (\Exception $e) {
+ continue;
+ }
+ }
+ $this->optionsProvider = $options;
parent::prepare();
}
}
diff --git a/app/code/Magento/MediaGalleryUi/Controller/Adminhtml/Asset/Search.php b/app/code/Magento/MediaGalleryUi/Controller/Adminhtml/Asset/Search.php
index df13250eacb5f..9b6c08edbc86d 100644
--- a/app/code/Magento/MediaGalleryUi/Controller/Adminhtml/Asset/Search.php
+++ b/app/code/Magento/MediaGalleryUi/Controller/Adminhtml/Asset/Search.php
@@ -139,7 +139,7 @@ public function execute()
$responseContent['options'][] = [
'value' => (string) $asset->getId(),
'label' => $asset->getTitle(),
- 'path' => $this->storage->getThumbnailUrl($this->images->getStorageRoot() . $asset->getPath())
+ 'src' => $this->storage->getThumbnailUrl($this->images->getStorageRoot() . $asset->getPath())
];
$responseContent['total'] = count($responseContent['options']);
}
diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminAssertMediaGalleryFilterPlaceholderActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminAssertMediaGalleryFilterPlaceholderActionGroup.xml
new file mode 100644
index 0000000000000..db400ff151ae3
--- /dev/null
+++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminAssertMediaGalleryFilterPlaceholderActionGroup.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Assert asset filter placeholder value
+
+
+
+
+
+
+
+
diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryFiltersSection.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryFiltersSection.xml
index 32b109f1e0483..da9f773d0f75e 100644
--- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryFiltersSection.xml
+++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryFiltersSection.xml
@@ -25,5 +25,6 @@
+
diff --git a/app/code/Magento/MediaGalleryUi/Ui/Component/Listing/Filters/Asset.php b/app/code/Magento/MediaGalleryUi/Ui/Component/Listing/Filters/Asset.php
index 273cf9e37554b..e8dc232584adb 100644
--- a/app/code/Magento/MediaGalleryUi/Ui/Component/Listing/Filters/Asset.php
+++ b/app/code/Magento/MediaGalleryUi/Ui/Component/Listing/Filters/Asset.php
@@ -15,9 +15,13 @@
use Magento\MediaContentApi\Api\GetContentByAssetIdsInterface;
use Magento\Ui\Component\Filters\FilterModifier;
use Magento\Ui\Component\Filters\Type\Select;
+use Magento\MediaGalleryApi\Api\GetAssetsByIdsInterface;
+use Magento\Cms\Helper\Wysiwyg\Images;
+use Magento\Cms\Model\Wysiwyg\Images\Storage;
+use Magento\Ui\Api\BookmarkManagementInterface;
/**
- * Asset filter
+ * Asset filter
*/
class Asset extends Select
{
@@ -27,14 +31,41 @@ class Asset extends Select
private $getContentIdentities;
/**
+ * @var GetAssetsByIdsInterface
+ */
+ private $getAssetsByIds;
+
+ /**
+ * @var Images
+ */
+ private $images;
+
+ /**
+ * @var Storage
+ */
+ private $storage;
+
+ /**
+ * @var BookmarkManagementInterface
+ */
+ private $bookmarkManagement;
+
+ /**
+ * Constructor
+ *
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param FilterBuilder $filterBuilder
* @param FilterModifier $filterModifier
* @param OptionSourceInterface $optionsProvider
* @param GetContentByAssetIdsInterface $getContentIdentities
+ * @param GetAssetsByIdsInterface $getAssetsByIds
+ * @param BookmarkManagementInterface $bookmarkManagement
+ * @param Images $images
+ * @param Storage $storage
* @param array $components
* @param array $data
+ * @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
ContextInterface $context,
@@ -43,6 +74,10 @@ public function __construct(
FilterModifier $filterModifier,
OptionSourceInterface $optionsProvider = null,
GetContentByAssetIdsInterface $getContentIdentities,
+ GetAssetsByIdsInterface $getAssetsByIds,
+ BookmarkManagementInterface $bookmarkManagement,
+ Images $images,
+ Storage $storage,
array $components = [],
array $data = []
) {
@@ -58,6 +93,89 @@ public function __construct(
$data
);
$this->getContentIdentities = $getContentIdentities;
+ $this->getAssetsByIds = $getAssetsByIds;
+ $this->bookmarkManagement = $bookmarkManagement;
+ $this->images = $images;
+ $this->storage = $storage;
+ }
+
+ /**
+ * Prepare component configuration
+ *
+ * @return void
+ */
+ public function prepare()
+ {
+ $options = [];
+ $assetIds = $this->getAssetIds();
+
+ if (empty($assetIds)) {
+ parent::prepare();
+ return;
+ }
+
+ $assets = $this->getAssetsByIds->execute($assetIds);
+
+ foreach ($assets as $asset) {
+ $assetPath = $this->storage->getThumbnailUrl($this->images->getStorageRoot() . $asset->getPath());
+ $options[] = [
+ 'value' => (string) $asset->getId(),
+ 'label' => $asset->getTitle(),
+ 'src' => $assetPath
+ ];
+ }
+
+ $this->optionsProvider = $options;
+ parent::prepare();
+ }
+
+ /**
+ * Get asset ids from filterData or from bookmarks
+ */
+ private function getAssetIds(): array
+ {
+ $assetIds = [];
+
+ if (isset($this->filterData[$this->getName()])) {
+ $assetIds = $this->filterData[$this->getName()];
+
+ if (!is_array($assetIds)) {
+ $assetIds = $this->stringToArray($assetIds);
+ }
+
+ return $assetIds;
+ }
+
+ $bookmark = $this->bookmarkManagement->getByIdentifierNamespace(
+ 'current',
+ $this->context->getNameSpace()
+ );
+
+ if ($bookmark === null) {
+ return $assetIds;
+ }
+
+ $applied = $bookmark->getConfig()['current']['filters']['applied'];
+
+ if (isset($applied[$this->getName()])) {
+ $assetIds = $applied[$this->getName()];
+ }
+
+ if (!is_array($assetIds)) {
+ $assetIds = $this->stringToArray($assetIds);
+ }
+
+ return $assetIds;
+ }
+
+ /**
+ * Converts string array from url-applier to array
+ *
+ * @param string $string
+ */
+ private function stringToArray(string $string): array
+ {
+ return explode(',', str_replace(['[', ']'], '', $string));
}
/**
@@ -67,17 +185,20 @@ public function __construct(
*/
public function applyFilter()
{
- if (isset($this->filterData[$this->getName()])) {
- $ids = is_array($this->filterData[$this->getName()])
- ? $this->filterData[$this->getName()]
- : [$this->filterData[$this->getName()]];
- $filter = $this->filterBuilder->setConditionType('in')
- ->setField($this->_data['config']['identityColumn'])
- ->setValue($this->getEntityIdsByAsset($ids))
- ->create();
-
- $this->getContext()->getDataProvider()->addFilter($filter);
+ if (!isset($this->filterData[$this->getName()])) {
+ return;
}
+
+ $assetIds = $this->filterData[$this->getName()];
+ if (!is_array($assetIds)) {
+ $assetIds = $this->stringToArray($assetIds);
+ }
+
+ $filter = $this->filterBuilder->setConditionType('in')
+ ->setField($this->_data['config']['identityColumn'])
+ ->setValue($this->getEntityIdsByAsset($assetIds))
+ ->create();
+ $this->getContext()->getDataProvider()->addFilter($filter);
}
/**
diff --git a/app/code/Magento/MediaGalleryUi/view/adminhtml/web/js/image/image-actions.js b/app/code/Magento/MediaGalleryUi/view/adminhtml/web/js/image/image-actions.js
index c7ca95bed863c..dfd4420c701bb 100644
--- a/app/code/Magento/MediaGalleryUi/view/adminhtml/web/js/image/image-actions.js
+++ b/app/code/Magento/MediaGalleryUi/view/adminhtml/web/js/image/image-actions.js
@@ -51,6 +51,7 @@ define([
return;
}
+ this.mediaGalleryEditDetails().keywordsSelect().cacheOptions.plain = [];
modalElement.modal('closeModal');
},
diff --git a/app/code/Magento/MediaGalleryUi/view/adminhtml/web/template/grid/filters/elements/ui-select.html b/app/code/Magento/MediaGalleryUi/view/adminhtml/web/template/grid/filters/elements/ui-select.html
index cce859f331d9a..a0d21672eafdb 100644
--- a/app/code/Magento/MediaGalleryUi/view/adminhtml/web/template/grid/filters/elements/ui-select.html
+++ b/app/code/Magento/MediaGalleryUi/view/adminhtml/web/template/grid/filters/elements/ui-select.html
@@ -77,8 +77,7 @@