Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

magento/adobe-stock-integration#1467: Introduce Used In Pages filter … #1546

Closed
wants to merge 9 commits into from
Closed
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\MediaGalleryUi\Model\SearchCriteria\CollectionProcessor\FilterProcessor;
use Magento\Framework\Api\Filter;
use Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor\CustomFilterInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\DB\Select;
/**
* Custom filter to filter collection by entity type
*/
class Entityid implements CustomFilterInterface
{
private const TABLE_ALIAS = 'main_table';
private const MEDIA_CONTENT_ASSET_TABLE_NAME = 'media_content_asset';
/**
* @var ResourceConnection
*/
private $connection;
/**
* @param ResourceConnection $resource
*/
public function __construct(ResourceConnection $resource)
{
$this->connection = $resource;
}
/**
* @inheritDoc
*/
public function apply(Filter $filter, AbstractDb $collection): bool
{
$value = $filter->getValue();
if (is_array($value)) {
$collection->addFieldToFilter(
self::TABLE_ALIAS . '.id',
['in' => $this->getSelectByEntityType($value)]
);
}
return true;
}
/**
* Return select asset ids by entity type
*
* @param array $value
* @return Select
*/
private function getSelectByEntityType(array $value): Select
{
return $this->connection->getConnection()->select()->from(
['asset_content_table' => $this->connection->getTableName(self::MEDIA_CONTENT_ASSET_TABLE_NAME)],
['asset_id']
)->where(
'entity_id IN (?)',
$value
)->where(
'entity_type = "cms_page"'
);
}
}
57 changes: 57 additions & 0 deletions MediaGalleryUi/Ui/Component/Listing/Filters/Options/Pages.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\MediaGalleryUi\Ui\Component\Listing\Filters\Options;

use Magento\Cms\Api\PageRepositoryInterface;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Data\OptionSourceInterface;
/**
* Image source filter options
*/
class Pages implements OptionSourceInterface
{
private $PageRepository;

private $SearchCriteriaBuilder;

private $FilterBuilder;

/**
* @param PageRepositoryInterface $pageRepository
* @param SearchCriteriaBuilder $searchCriteriaBuilder
* @param FilterBuilder $filterBuilder
*/
public function __construct(
PageRepositoryInterface $pageRepository,
SearchCriteriaBuilder $searchCriteriaBuilder,
FilterBuilder $filterBuilder
) {
$this->PageRepository = $pageRepository;
$this->SearchCriteriaBuilder = $searchCriteriaBuilder;
$this->FilterBuilder = $filterBuilder;
}

/**
* @inheritdoc
*/
public function toOptionArray(): array
{
$searchCriteria = $this->SearchCriteriaBuilder->create();
$pages = [];
$result = $this->PageRepository->getList($searchCriteria);
/** @var \Magento\Cms\Api\Data\PageInterface $page */
foreach ($result->getItems() as $page) {
$pages[] = [
'value' => $page->getId(),
'label' => $page->getTitle()
];
}
return $pages;
}
}
7 changes: 7 additions & 0 deletions MediaGalleryUi/etc/adminhtml/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,11 @@
<argument name="collectionProcessor" xsi:type="object">Magento\MediaGalleryUi\Model\Api\SearchCriteria\CollectionProcessor</argument>
</arguments>
</type>
<virtualType name="Magento\MediaGalleryUi\Model\Api\SearchCriteria\CollectionProcessor\FilterProcessor" type="Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor">
<arguments>
<argument name="customFilters" xsi:type="array">
<item name="page_id" xsi:type="object">Magento\MediaGalleryUi\Model\SearchCriteria\CollectionProcessor\FilterProcessor\EntityId</item>
</argument>
</arguments>
</virtualType>
</config>
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,23 @@
<dataScope>updated_at</dataScope>
</settings>
</filterRange>
<filterSelect name="page_id" provider="${ $.parentName }" sortOrder="70" component="Magento_Ui/js/form/element/ui-select" template="ui/grid/filters/elements/ui-select">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filterOptions" xsi:type="boolean">true</item>
<item name="levelsVisibility" xsi:type="number">1</item>
</item>
</argument>
<settings>
<options class="Magento\MediaGalleryUi\Ui\Component\Listing\Filters\Options\Pages"/>
<caption translate="true">– Please Select a Page –</caption>
<label translate="true">Filter by pages</label>
<dataScope>page_id</dataScope>
<imports>
<link name="visible">componentType = column, index = ${ $.index }:visible</link>
</imports>
</settings>
</filterSelect>
</filters>
<paging name="listing_paging">
<settings>
Expand Down