Skip to content

Commit 97b104c

Browse files
authored
Merge pull request #21 from RRZE-Webteam/FAU-446
[FAU-446] Support for Multi-Word Free Text Search
2 parents 46e5105 + 4f02dfc commit 97b104c

File tree

2 files changed

+20
-27
lines changed

2 files changed

+20
-27
lines changed

psalm-baseline.xml

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
</file>
3939
<file src="src/Infrastructure/Repository/WpQueryArgsBuilder.php">
4040
<RiskyTruthyFalsyComparison>
41-
<code><![CDATA[!$languageCode]]></code>
4241
<code><![CDATA[!$orderBy]]></code>
4342
<code><![CDATA[!$taxonomy]]></code>
4443
<code><![CDATA[$languageCode]]></code>

src/Infrastructure/Repository/WpQueryArgsBuilder.php

+20-26
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,12 @@
1717
use Fau\DegreeProgram\Common\Application\Filter\SubjectGroupFilter;
1818
use Fau\DegreeProgram\Common\Application\Filter\TeachingLanguageFilter;
1919
use Fau\DegreeProgram\Common\Application\Repository\CollectionCriteria;
20-
use Fau\DegreeProgram\Common\Domain\CampoKeys;
2120
use Fau\DegreeProgram\Common\Domain\DegreeProgram;
2221
use Fau\DegreeProgram\Common\Domain\MultilingualString;
2322
use Fau\DegreeProgram\Common\Infrastructure\Content\PostType\DegreeProgramPostType;
2423
use Fau\DegreeProgram\Common\Infrastructure\Content\Taxonomy\BachelorOrTeachingDegreeAdmissionRequirementTaxonomy;
2524
use Fau\DegreeProgram\Common\Infrastructure\Content\Taxonomy\MasterDegreeAdmissionRequirementTaxonomy;
2625
use Fau\DegreeProgram\Common\Infrastructure\Content\Taxonomy\TaxonomiesList;
27-
use Fau\DegreeProgram\Common\Infrastructure\Content\Taxonomy\TeachingDegreeHigherSemesterAdmissionRequirementTaxonomy;
28-
use RuntimeException;
2926
use WP_Term;
3027

3128
/**
@@ -270,31 +267,28 @@ private function applyTaxonomyFilter(Filter $filter, WpQueryArgs $queryArgs): Wp
270267

271268
private function applySearchFilter(SearchKeywordFilter $filter, WpQueryArgs $queryArgs, ?string $languageCode = null): WpQueryArgs
272269
{
273-
if (!$languageCode) {
274-
return $queryArgs->withMetaQueryItem(
275-
[
276-
'relation' => 'OR',
277-
[
278-
'key' => 'fau_degree_program_searchable_content_' . MultilingualString::EN,
279-
'value' => $filter->value(),
280-
'compare' => 'LIKE',
281-
],
282-
[
283-
'key' => 'fau_degree_program_searchable_content_' . MultilingualString::DE,
284-
'value' => $filter->value(),
285-
'compare' => 'LIKE',
286-
],
287-
]
270+
$keywords = array_filter(array_map('trim', explode(' ', $filter->value())));
271+
$metaKeyPrefix = 'fau_degree_program_searchable_content_';
272+
$metaKeys = is_string($languageCode) && $languageCode
273+
? [$metaKeyPrefix . $languageCode]
274+
: [$metaKeyPrefix . MultilingualString::EN, $metaKeyPrefix . MultilingualString::DE];
275+
276+
$metaQuery = array_reduce($keywords, static function (array $metaQuery, string $keyword) use ($metaKeys): array {
277+
$keywordConditions = array_map(
278+
static fn($key) => [
279+
'key' => $key,
280+
'value' => $keyword,
281+
'compare' => 'LIKE',
282+
],
283+
$metaKeys
288284
);
289-
}
290285

291-
return $queryArgs->withMetaQueryItem(
292-
[
293-
'key' => 'fau_degree_program_searchable_content_' . $languageCode,
294-
'value' => $filter->value(),
295-
'compare' => 'LIKE',
296-
]
297-
);
286+
$metaQuery[] = ['relation' => 'OR'] + $keywordConditions;
287+
288+
return $metaQuery;
289+
}, ['relation' => 'AND']);
290+
291+
return $queryArgs->withMetaQueryItem($metaQuery);
298292
}
299293

300294
private function currentTerm(CollectionCriteria $criteria): ?WP_Term

0 commit comments

Comments
 (0)