diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 17e1acdf54..b970075b85 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -182,10 +182,19 @@ jobs:
- name: Convert code_samples usages for comment
if: steps.list.outputs.CODE_SAMPLES_CHANGE != '' && steps.diff.outputs.CODE_SAMPLES_DIFF != '0'
run: |
- echo '# code_samples/ change report' >> code_samples_usage.diff.md
+ title='# code_samples/ change report'
+ link='Download colorized diff'
+ echo "$title" > code_samples_usage.diff.md
echo '' >> code_samples_usage.diff.md
php tools/code_samples/code_samples_usage_diff2html.php $HOME/code_samples_usage.diff >> code_samples_usage.diff.md
- echo 'Download colorized diff' >> code_samples_usage.diff.md
+ echo "$link" >> code_samples_usage.diff.md
+ if [[ `wc -m < code_samples_usage.diff.md | xargs` -ge $((2**16)) ]]; then
+ echo "$title" > code_samples_usage.diff.md
+ echo '' >> code_samples_usage.diff.md
+ echo "Report's diff is too long to be displayed in a comment." >> code_samples_usage.diff.md
+ echo '' >> code_samples_usage.diff.md
+ echo "$link" >> code_samples_usage.diff.md
+ fi
- name: Find Comment
id: find-comment
uses: peter-evans/find-comment@v3
diff --git a/code_samples/search/custom/config/aggregation_services.yaml b/code_samples/search/custom/config/aggregation_services.yaml
new file mode 100644
index 0000000000..ebfa0074f1
--- /dev/null
+++ b/code_samples/search/custom/config/aggregation_services.yaml
@@ -0,0 +1,49 @@
+services:
+ app.search.solr.query.aggregation_visitor.priority_range_aggregation:
+ class: Ibexa\Solr\Query\Common\AggregationVisitor\RangeAggregationVisitor
+ factory: [ '@Ibexa\Solr\Query\Common\AggregationVisitor\Factory\SearchFieldAggregationVisitorFactory', 'createRangeAggregationVisitor' ]
+ arguments:
+ $aggregationClass: 'App\Query\Aggregation\Solr\PriorityRangeAggregation'
+ $searchIndexFieldName: 'priority_i'
+ tags:
+ - { name: ibexa.search.solr.query.location.aggregation.visitor }
+
+ app.search.elasticsearch.query.aggregation_visitor.priority_range_aggregation:
+ class: Ibexa\Elasticsearch\Query\AggregationVisitor\RangeAggregationVisitor
+ factory: [ '@Ibexa\Elasticsearch\Query\AggregationVisitor\Factory\SearchFieldAggregationVisitorFactory', 'createRangeAggregationVisitor' ]
+ arguments:
+ $aggregationClass: 'App\Query\Aggregation\Elasticsearch\PriorityRangeAggregation'
+ $searchIndexFieldName: 'priority_i'
+ tags:
+ - { name: ibexa.search.elasticsearch.query.location.aggregation.visitor }
+
+ app.search.solr.query.aggregation_result_extractor.priority_range_aggregation:
+ class: Ibexa\Solr\ResultExtractor\AggregationResultExtractor\RangeAggregationResultExtractor
+ arguments:
+ $aggregationClass: 'App\Query\Aggregation\Solr\PriorityRangeAggregation'
+ $keyMapper: 'Ibexa\Solr\ResultExtractor\AggregationResultExtractor\RangeAggregationKeyMapper\IntRangeAggregationKeyMapper'
+ tags:
+ - { name: ibexa.search.solr.query.location.aggregation.result.extractor }
+
+ app.search.elasticsearch.query.aggregation_result_extractor.priority_range_aggregation:
+ class: Ibexa\Elasticsearch\Query\ResultExtractor\AggregationResultExtractor\RangeAggregationResultExtractor
+ arguments:
+ $aggregationClass: 'App\Query\Aggregation\Elasticsearch\PriorityRangeAggregation'
+ tags:
+ - { name: ibexa.search.elasticsearch.query.location.aggregation.result.extractor }
+
+ App\Query\Aggregation\Solr\PriorityRangeAggregationVisitor:
+ tags:
+ - { name: ibexa.search.solr.query.location.aggregation.visitor }
+
+ App\Query\Aggregation\Solr\PriorityRangeAggregationResultExtractor:
+ tags:
+ - { name: ibexa.search.solr.query.location.aggregation.result.extractor }
+
+ App\Query\Aggregation\Elasticsearch\PriorityRangeAggregationVisitor:
+ tags:
+ - { name: ibexa.search.elasticsearch.query.location.aggregation.visitor }
+
+ App\Query\Aggregation\Elasticsearch\PriorityRangeAggregationResultExtractor:
+ tags:
+ - { name: ibexa.search.elasticsearch.query.location.aggregation.result.extractor }
diff --git a/code_samples/search/elasticsearch/config/criterion_services.yaml b/code_samples/search/custom/config/criterion_services.yaml
similarity index 53%
rename from code_samples/search/elasticsearch/config/criterion_services.yaml
rename to code_samples/search/custom/config/criterion_services.yaml
index 7c27ead21e..5619798150 100644
--- a/code_samples/search/elasticsearch/config/criterion_services.yaml
+++ b/code_samples/search/custom/config/criterion_services.yaml
@@ -1,4 +1,9 @@
services:
+ App\Query\Criterion\Solr\CameraManufacturerVisitor:
+ tags:
+ - { name: ibexa.search.solr.query.content.criterion.visitor }
+ - { name: ibexa.search.solr.query.location.criterion.visitor }
+
App\Query\Criterion\Elasticsearch\CameraManufacturerVisitor:
tags:
- { name: ibexa.search.elasticsearch.query.content.criterion.visitor }
diff --git a/code_samples/search/solr/config/field_mapper_services.yaml b/code_samples/search/custom/config/field_mapper_services.yaml
similarity index 100%
rename from code_samples/search/solr/config/field_mapper_services.yaml
rename to code_samples/search/custom/config/field_mapper_services.yaml
diff --git a/code_samples/search/elasticsearch/config/group_resolver_services.yaml b/code_samples/search/custom/config/group_resolver_services.yaml
similarity index 100%
rename from code_samples/search/elasticsearch/config/group_resolver_services.yaml
rename to code_samples/search/custom/config/group_resolver_services.yaml
diff --git a/code_samples/search/elasticsearch/config/packages/elasticsearch-en.yaml b/code_samples/search/custom/config/packages/elasticsearch-en.yaml
similarity index 100%
rename from code_samples/search/elasticsearch/config/packages/elasticsearch-en.yaml
rename to code_samples/search/custom/config/packages/elasticsearch-en.yaml
diff --git a/code_samples/search/elasticsearch/config/packages/elasticsearch.yaml b/code_samples/search/custom/config/packages/elasticsearch.yaml
similarity index 100%
rename from code_samples/search/elasticsearch/config/packages/elasticsearch.yaml
rename to code_samples/search/custom/config/packages/elasticsearch.yaml
diff --git a/code_samples/search/elasticsearch/config/sort_clause_services.yaml b/code_samples/search/custom/config/sort_clause_services.yaml
similarity index 53%
rename from code_samples/search/elasticsearch/config/sort_clause_services.yaml
rename to code_samples/search/custom/config/sort_clause_services.yaml
index 7abda53e29..835bb47150 100644
--- a/code_samples/search/elasticsearch/config/sort_clause_services.yaml
+++ b/code_samples/search/custom/config/sort_clause_services.yaml
@@ -1,4 +1,9 @@
services:
+ App\Query\SortClause\Solr\ScoreVisitor:
+ tags:
+ - { name: ibexa.search.solr.query.content.sort_clause.visitor }
+ - { name: ibexa.search.solr.query.location.sort_clause.visitor }
+
App\Query\SortClause\Elasticsearch\ScoreVisitor:
tags:
- { name: ibexa.search.elasticsearch.query.content.sort_clause.visitor }
diff --git a/code_samples/search/custom/src/EventSubscriber/CustomIndexDataSubscriber.php b/code_samples/search/custom/src/EventSubscriber/CustomIndexDataSubscriber.php
new file mode 100644
index 0000000000..02d216cdf0
--- /dev/null
+++ b/code_samples/search/custom/src/EventSubscriber/CustomIndexDataSubscriber.php
@@ -0,0 +1,42 @@
+getDocument();
+ $document->fields[] = new Field(
+ 'custom_field',
+ 'Custom field value',
+ new StringField()
+ );
+ }
+
+ public function onLocationDocumentCreate(LocationIndexCreateEvent $event): void
+ {
+ $document = $event->getDocument();
+ $document->fields[] = new Field(
+ 'custom_field',
+ 'Custom field value',
+ new StringField()
+ );
+ }
+
+ public static function getSubscribedEvents(): array
+ {
+ return [
+ ContentIndexCreateEvent::class => 'onContentDocumentCreate',
+ LocationIndexCreateEvent::class => 'onLocationDocumentCreate',
+ ];
+ }
+}
diff --git a/code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php b/code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php
new file mode 100644
index 0000000000..fbe91a3be3
--- /dev/null
+++ b/code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php
@@ -0,0 +1,37 @@
+getQuery();
+
+ $additionalCriteria = new ObjectStateIdentifier('locked');
+
+ if ($query->filter !== null) {
+ $query->filter = $additionalCriteria;
+ } else {
+ // Append Criterion to existing filter
+ $query->filter = new LogicalAnd([
+ $query->filter,
+ $additionalCriteria,
+ ]);
+ }
+ }
+
+ public static function getSubscribedEvents(): array
+ {
+ return [
+ QueryFilterEvent::class => 'onQueryFilter',
+ ];
+ }
+}
diff --git a/code_samples/search/elasticsearch/src/GroupResolver/ContentTypeGroupGroupResolver.php b/code_samples/search/custom/src/GroupResolver/ContentTypeGroupGroupResolver.php
similarity index 100%
rename from code_samples/search/elasticsearch/src/GroupResolver/ContentTypeGroupGroupResolver.php
rename to code_samples/search/custom/src/GroupResolver/ContentTypeGroupGroupResolver.php
diff --git a/code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityAggregationResultExtractor.php b/code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationResultExtractor.php
similarity index 88%
rename from code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityAggregationResultExtractor.php
rename to code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationResultExtractor.php
index 05ac000d36..ab64e1be3f 100644
--- a/code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityAggregationResultExtractor.php
+++ b/code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationResultExtractor.php
@@ -4,12 +4,13 @@
namespace App\Query\Aggregation\Elasticsearch;
+use App\Query\Aggregation\PriorityRangeAggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Search\AggregationResult;
use Ibexa\Contracts\Elasticsearch\Query\AggregationResultExtractor;
use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
-final class PriorityAggregationResultExtractor implements AggregationResultExtractor
+final class PriorityRangeAggregationResultExtractor implements AggregationResultExtractor
{
public function supports(Aggregation $aggregation, LanguageFilter $languageFilter): bool
{
diff --git a/code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityAggregationVisitor.php b/code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationVisitor.php
similarity index 87%
rename from code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityAggregationVisitor.php
rename to code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationVisitor.php
index 10e4da76aa..36c5b2b800 100644
--- a/code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityAggregationVisitor.php
+++ b/code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationVisitor.php
@@ -4,11 +4,12 @@
namespace App\Query\Aggregation\Elasticsearch;
+use App\Query\Aggregation\PriorityRangeAggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation;
use Ibexa\Contracts\Elasticsearch\Query\AggregationVisitor;
use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
-final class PriorityAggregationVisitor implements AggregationVisitor
+final class PriorityRangeAggregationVisitor implements AggregationVisitor
{
public function supports(Aggregation $aggregation, LanguageFilter $languageFilter): bool
{
@@ -16,7 +17,7 @@ public function supports(Aggregation $aggregation, LanguageFilter $languageFilte
}
/**
- * @param PriorityRangeAggregation $aggregation
+ * @param \App\Query\Aggregation\PriorityRangeAggregation $aggregation
*/
public function visit(AggregationVisitor $dispatcher, Aggregation $aggregation, LanguageFilter $languageFilter): array
{
diff --git a/code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregation.php b/code_samples/search/custom/src/Query/Aggregation/PriorityRangeAggregation.php
similarity index 89%
rename from code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregation.php
rename to code_samples/search/custom/src/Query/Aggregation/PriorityRangeAggregation.php
index 78aff43266..8f65e1794b 100644
--- a/code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregation.php
+++ b/code_samples/search/custom/src/Query/Aggregation/PriorityRangeAggregation.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace App\Query\Aggregation\Solr;
+namespace App\Query\Aggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation\AbstractRangeAggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation\LocationAggregation;
diff --git a/code_samples/search/solr/src/Query/Aggregation/Solr/PriorityAggregationResultExtractor.php b/code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationResultExtractor.php
similarity index 90%
rename from code_samples/search/solr/src/Query/Aggregation/Solr/PriorityAggregationResultExtractor.php
rename to code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationResultExtractor.php
index 10567f6829..ba87eda5cf 100644
--- a/code_samples/search/solr/src/Query/Aggregation/Solr/PriorityAggregationResultExtractor.php
+++ b/code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationResultExtractor.php
@@ -4,6 +4,7 @@
namespace App\Query\Aggregation\Solr;
+use App\Query\Aggregation\PriorityRangeAggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation\Range;
use Ibexa\Contracts\Core\Repository\Values\Content\Search\AggregationResult;
@@ -12,7 +13,7 @@
use Ibexa\Contracts\Solr\ResultExtractor\AggregationResultExtractor;
use stdClass;
-final class PriorityAggregationResultExtractor implements AggregationResultExtractor
+final class PriorityRangeAggregationResultExtractor implements AggregationResultExtractor
{
public function canVisit(Aggregation $aggregation, array $languageFilter): bool
{
diff --git a/code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php b/code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
similarity index 96%
rename from code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
rename to code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
index 06e77f63ea..d78f1a58f6 100644
--- a/code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
+++ b/code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
@@ -4,6 +4,7 @@
namespace App\Query\Aggregation\Solr;
+use App\Query\Aggregation\PriorityRangeAggregation;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation;
use Ibexa\Contracts\Solr\Query\AggregationVisitor;
diff --git a/code_samples/search/solr/src/Query/Criterion/Solr/CameraManufacturerCriterion.php b/code_samples/search/custom/src/Query/Criterion/CameraManufacturerCriterion.php
similarity index 96%
rename from code_samples/search/solr/src/Query/Criterion/Solr/CameraManufacturerCriterion.php
rename to code_samples/search/custom/src/Query/Criterion/CameraManufacturerCriterion.php
index e881c45df4..91f3456369 100644
--- a/code_samples/search/solr/src/Query/Criterion/Solr/CameraManufacturerCriterion.php
+++ b/code_samples/search/custom/src/Query/Criterion/CameraManufacturerCriterion.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace App\Query\Criterion\Solr;
+namespace App\Query\Criterion;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Operator;
diff --git a/code_samples/search/elasticsearch/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php b/code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
similarity index 86%
rename from code_samples/search/elasticsearch/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
rename to code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
index ea9070b40d..142990bbd7 100644
--- a/code_samples/search/elasticsearch/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
+++ b/code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
@@ -4,6 +4,7 @@
namespace App\Query\Criterion\Elasticsearch;
+use App\Query\Criterion\CameraManufacturerCriterion;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\CriterionInterface;
use Ibexa\Contracts\Elasticsearch\Query\CriterionVisitor;
use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
@@ -16,7 +17,7 @@ public function supports(CriterionInterface $criterion, LanguageFilter $language
}
/**
- * @param \App\Query\Criterion\Elasticsearch\CameraManufacturerCriterion $criterion
+ * @param \App\Query\Criterion\CameraManufacturerCriterion $criterion
*/
public function visit(CriterionVisitor $dispatcher, CriterionInterface $criterion, LanguageFilter $languageFilter): array
{
diff --git a/code_samples/search/solr/src/Query/Criterion/Solr/CameraManufacturerVisitor.php b/code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
similarity index 86%
rename from code_samples/search/solr/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
rename to code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
index c45f1a16bf..f385d5db1d 100644
--- a/code_samples/search/solr/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
+++ b/code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
@@ -4,6 +4,7 @@
namespace App\Query\Criterion\Solr;
+use App\Query\Criterion\CameraManufacturerCriterion;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\CriterionInterface;
use Ibexa\Contracts\Solr\Query\CriterionVisitor;
@@ -15,7 +16,7 @@ public function canVisit(CriterionInterface $criterion)
}
/**
- * @param \App\Query\Criterion\Solr\CameraManufacturerCriterion $criterion
+ * @param \App\Query\Criterion\CameraManufacturerCriterion $criterion
*/
public function visit(CriterionInterface $criterion, CriterionVisitor $subVisitor = null)
{
diff --git a/code_samples/search/elasticsearch/src/Query/SortClause/Elasticsearch/ScoreVisitor.php b/code_samples/search/custom/src/Query/SortClause/Elasticsearch/ScoreVisitor.php
similarity index 95%
rename from code_samples/search/elasticsearch/src/Query/SortClause/Elasticsearch/ScoreVisitor.php
rename to code_samples/search/custom/src/Query/SortClause/Elasticsearch/ScoreVisitor.php
index abc2e906e2..45a35b808c 100644
--- a/code_samples/search/elasticsearch/src/Query/SortClause/Elasticsearch/ScoreVisitor.php
+++ b/code_samples/search/custom/src/Query/SortClause/Elasticsearch/ScoreVisitor.php
@@ -4,6 +4,7 @@
namespace App\Query\SortClause\Elasticsearch;
+use App\Query\SortClause\ScoreSortClause;
use Ibexa\Contracts\Core\Repository\Values\Content\Query;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\SortClause;
use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
diff --git a/code_samples/search/solr/src/Query/SortClause/Solr/ScoreSortClause.php b/code_samples/search/custom/src/Query/SortClause/ScoreSortClause.php
similarity index 90%
rename from code_samples/search/solr/src/Query/SortClause/Solr/ScoreSortClause.php
rename to code_samples/search/custom/src/Query/SortClause/ScoreSortClause.php
index 0ae2d69f02..8c316c18ef 100644
--- a/code_samples/search/solr/src/Query/SortClause/Solr/ScoreSortClause.php
+++ b/code_samples/search/custom/src/Query/SortClause/ScoreSortClause.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace App\Query\SortClause\Solr;
+namespace App\Query\SortClause;
use Ibexa\Contracts\Core\Repository\Values\Content\Query;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\SortClause;
diff --git a/code_samples/search/solr/src/Query/SortClause/Solr/ScoreVisitor.php b/code_samples/search/custom/src/Query/SortClause/Solr/ScoreVisitor.php
similarity index 82%
rename from code_samples/search/solr/src/Query/SortClause/Solr/ScoreVisitor.php
rename to code_samples/search/custom/src/Query/SortClause/Solr/ScoreVisitor.php
index e38bfd2fc0..0daa03ad69 100644
--- a/code_samples/search/solr/src/Query/SortClause/Solr/ScoreVisitor.php
+++ b/code_samples/search/custom/src/Query/SortClause/Solr/ScoreVisitor.php
@@ -4,6 +4,7 @@
namespace App\Query\SortClause\Solr;
+use App\Query\SortClause\ScoreSortClause;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\SortClause;
use Ibexa\Contracts\Solr\Query\SortClauseVisitor;
@@ -11,7 +12,7 @@ class ScoreVisitor extends SortClauseVisitor
{
public function canVisit(SortClause $sortClause): bool
{
- return $sortClause instanceof SortClause\Score;
+ return $sortClause instanceof ScoreSortClause;
}
public function visit(SortClause $sortClause): string
diff --git a/code_samples/search/solr/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php b/code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php
similarity index 100%
rename from code_samples/search/solr/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php
rename to code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php
diff --git a/code_samples/search/elasticsearch/config/aggregation_services.yaml b/code_samples/search/elasticsearch/config/aggregation_services.yaml
deleted file mode 100644
index c1ff03481a..0000000000
--- a/code_samples/search/elasticsearch/config/aggregation_services.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-services:
- App\Query\Aggregation\Elasticsearch\PriorityAggregationVisitor:
- tags:
- - { name: ibexa.search.elasticsearch.query.location.aggregation.visitor }
- - { name: ibexa.search.elasticsearch.query.content.aggregation.visitor }
-
- App\Query\Aggregation\Elasticsearch\PriorityAggregationResultExtractor:
- tags:
- - { name: ibexa.search.elasticsearch.query.location.aggregation.result.extractor }
- - { name: ibexa.search.elasticsearch.query.content.aggregation.result.extractor }
diff --git a/code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregation.php b/code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregation.php
deleted file mode 100644
index 986b86e09c..0000000000
--- a/code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregation.php
+++ /dev/null
@@ -1,12 +0,0 @@
-___`.
@@ -44,13 +44,13 @@ This resolver must implement `Ibexa\Contracts\Elasticsearch\ElasticSearch\Index\
In this example, create a `ContentTypeGroupGroupResolver` based on the content type Group ID of the document:
``` php
-[[= include_file('code_samples/search/elasticsearch/src/GroupResolver/ContentTypeGroupGroupResolver.php') =]]
+[[= include_file('code_samples/search/custom/src/GroupResolver/ContentTypeGroupGroupResolver.php') =]]
```
Register the resolver as a service:
``` yaml
-[[= include_file('code_samples/search/elasticsearch/config/group_resolver_services.yaml') =]]
+[[= include_file('code_samples/search/custom/config/group_resolver_services.yaml') =]]
```
### Configure indexing strategy
@@ -58,6 +58,5 @@ Register the resolver as a service:
Finally, in configuration indicate that Elasticsearch should use your custom indexing strategy:
``` yaml
-[[= include_file('code_samples/search/elasticsearch/config/packages/elasticsearch.yaml') =]]
+[[= include_file('code_samples/search/custom/config/packages/elasticsearch.yaml') =]]
```
-
diff --git a/docs/search/extensibility/index_custom_elasticsearch_data.md b/docs/search/extensibility/index_custom_elasticsearch_data.md
index 053f4c84e0..75a79ac137 100644
--- a/docs/search/extensibility/index_custom_elasticsearch_data.md
+++ b/docs/search/extensibility/index_custom_elasticsearch_data.md
@@ -9,61 +9,23 @@ Besides what is indexed automatically, you can add additional data to the Elasti
To do so, subscribe to one of the following events:
-- `Ibexa\Contracts\ElasticSearchEngine\Mapping\Event\ContentIndexCreateEvent`
-- `Ibexa\Contracts\ElasticSearchEngine\Mapping\Event\LocationIndexCreateEvent`
+- [`Ibexa\Contracts\ElasticSearchEngine\Mapping\Event\ContentIndexCreateEvent`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Elasticsearch-Mapping-Event-ContentIndexCreateEvent.html)
+- [`Ibexa\Contracts\ElasticSearchEngine\Mapping\Event\LocationIndexCreateEvent`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Elasticsearch-Mapping-Event-LocationIndexCreateEvent.html)
These events are called when the index is created for the content and location documents.
You can pass the event to a subscriber which gives you access to the document that you can modify.
-In the following example, when an index in created for a content or a location document, the event subscriber adds a `custom_field` of the type `StringField` to the index:
+In the following example, when an index in created for a content or a location document, the event subscriber adds a `custom_field` of the type [`StringField`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-FieldType-StringField.html) to the index:
``` php hl_lines="19 20 21"
-getDocument();
- $document->fields[] = new Field(
- 'custom_field',
- 'Custom field value',
- new StringField()
- );
- }
-
- public function onLocationDocumentCreate(LocationIndexCreateEvent $event): void
- {
- $document = $event->getDocument();
- $document->fields[] = new Field(
- 'custom_field',
- 'Custom field value',
- new StringField()
- );
- }
-
- public static function getSubscribedEvents(): array
- {
- return [
- ContentIndexCreateEvent::class => 'onContentDocumentCreate',
- LocationIndexCreateEvent::class => 'onLocationDocumentCreate'
- ];
- }
-}
+--8<--
+code_samples/search/custom/src/EventSubscriber/CustomIndexDataSubscriber.php
+--8<--
```
-Remember to register the subscriber as a service:
+If you're not using [Symfony's autoconfiguration]([[= symfony_doc =]]/service_container.html#the-autoconfigure-option)
+for event subscribers, register it as a service:
``` yaml
services:
diff --git a/docs/search/extensibility/manipulate_elasticsearch_query.md b/docs/search/extensibility/manipulate_elasticsearch_query.md
index 98573ad949..d8f5cefa93 100644
--- a/docs/search/extensibility/manipulate_elasticsearch_query.md
+++ b/docs/search/extensibility/manipulate_elasticsearch_query.md
@@ -5,53 +5,20 @@ description: Manipulate the search query when using the Elasticsearch search eng
# Manipulate Elasticsearch query
You can customize the search query before it's executed.
-To do it, subscribe to `Ibexa\Contracts\ElasticSearchEngine\Query\Event\QueryFilterEvent`.
+To do it, subscribe to [`Ibexa\Contracts\Elasticsearch\Query\Event\QueryFilterEvent`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Elasticsearch-Query-Event-QueryFilterEvent.html).
-The following example shows how to add an additional Search Criterion to all queries.
+The following example shows how to add a Search Criterion to all queries.
Depending on your configuration, this might impact all search queries, including those used for search and content tree in the back office.
``` php hl_lines="34"
-getQuery();
-
- $additionalCriteria = new ObjectStateIdentifier('locked');
-
- if ($query->filter !== null) {
- $query->filter = $additionalCriteria;
- } else {
- // Append Criterion to existing filter
- $query->filter = new LogicalAnd([
- $query->filter,
- $additionalCriteria
- ]);
- }
- }
-
- public static function getSubscribedEvents(): array
- {
- return [
- QueryFilterEvent::class => 'onQueryFilter'
- ];
- }
-}
+--8<--
+code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php
+--8<--
```
-Remember to register the subscriber as a service:
+If you're not using [Symfony's autoconfiguration]([[= symfony_doc =]]/service_container.html#the-autoconfigure-option)
+for event subscribers, register it as a service:
``` yaml
services:
diff --git a/docs/search/extensibility/solr_document_field_mappers.md b/docs/search/extensibility/solr_document_field_mappers.md
index 2038b421d1..582f29d9b0 100644
--- a/docs/search/extensibility/solr_document_field_mappers.md
+++ b/docs/search/extensibility/solr_document_field_mappers.md
@@ -29,15 +29,15 @@ You can create the field mapper class anywhere inside your bundle, as long as yo
There are three different field mappers.
Each mapper implements two methods, by the same name, but accepting different arguments:
-- `ContentFieldMapper`
- - `::accept(Content $content)`
- - `::mapFields(Content $content)`
-- `ContentTranslationFieldMapper`
- - `::accept(Content $content, $languageCode)`
- - `::mapFields(Content $content, $languageCode)`
-- `LocationFieldMapper`
- - `::accept(Location $content)`
- - `::mapFields(Location $content)`
+- [`ContentFieldMapper`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-ContentTranslationFieldMapper.html)
+ - [`::accept(Content $content)`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-ContentTranslationFieldMapper.html#method_accept)
+ - [`::mapFields(Content $content)`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-ContentTranslationFieldMapper.html#method_mapFields)
+- [`ContentTranslationFieldMapper`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-ContentTranslationFieldMapper.html)
+ - [`::accept(Content $content, $languageCode)`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-ContentTranslationFieldMapper.html#method_accept)
+ - [`::mapFields(Content $content, $languageCode)`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-ContentTranslationFieldMapper.html#method_mapFields)
+- [`LocationFieldMapper`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-LocationFieldMapper.html)
+ - [`::accept(Location $content)`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-LocationFieldMapper.html#method_accept)
+ - [`::mapFields(Location $content)`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-FieldMapper-LocationFieldMapper.html#method_mapFields)
Mappers can be used on the extension points by registering them with the [service container](php_api.md#service-container) by using service tags, as follows:
@@ -57,13 +57,13 @@ The example relies on a use case of indexing webinar data on the webinar events,
The field mapper could then look like this:
```php
-[[= include_file('code_samples/search/solr/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php') =]]
+[[= include_file('code_samples/search/custom/src/Search/FieldMapper/WebinarEventTitleFulltextFieldMapper.php') =]]
```
You index full text data only on the content document, therefore, you would register the service like this:
``` yaml
-[[= include_file('code_samples/search/solr/config/field_mapper_services.yaml') =]]
+[[= include_file('code_samples/search/custom/config/field_mapper_services.yaml') =]]
```
!!! caution "Permission issues when using Repository API in document field mappers"
diff --git a/docs/search/search_engines/elastic_search/configure_elastic_search.md b/docs/search/search_engines/elastic_search/configure_elastic_search.md
index 133ece726c..37df214ff7 100644
--- a/docs/search/search_engines/elastic_search/configure_elastic_search.md
+++ b/docs/search/search_engines/elastic_search/configure_elastic_search.md
@@ -492,7 +492,7 @@ For information about configuring an analyzer for each specific language, see [E
An adoption of the [English analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/analysis-lang-analyzer.html#english-analyzer) in [[= product_name =]] configuration looks like this:
```yaml hl_lines="3-5 15-23 35 41-52 94 99"
-[[= include_file('code_samples/search/elasticsearch/config/packages/elasticsearch-en.yaml') =]]
+[[= include_file('code_samples/search/custom/config/packages/elasticsearch-en.yaml') =]]
```
Then, you must bind this language template to your Elasticsearch connection.
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
index 6c7781a0be..427c3cab5e 100644
--- a/phpstan-baseline.neon
+++ b/phpstan-baseline.neon
@@ -351,49 +351,49 @@ parameters:
path: code_samples/page/page_listener/src/Block/Listener/MyBlockListener.php
-
- message: "#^Method App\\\\Query\\\\Aggregation\\\\Elasticsearch\\\\PriorityAggregationResultExtractor\\:\\:extract\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#"
+ message: "#^Method App\\\\Query\\\\Aggregation\\\\Elasticsearch\\\\PriorityRangeAggregationResultExtractor\\:\\:extract\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#"
count: 1
- path: code_samples/search/elasticsearch/src/Query/Aggregation/Elasticsearch/PriorityAggregationResultExtractor.php
+ path: code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationResultExtractor.php
-
message: "#^Method App\\\\Query\\\\Criterion\\\\Elasticsearch\\\\CameraManufacturerVisitor\\:\\:visit\\(\\) return type has no value type specified in iterable type array\\.$#"
count: 1
- path: code_samples/search/elasticsearch/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
+ path: code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
-
message: "#^Method App\\\\Query\\\\SortClause\\\\Elasticsearch\\\\ScoreVisitor\\:\\:visit\\(\\) return type has no value type specified in iterable type array\\.$#"
count: 1
- path: code_samples/search/elasticsearch/src/Query/SortClause/Elasticsearch/ScoreVisitor.php
+ path: code_samples/search/custom/src/Query/SortClause/Elasticsearch/ScoreVisitor.php
-
message: "#^Argument of an invalid type stdClass supplied for foreach, only iterables are supported\\.$#"
count: 1
- path: code_samples/search/solr/src/Query/Aggregation/Solr/PriorityAggregationResultExtractor.php
+ path: code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationResultExtractor.php
-
- message: "#^Method App\\\\Query\\\\Aggregation\\\\Solr\\\\PriorityAggregationResultExtractor\\:\\:canVisit\\(\\) has parameter \\$languageFilter with no value type specified in iterable type array\\.$#"
+ message: "#^Method App\\\\Query\\\\Aggregation\\\\Solr\\\\PriorityRangeAggregationResultExtractor\\:\\:canVisit\\(\\) has parameter \\$languageFilter with no value type specified in iterable type array\\.$#"
count: 1
- path: code_samples/search/solr/src/Query/Aggregation/Solr/PriorityAggregationResultExtractor.php
+ path: code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationResultExtractor.php
-
- message: "#^Method App\\\\Query\\\\Aggregation\\\\Solr\\\\PriorityAggregationResultExtractor\\:\\:extract\\(\\) has parameter \\$languageFilter with no value type specified in iterable type array\\.$#"
+ message: "#^Method App\\\\Query\\\\Aggregation\\\\Solr\\\\PriorityRangeAggregationResultExtractor\\:\\:extract\\(\\) has parameter \\$languageFilter with no value type specified in iterable type array\\.$#"
count: 1
- path: code_samples/search/solr/src/Query/Aggregation/Solr/PriorityAggregationResultExtractor.php
+ path: code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationResultExtractor.php
-
message: "#^Method App\\\\Query\\\\Aggregation\\\\Solr\\\\PriorityRangeAggregationVisitor\\:\\:formatRangeValue\\(\\) has parameter \\$value with no type specified\\.$#"
count: 1
- path: code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
+ path: code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
-
message: "#^Method App\\\\Query\\\\Aggregation\\\\Solr\\\\PriorityRangeAggregationVisitor\\:\\:visit\\(\\) should return array\\ but returns array\\\\>\\|string\\>\\.$#"
count: 1
- path: code_samples/search/solr/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
+ path: code_samples/search/custom/src/Query/Aggregation/Solr/PriorityRangeAggregationVisitor.php
-
message: "#^Parameter \\#2 \\$array of function array_map expects array, array\\\\|bool\\|float\\|int\\|string given\\.$#"
count: 1
- path: code_samples/search/solr/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
+ path: code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
-
message: "#^Call to an undefined method Ibexa\\\\FieldTypePage\\\\FieldType\\\\Page\\\\Block\\\\Renderer\\\\RenderRequestInterface\\:\\:getParameters\\(\\)\\.$#"