From 06d02346566587cf2072d89b3dc3a5a9a1363da6 Mon Sep 17 00:00:00 2001 From: Martin Eiber Date: Mon, 16 Sep 2024 14:35:14 +0200 Subject: [PATCH 1/3] Init Commit. --- doc/03_Grid.md | 27 ++++++----- .../Filter/UnreferencedDependencyFilter.php | 48 +++++++++++++++++++ src/DataIndex/Query/AssetQuery.php | 9 ++++ src/DataIndex/Query/QueryInterface.php | 2 + src/Grid/Column/ColumnType.php | 2 + 5 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 src/DataIndex/Filter/UnreferencedDependencyFilter.php diff --git a/doc/03_Grid.md b/doc/03_Grid.md index d5621523d..64659edee 100644 --- a/doc/03_Grid.md +++ b/doc/03_Grid.md @@ -28,19 +28,20 @@ A `columnFilter` has a reference to the column and the value you want to filter Available filters are: -| Type | filterValue | Options | -|:-----------------:|:-------------------:|:---------------------------:| -| metadata.select | string | | -| metadata.date | object of timestamp | `from`, `to`, or `on` | -| metadata.input | string | | -| metadata.checkbox | boolean | | -| metadata.textarea | string | | -| metadata.object | integer | ID of the object | -| metadata.document | integer | ID fo the document | -| metadata.asset | integer | ID fo the asset | -| system.string | string | Wildcard search can be used | -| system.datetime | integer | `from`, `to`, or `on` | -| system.tag | object | `considerChildTags`, `tags` | +| Type | filterValue | Options | +|:-------------------------------:|:-------------------:|:---------------------------:| +| metadata.select | string | | +| metadata.date | object of timestamp | `from`, `to`, or `on` | +| metadata.input | string | | +| metadata.checkbox | boolean | | +| metadata.textarea | string | | +| metadata.object | integer | ID of the object | +| metadata.document | integer | ID fo the document | +| metadata.asset | integer | ID fo the asset | +| system.string | string | Wildcard search can be used | +| system.datetime | integer | `from`, `to`, or `on` | +| system.tag | object | `considerChildTags`, `tags` | +| system.unreferencedDependencies | boolean | | diff --git a/src/DataIndex/Filter/UnreferencedDependencyFilter.php b/src/DataIndex/Filter/UnreferencedDependencyFilter.php new file mode 100644 index 000000000..5e76666ef --- /dev/null +++ b/src/DataIndex/Filter/UnreferencedDependencyFilter.php @@ -0,0 +1,48 @@ +getFirstColumnFilterByType(ColumnType::SYSTEM_UNREFERENCED_DEPENDENCIES->value); + + if (!$filter) { + return $query; + } + + if (!is_bool($filter->getFilterValue())) { + throw new InvalidArgumentException('Filter value for unreferenced dependencies must be a boolean'); + } + + return $query->filterForUnreferencedDependencies($filter->getFilterValue()); + } +} diff --git a/src/DataIndex/Query/AssetQuery.php b/src/DataIndex/Query/AssetQuery.php index e2964166e..ddf66f32a 100644 --- a/src/DataIndex/Query/AssetQuery.php +++ b/src/DataIndex/Query/AssetQuery.php @@ -156,4 +156,13 @@ public function filterTags(array $tags, bool $considerChildTags): QueryInterface return $this; } + + public function filterRequiredBy(int $id): QueryInterface + { + //$this->search->addModifier(new ($tags, $considerChildTags) + + return $this; + } + + } diff --git a/src/DataIndex/Query/QueryInterface.php b/src/DataIndex/Query/QueryInterface.php index 6f9d5ad6b..2d0fa8b18 100644 --- a/src/DataIndex/Query/QueryInterface.php +++ b/src/DataIndex/Query/QueryInterface.php @@ -42,4 +42,6 @@ public function searchByIds(array $ids): self; * @param array $tags */ public function filterTags(array $tags, bool $considerChildTags): self; + + //public function filterRequiredBy(int $id): self; } diff --git a/src/Grid/Column/ColumnType.php b/src/Grid/Column/ColumnType.php index c38d59be0..678cd4a43 100644 --- a/src/Grid/Column/ColumnType.php +++ b/src/Grid/Column/ColumnType.php @@ -26,6 +26,8 @@ enum ColumnType: string case SYSTEM_INTEGER = 'system.integer'; case SYSTEM_DATETIME = 'system.datetime'; case SYSTEM_TAG = 'system.tag'; + + case SYSTEM_UNREFERENCED_DEPENDENCIES = 'system.unreferencedDependencies'; case METADATA_SELECT = 'metadata.select'; case METADATA_INPUT = 'metadata.input'; case METADATA_DATE = 'metadata.date'; From 6eb92a569b2db8ad7e5e574f3a887fc1ce03abda Mon Sep 17 00:00:00 2001 From: Martin Eiber Date: Wed, 18 Sep 2024 10:24:25 +0200 Subject: [PATCH 2/3] Add NoDependencies Filter. --- composer.json | 2 +- config/data_index_filters.yaml | 3 +++ ...edDependencyFilter.php => NoDependenciesFilter.php} | 8 ++++++-- src/DataIndex/Query/AssetQuery.php | 9 ++++----- src/DataIndex/Query/DataObjectQuery.php | 10 +++++++++- src/DataIndex/Query/QueryInterface.php | 2 +- 6 files changed, 24 insertions(+), 10 deletions(-) rename src/DataIndex/Filter/{UnreferencedDependencyFilter.php => NoDependenciesFilter.php} (88%) diff --git a/composer.json b/composer.json index 9620d38da..a63bdba52 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ "php": "~8.2.0 || ~8.3.0", "nesbot/carbon": "^2.65", "pimcore/static-resolver-bundle": "1.x-dev", - "pimcore/generic-data-index-bundle": "1.x-dev", + "pimcore/generic-data-index-bundle": "dev-210-filters-add-filter-to-list-items-without-dependencies", "pimcore/pimcore": "^11.x-dev", "zircote/swagger-php": "^4.8", "ext-zip": "*", diff --git a/config/data_index_filters.yaml b/config/data_index_filters.yaml index 53fdfc0b7..8181e9b6b 100644 --- a/config/data_index_filters.yaml +++ b/config/data_index_filters.yaml @@ -35,6 +35,9 @@ services: Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\TagFilter: tags: [ 'pimcore.studio_backend.open_search.filter' ] + Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\NoDependenciesFilter: + tags: [ 'pimcore.studio_backend.open_search.filter' ] + # DataObject Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject\ClassNameFilter: tags: [ 'pimcore.studio_backend.open_search.data_object.filter' ] diff --git a/src/DataIndex/Filter/UnreferencedDependencyFilter.php b/src/DataIndex/Filter/NoDependenciesFilter.php similarity index 88% rename from src/DataIndex/Filter/UnreferencedDependencyFilter.php rename to src/DataIndex/Filter/NoDependenciesFilter.php index 5e76666ef..ed9f7dce4 100644 --- a/src/DataIndex/Filter/UnreferencedDependencyFilter.php +++ b/src/DataIndex/Filter/NoDependenciesFilter.php @@ -25,7 +25,7 @@ /** * @internal */ -final class UnreferencedDependencyFilter implements FilterInterface +final class NoDependenciesFilter implements FilterInterface { public function apply(mixed $parameters, QueryInterface $query): QueryInterface { @@ -43,6 +43,10 @@ public function apply(mixed $parameters, QueryInterface $query): QueryInterface throw new InvalidArgumentException('Filter value for unreferenced dependencies must be a boolean'); } - return $query->filterForUnreferencedDependencies($filter->getFilterValue()); + if ($filter->getFilterValue()) { + $query = $query->filterNoDependencies(); + } + + return $query; } } diff --git a/src/DataIndex/Query/AssetQuery.php b/src/DataIndex/Query/AssetQuery.php index ddf66f32a..6c1c03fcf 100644 --- a/src/DataIndex/Query/AssetQuery.php +++ b/src/DataIndex/Query/AssetQuery.php @@ -21,6 +21,7 @@ use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Asset\AssetMetaDataFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\ExcludeFoldersFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdsFilter; +use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Dependency\NoDependenciesFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\DateFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Tree\ParentIdFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Tree\PathFilter; @@ -150,19 +151,17 @@ public function filterDatetime( /** * @param array $tags */ - public function filterTags(array $tags, bool $considerChildTags): QueryInterface + public function filterTags(array $tags, bool $considerChildTags): self { $this->search->addModifier(new TagFilter($tags, $considerChildTags)); return $this; } - public function filterRequiredBy(int $id): QueryInterface + public function filterNoDependencies(): self { - //$this->search->addModifier(new ($tags, $considerChildTags) + $this->search->addModifier(new NoDependenciesFilter()); return $this; } - - } diff --git a/src/DataIndex/Query/DataObjectQuery.php b/src/DataIndex/Query/DataObjectQuery.php index 877c8e3cc..42d305848 100644 --- a/src/DataIndex/Query/DataObjectQuery.php +++ b/src/DataIndex/Query/DataObjectQuery.php @@ -21,6 +21,7 @@ use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\DataObject\DataObjectSearch; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\ExcludeFoldersFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdsFilter; +use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Dependency\NoDependenciesFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Tree\ParentIdFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Tree\PathFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Tree\TagFilter; @@ -129,10 +130,17 @@ public function orderByIndex(): self /** * @param array $tags */ - public function filterTags(array $tags, bool $considerChildTags): QueryInterface + public function filterTags(array $tags, bool $considerChildTags): self { $this->search->addModifier(new TagFilter($tags, $considerChildTags)); return $this; } + + public function filterNoDependencies(): self + { + $this->search->addModifier(new NoDependenciesFilter()); + + return $this; + } } diff --git a/src/DataIndex/Query/QueryInterface.php b/src/DataIndex/Query/QueryInterface.php index 2d0fa8b18..2480c5938 100644 --- a/src/DataIndex/Query/QueryInterface.php +++ b/src/DataIndex/Query/QueryInterface.php @@ -43,5 +43,5 @@ public function searchByIds(array $ids): self; */ public function filterTags(array $tags, bool $considerChildTags): self; - //public function filterRequiredBy(int $id): self; + public function filterNoDependencies(): self; } From 54c34c0fd3c4a31a9ced37fb7714025d1af0c1dc Mon Sep 17 00:00:00 2001 From: martineiber Date: Wed, 18 Sep 2024 08:25:36 +0000 Subject: [PATCH 3/3] Apply php-cs-fixer changes --- src/DataIndex/Filter/NoDependenciesFilter.php | 2 +- src/DataIndex/Query/AssetQuery.php | 2 +- src/Grid/Column/ColumnType.php | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/DataIndex/Filter/NoDependenciesFilter.php b/src/DataIndex/Filter/NoDependenciesFilter.php index ed9f7dce4..1c4316f21 100644 --- a/src/DataIndex/Filter/NoDependenciesFilter.php +++ b/src/DataIndex/Filter/NoDependenciesFilter.php @@ -20,7 +20,7 @@ use Pimcore\Bundle\StudioBackendBundle\Exception\Api\InvalidArgumentException; use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ColumnType; use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\ColumnFiltersParameterInterface; -use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\TagFilterParameterInterface; +use function is_bool; /** * @internal diff --git a/src/DataIndex/Query/AssetQuery.php b/src/DataIndex/Query/AssetQuery.php index 6c1c03fcf..754f91393 100644 --- a/src/DataIndex/Query/AssetQuery.php +++ b/src/DataIndex/Query/AssetQuery.php @@ -160,7 +160,7 @@ public function filterTags(array $tags, bool $considerChildTags): self public function filterNoDependencies(): self { - $this->search->addModifier(new NoDependenciesFilter()); + $this->search->addModifier(new NoDependenciesFilter()); return $this; } diff --git a/src/Grid/Column/ColumnType.php b/src/Grid/Column/ColumnType.php index 678cd4a43..411fde959 100644 --- a/src/Grid/Column/ColumnType.php +++ b/src/Grid/Column/ColumnType.php @@ -26,7 +26,6 @@ enum ColumnType: string case SYSTEM_INTEGER = 'system.integer'; case SYSTEM_DATETIME = 'system.datetime'; case SYSTEM_TAG = 'system.tag'; - case SYSTEM_UNREFERENCED_DEPENDENCIES = 'system.unreferencedDependencies'; case METADATA_SELECT = 'metadata.select'; case METADATA_INPUT = 'metadata.input';