Skip to content

Commit 8d89a75

Browse files
committed
Merge branch '1.x' into 2.x
2 parents ba6d8d5 + dfbfa25 commit 8d89a75

File tree

4 files changed

+94
-3
lines changed

4 files changed

+94
-3
lines changed

doc/04_Searching_For_Data_In_Index/05_Search_Modifiers/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@ $search->addModifier(new ParentIdFilter(1))
1616
|--------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
1717
| [IdFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Basic/IdFilter.php) | Basic filters | Filter by element ID |
1818
| [IdsFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Basic/IdsFilter.php) | Basic filters | Filter by multiple element IDs |
19+
| [IntegerFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Basic/IntegerFilter.php) | Basic filters | Filter integer fields based on the value with [PQL field name resolution support](#pql-field-name-resolution) |
1920
| [ExcludeFoldersFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Basic/ExcludeFoldersFilter.php) | Basic filters | Exclude folders from search result |
2021
| [ParentIdsFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Tree/ParentIdsFilter.php) | Tree related filters | Filter by parent ID |
2122
| [PathFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Tree/PathFilter.php) | Tree related filters | Filter by path (depending on use case for all levels or direct children only and with or without the parent item included) |
2223
| [TagFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Tree/TagFilter.php) | Tree related filters | Filter by tag IDs (it is also possible to include child tags) |
2324
| [AssetMetaDataFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Asset/AssetMetaDataFilter.php) | Asset filters | Filter by asset meta data attribute. The format of the `$data` which needs to be passed depends on the type of the meta data attribute and is handled by its [field definition adapter](https://github.com/pimcore/generic-data-index-bundle/tree/1.x/src/SearchIndexAdapter/OpenSearch/Asset/FieldDefinitionAdapter). |
2425
| [WorkspaceQuery](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Workspaces/WorkspaceQuery.php) | Workspace related filters | Filter based on the user workspaces and permissions for a defined element type (this query is added to the asset/document/data object search by default) |
2526
| [ElementWorkspacesQuery](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/Workspaces/WorkspaceQuery.php) | Workspace related filters | Filter based on the user workspaces and permissions respecting all element types (this query is added to the element search by default) |
26-
| [MultiSelectFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/FieldType/MultiSelectFilter.php) | Field type filters | Filter text fields by a list of exact strings. Supports [PQL field name resolution](#pql-field-name-resolution). |
27-
| [DateFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/FieldType/DateFilter.php) | Field type filters | Filter date fields based on an exact date or a range of dates. Supports [PQL field name resolution](#pql-field-name-resolution). |
27+
| [MultiSelectFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/FieldType/MultiSelectFilter.php) | Field type filters | Filter text fields by a list of exact strings. Supports [PQL field name resolution](#pql-field-name-resolution). |
28+
| [DateFilter](https://github.com/pimcore/generic-data-index-bundle/blob/1.x/src/Model/Search/Modifier/Filter/FieldType/DateFilter.php) | Field type filters | Filter date fields based on an exact date or a range of dates. Supports [PQL field name resolution](#pql-field-name-resolution). |
2829

2930

3031

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
/**
5+
* Pimcore
6+
*
7+
* This source file is available under two different licenses:
8+
* - GNU General Public License version 3 (GPLv3)
9+
* - Pimcore Commercial License (PCL)
10+
* Full copyright and license information is available in
11+
* LICENSE.md which is distributed with this source code.
12+
*
13+
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
14+
* @license http://www.pimcore.org/license GPLv3 and PCL
15+
*/
16+
17+
namespace Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic;
18+
19+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\SearchModifierInterface;
20+
21+
final readonly class IntegerFilter implements SearchModifierInterface
22+
{
23+
public function __construct(
24+
private string $fieldName,
25+
private int $searchTerm,
26+
private bool $enablePqlFieldNameResolution = true,
27+
) {
28+
}
29+
30+
public function getFieldName(): string
31+
{
32+
return $this->fieldName;
33+
}
34+
35+
public function getSearchTerm(): int
36+
{
37+
return $this->searchTerm;
38+
}
39+
40+
public function isPqlFieldNameResolutionEnabled(): bool
41+
{
42+
return $this->enablePqlFieldNameResolution;
43+
}
44+
}

src/SearchIndexAdapter/OpenSearch/Search/Modifier/Filter/BasicFilters.php

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,19 @@
2525
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\ExcludeFoldersFilter;
2626
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdFilter;
2727
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdsFilter;
28+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IntegerFilter;
29+
use Pimcore\Bundle\GenericDataIndexBundle\Service\Search\SearchService\SearchPqlFieldNameTransformationServiceInterface;
2830

2931
/**
3032
* @internal
3133
*/
32-
final class BasicFilters
34+
final readonly class BasicFilters
3335
{
36+
public function __construct(
37+
private SearchPqlFieldNameTransformationServiceInterface $fieldNameTransformationService,
38+
) {
39+
}
40+
3441
#[AsSearchModifierHandler]
3542
public function handleIdFilter(IdFilter $idFilter, SearchModifierContextInterface $context): void
3643
{
@@ -42,6 +49,25 @@ public function handleIdFilter(IdFilter $idFilter, SearchModifierContextInterfac
4249
);
4350
}
4451

52+
#[AsSearchModifierHandler]
53+
public function handleIntegerFilter(IntegerFilter $idFilter, SearchModifierContextInterface $context): void
54+
{
55+
$fieldName = $idFilter->getFieldName();
56+
if ($idFilter->isPqlFieldNameResolutionEnabled()) {
57+
$fieldName = $this->fieldNameTransformationService->transformFieldnameForSearch(
58+
$context->getOriginalSearch(),
59+
$fieldName
60+
);
61+
}
62+
63+
$context->getSearch()->addQuery(
64+
new TermFilter(
65+
field: $fieldName,
66+
term: $idFilter->getSearchTerm(),
67+
)
68+
);
69+
}
70+
4571
#[AsSearchModifierHandler]
4672
public function handleIdsFilter(IdsFilter $idsFilter, SearchModifierContextInterface $context): void
4773
{

tests/Functional/Search/Modifier/Filter/BasicFiltersTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\ExcludeFoldersFilter;
1919
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdFilter;
2020
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdsFilter;
21+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IntegerFilter;
2122
use Pimcore\Bundle\GenericDataIndexBundle\Service\Search\SearchService\Asset\AssetSearchServiceInterface;
2223
use Pimcore\Bundle\GenericDataIndexBundle\Service\Search\SearchService\SearchProviderInterface;
2324
use Pimcore\Tests\Support\Util\TestHelper;
@@ -127,4 +128,23 @@ public function testIdsFilter()
127128
$searchResult = $searchService->search($assetSearch);
128129
$this->assertCount(0, $searchResult->getItems());
129130
}
131+
132+
public function testIntegerFilter()
133+
{
134+
$asset = TestHelper::createImageAsset();
135+
136+
/** @var AssetSearchServiceInterface $searchService */
137+
$searchService = $this->tester->grabService('generic-data-index.test.service.asset-search-service');
138+
/** @var SearchProviderInterface $searchProvider */
139+
$searchProvider = $this->tester->grabService(SearchProviderInterface::class);
140+
141+
$assetSearch = $searchProvider
142+
->createAssetSearch()
143+
->addModifier(new IntegerFilter('system_fields.userOwner', $asset->getUserOwner()))
144+
->addModifier(new IntegerFilter('system_fields.userModification', $asset->getUserModification()))
145+
;
146+
$searchResult = $searchService->search($assetSearch);
147+
$this->assertCount(1, $searchResult->getItems());
148+
$this->assertEquals($asset->getId(), $searchResult->getItems()[0]->getId());
149+
}
130150
}

0 commit comments

Comments
 (0)