Skip to content

Commit a4480bf

Browse files
authored
[Asset]: Add a filter to show only Unreferenced Assets. (#1860)
1 parent 94630f5 commit a4480bf

7 files changed

Lines changed: 79 additions & 2 deletions

File tree

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
"league/csv": "^9.27",
2222
"nesbot/carbon": "^3.8.4",
2323
"pimcore/static-resolver-bundle": "^3.6.1 ",
24-
"pimcore/generic-data-index-bundle": "^2.5.0",
25-
"pimcore/pimcore": "^12.3",
24+
"pimcore/generic-data-index-bundle": "^2.5.3",
25+
"pimcore/pimcore": "^12.3.9",
2626
"zircote/swagger-php": "^4.8 || ^5.0",
2727
"ext-zip": "*",
2828
"symfony/mercure": "^0.6.5",

config/data_index_filters.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,7 @@ services:
131131

132132
Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\DataObject\CRM\ConsentFilter:
133133
tags: [ 'pimcore.studio_backend.search_index.data_object.filter' ]
134+
135+
# Asset
136+
Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset\UnreferencedFilter:
137+
tags: [ 'pimcore.studio_backend.search_index.asset.filter' ]

doc/01_Architecture_Overview/01_Grid.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ Available filters are:
135135
| classificationstore.number | object | `from`, `to`, `is`, `setting` | true |
136136
| crm.consent | array | `true` or `false` | true |
137137
| dataobject.relation | array | array of `type`, `ids` objects | true |
138+
| system.unreferenced | boolean | Asset grid only — unreferenced assets | false |
138139

139140

140141
### Examples:
@@ -242,6 +243,18 @@ To filter by this structure:
242243
...
243244
```
244245

246+
Filter unreferenced assets (asset grid only):
247+
```json
248+
...
249+
"columnFilters" [
250+
{
251+
"type": "system.unreferenced",
252+
"filterValue": true
253+
}
254+
]
255+
...
256+
```
257+
245258
## Advanced Columns
246259

247260
Advanced columns combine multiple data sources and transformers. Data source types:
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
/**
5+
* This source file is available under the terms of the
6+
* Pimcore Open Core License (POCL)
7+
* Full copyright and license information is available in
8+
* LICENSE.md which is distributed with this source code.
9+
*
10+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
11+
* @license Pimcore Open Core License (POCL)
12+
*/
13+
14+
namespace Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\Asset;
15+
16+
use Pimcore\Bundle\StudioBackendBundle\DataIndex\Filter\FilterInterface;
17+
use Pimcore\Bundle\StudioBackendBundle\DataIndex\Query\AssetQueryInterface;
18+
use Pimcore\Bundle\StudioBackendBundle\DataIndex\Query\QueryInterface;
19+
use Pimcore\Bundle\StudioBackendBundle\Grid\Column\ColumnType;
20+
use Pimcore\Bundle\StudioBackendBundle\MappedParameter\Filter\SimpleColumnFiltersParameterInterface;
21+
22+
/**
23+
* @internal
24+
*/
25+
final class UnreferencedFilter implements FilterInterface
26+
{
27+
public function apply(mixed $parameters, QueryInterface $query): QueryInterface
28+
{
29+
if (!$parameters instanceof SimpleColumnFiltersParameterInterface) {
30+
return $query;
31+
}
32+
33+
if (!$query instanceof AssetQueryInterface) {
34+
return $query;
35+
}
36+
37+
$filter = $parameters->getSimpleColumnFilterByType(ColumnType::SYSTEM_UNREFERENCED->value);
38+
39+
if ($filter === null) {
40+
return $query;
41+
}
42+
43+
if ($filter->getFilterValue() === true) {
44+
$query->filterUnreferenced();
45+
}
46+
47+
return $query;
48+
}
49+
}

src/DataIndex/Query/AssetQuery.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdsFilter;
2323
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IntegerFilter;
2424
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\NumberFilter;
25+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Dependency\UnreferencedFilter;
2526
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\BooleanMultiSelectFilter;
2627
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\DateFilter;
2728
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\MultiSelectFilter;
@@ -128,6 +129,13 @@ public function filterMetadata(string $name, string $type, mixed $data): self
128129
return $this;
129130
}
130131

132+
public function filterUnreferenced(): self
133+
{
134+
$this->search->addModifier(new UnreferencedFilter());
135+
136+
return $this;
137+
}
138+
131139
public function orderByField(string $fieldName, SortDirection $direction): self
132140
{
133141
$this->search->addModifier(new OrderByField($fieldName, $direction));

src/DataIndex/Query/AssetQueryInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@ interface AssetQueryInterface extends QueryInterface
2222
{
2323
public function filterMetadata(string $name, string $type, mixed $data): self;
2424

25+
public function filterUnreferenced(): self;
26+
2527
public function getSearch(): AssetSearchInterface;
2628
}

src/Grid/Column/ColumnType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ enum ColumnType: string
2323
case SYSTEM_TIME = 'system.time';
2424
case SYSTEM_DATE = 'system.date';
2525
case SYSTEM_BOOLEAN = 'system.boolean';
26+
case SYSTEM_UNREFERENCED = 'system.unreferenced';
2627
case SYSTEM_TAG = 'system.tag';
2728
case SYSTEM_PQL_QUERY = 'system.pql';
2829
case SYSTEM_NUMBER = 'system.number';

0 commit comments

Comments
 (0)