Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix PHPStan errors #2610

Merged
merged 5 commits into from
Feb 12, 2025
Merged

Fix PHPStan errors #2610

merged 5 commits into from
Feb 12, 2025

Conversation

adriendupuis
Copy link
Contributor

Question Answer
JIRA Ticket N/A
Versions 4.6, master
Edition All

Fix PHPStan errors after #2591

Checklist

  • Text renders correctly
  • Text has been checked with vale
  • Description metadata is up to date
  • Redirects cover removed/moved pages
  • Code samples are working
  • PHP code samples have been fixed with PHP CS fixer
  • Added link to this PR in relevant JIRA ticket or code PR

@adriendupuis adriendupuis changed the base branch from master to 4.6 February 12, 2025 10:11
Copy link

Preview of modified Markdown: no Markdown change to preview.

@adriendupuis adriendupuis requested a review from mnocon February 12, 2025 10:40
Copy link
Contributor

@mnocon mnocon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@@ -6,7 +6,7 @@

use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\LogicalAnd;
use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\ObjectStateIdentifier;
use Ibexa\Contracts\ElasticSearch\Query\Event\QueryFilterEvent;
use Ibexa\Contracts\Elasticsearch\Query\Event\QueryFilterEvent;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch 😄

Copy link

code_samples/ change report

Before (on target branch)After (in current PR)

code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php

docs/search/extensibility/manipulate_elasticsearch_query.md@14:``` php hl_lines="34"
docs/search/extensibility/manipulate_elasticsearch_query.md@15:--8<--
docs/search/extensibility/manipulate_elasticsearch_query.md@16:code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php
docs/search/extensibility/manipulate_elasticsearch_query.md@17:--8<--
docs/search/extensibility/manipulate_elasticsearch_query.md@18:```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\EventSubscriber;
006⫶
007⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\LogicalAnd;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\ObjectStateIdentifier;

code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php

docs/search/extensibility/manipulate_elasticsearch_query.md@14:``` php hl_lines="34"
docs/search/extensibility/manipulate_elasticsearch_query.md@15:--8<--
docs/search/extensibility/manipulate_elasticsearch_query.md@16:code_samples/search/custom/src/EventSubscriber/CustomQueryFilterSubscriber.php
docs/search/extensibility/manipulate_elasticsearch_query.md@17:--8<--
docs/search/extensibility/manipulate_elasticsearch_query.md@18:```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\EventSubscriber;
006⫶
007⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\LogicalAnd;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\ObjectStateIdentifier;
009⫶use Ibexa\Contracts\ElasticSearch\Query\Event\QueryFilterEvent;
009⫶use Ibexa\Contracts\Elasticsearch\Query\Event\QueryFilterEvent;
010⫶use Symfony\Component\EventDispatcher\EventSubscriberInterface;
011⫶
012⫶final class CustomQueryFilterSubscriber implements EventSubscriberInterface
013⫶{
014⫶ public function onQueryFilter(QueryFilterEvent $event): void
015⫶ {
016⫶ $query = $event->getQuery();
017⫶
018⫶ $additionalCriteria = new ObjectStateIdentifier('locked');
019⫶
020⫶ if ($query->filter !== null) {
021⫶ $query->filter = $additionalCriteria;
022⫶ } else {
023⫶ // Append Criterion to existing filter
024⫶ $query->filter = new LogicalAnd([
025⫶ $query->filter,
026⫶ $additionalCriteria,
027⫶ ]);
028⫶ }
029⫶ }
030⫶
031⫶ public static function getSubscribedEvents(): array
032⫶ {
033⫶ return [
034❇️ QueryFilterEvent::class => 'onQueryFilter',
035⫶ ];
036⫶ }
037⫶}


code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationVisitor.php

docs/search/extensibility/create_custom_aggregation.md@151: ``` php
docs/search/extensibility/create_custom_aggregation.md@152: --8<--
docs/search/extensibility/create_custom_aggregation.md@153: code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationVisitor.php
docs/search/extensibility/create_custom_aggregation.md@154: --8<--
docs/search/extensibility/create_custom_aggregation.md@155: ```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\Query\Aggregation\Elasticsearch;
006⫶
007⫶use App\Query\Aggregation\PriorityRangeAggregation;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation;
009⫶use Ibexa\Contracts\Elasticsearch\Query\AggregationVisitor;
010⫶use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
011⫶
012⫶final class PriorityRangeAggregationVisitor implements AggregationVisitor
013⫶{
014⫶ public function supports(Aggregation $aggregation, LanguageFilter $languageFilter): bool
015⫶ {
016⫶ return $aggregation instanceof PriorityRangeAggregation;
017⫶ }
018⫶
019⫶ /**
020⫶ * @param \App\Query\Aggregation\PriorityRangeAggregation $aggregation
010⫶use Symfony\Component\EventDispatcher\EventSubscriberInterface;
011⫶
012⫶final class CustomQueryFilterSubscriber implements EventSubscriberInterface
013⫶{
014⫶ public function onQueryFilter(QueryFilterEvent $event): void
015⫶ {
016⫶ $query = $event->getQuery();
017⫶
018⫶ $additionalCriteria = new ObjectStateIdentifier('locked');
019⫶
020⫶ if ($query->filter !== null) {
021⫶ $query->filter = $additionalCriteria;
022⫶ } else {
023⫶ // Append Criterion to existing filter
024⫶ $query->filter = new LogicalAnd([
025⫶ $query->filter,
026⫶ $additionalCriteria,
027⫶ ]);
028⫶ }
029⫶ }
030⫶
031⫶ public static function getSubscribedEvents(): array
032⫶ {
033⫶ return [
034❇️ QueryFilterEvent::class => 'onQueryFilter',
035⫶ ];
036⫶ }
037⫶}


code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationVisitor.php

docs/search/extensibility/create_custom_aggregation.md@151: ``` php
docs/search/extensibility/create_custom_aggregation.md@152: --8<--
docs/search/extensibility/create_custom_aggregation.md@153: code_samples/search/custom/src/Query/Aggregation/Elasticsearch/PriorityRangeAggregationVisitor.php
docs/search/extensibility/create_custom_aggregation.md@154: --8<--
docs/search/extensibility/create_custom_aggregation.md@155: ```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\Query\Aggregation\Elasticsearch;
006⫶
007⫶use App\Query\Aggregation\PriorityRangeAggregation;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation;
009⫶use Ibexa\Contracts\Elasticsearch\Query\AggregationVisitor;
010⫶use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
011⫶
012⫶final class PriorityRangeAggregationVisitor implements AggregationVisitor
013⫶{
014⫶ public function supports(Aggregation $aggregation, LanguageFilter $languageFilter): bool
015⫶ {
016⫶ return $aggregation instanceof PriorityRangeAggregation;
017⫶ }
018⫶
019⫶ /**
020⫶ * @param \App\Query\Aggregation\PriorityRangeAggregation $aggregation
021⫶     */
022⫶ public function visit(AggregationVisitor $dispatcher, Aggregation $aggregation, LanguageFilter $languageFilter): array
023⫶ {
024⫶ $ranges = [];
025⫶
026⫶ foreach ($aggregation->getRanges() as $range) {
027⫶ if ($range->getFrom() !== null && $range->getTo() !== null) {
028⫶ $ranges[] = [
029⫶ 'from' => $range->getFrom(),
030⫶ 'to' => $range->getTo(),
031⫶ ];
032⫶ } elseif ($range->getFrom() === null && $range->getTo() !== null) {
033⫶ $ranges[] = [
034⫶ 'to' => $range->getTo(),
035⫶ ];
036⫶ } elseif ($range->getFrom() !== null && $range->getTo() === null) {
037⫶ $ranges[] = [
038⫶ 'from' => $range->getFrom(),
039⫶ ];
040⫶ } else {
041⫶ // invalid range
042⫶ }
043⫶ }
044⫶
045⫶ return [
046⫶ 'range' => [
047⫶ 'field' => 'priority_i',
048⫶ 'ranges' => $ranges,
049⫶ ],
050⫶ ];
051⫶ }
052⫶}
021⫶     *
022⫶ * @return array<string, array<string, mixed>>
023⫶ */
024⫶ public function visit(AggregationVisitor $dispatcher, Aggregation $aggregation, LanguageFilter $languageFilter): array
025⫶ {
026⫶ $ranges = [];
027⫶
028⫶ foreach ($aggregation->getRanges() as $range) {
029⫶ if ($range->getFrom() !== null && $range->getTo() !== null) {
030⫶ $ranges[] = [
031⫶ 'from' => $range->getFrom(),
032⫶ 'to' => $range->getTo(),
033⫶ ];
034⫶ } elseif ($range->getFrom() === null && $range->getTo() !== null) {
035⫶ $ranges[] = [
036⫶ 'to' => $range->getTo(),
037⫶ ];
038⫶ } elseif ($range->getFrom() !== null && $range->getTo() === null) {
039⫶ $ranges[] = [
040⫶ 'from' => $range->getFrom(),
041⫶ ];
042⫶ } else {
043⫶ // invalid range
044⫶ }
045⫶ }
046⫶
047⫶ return [
048⫶ 'range' => [
049⫶ 'field' => 'priority_i',
050⫶ 'ranges' => $ranges,
051⫶ ],
052⫶ ];
053⫶ }
054⫶}


code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php

docs/search/extensibility/create_custom_search_criterion.md@33: ``` php
docs/search/extensibility/create_custom_search_criterion.md@34: --8<--
docs/search/extensibility/create_custom_search_criterion.md@35: code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
docs/search/extensibility/create_custom_search_criterion.md@36: --8<--
docs/search/extensibility/create_custom_search_criterion.md@37: ```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\Query\Criterion\Elasticsearch;
006⫶
007⫶use App\Query\Criterion\CameraManufacturerCriterion;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
009⫶use Ibexa\Contracts\Elasticsearch\Query\CriterionVisitor;
010⫶use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
011⫶
012⫶final class CameraManufacturerVisitor implements CriterionVisitor
013⫶{
014⫶ public function supports(Criterion $criterion, LanguageFilter $languageFilter): bool
015⫶ {
016⫶ return $criterion instanceof CameraManufacturerCriterion;
017⫶ }
018⫶
019⫶ /**


code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php

docs/search/extensibility/create_custom_search_criterion.md@33: ``` php
docs/search/extensibility/create_custom_search_criterion.md@34: --8<--
docs/search/extensibility/create_custom_search_criterion.md@35: code_samples/search/custom/src/Query/Criterion/Elasticsearch/CameraManufacturerVisitor.php
docs/search/extensibility/create_custom_search_criterion.md@36: --8<--
docs/search/extensibility/create_custom_search_criterion.md@37: ```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\Query\Criterion\Elasticsearch;
006⫶
007⫶use App\Query\Criterion\CameraManufacturerCriterion;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
009⫶use Ibexa\Contracts\Elasticsearch\Query\CriterionVisitor;
010⫶use Ibexa\Contracts\Elasticsearch\Query\LanguageFilter;
011⫶
012⫶final class CameraManufacturerVisitor implements CriterionVisitor
013⫶{
014⫶ public function supports(Criterion $criterion, LanguageFilter $languageFilter): bool
015⫶ {
016⫶ return $criterion instanceof CameraManufacturerCriterion;
017⫶ }
018⫶
019⫶ /**
020⫶     * @param \App\Query\Criterion\Elasticsearch\CameraManufacturerCriterion $criterion
020⫶     * @param \App\Query\Criterion\CameraManufacturerCriterion $criterion
021⫶     */
022⫶ public function visit(CriterionVisitor $dispatcher, Criterion $criterion, LanguageFilter $languageFilter): array
023⫶ {
024⫶ return [
025⫶ 'terms' => [
026⫶ 'exif_camera_manufacturer_id' => (array)$criterion->value,
027⫶ ],
028⫶ ];
029⫶ }
030⫶}


code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php

docs/search/extensibility/create_custom_search_criterion.md@25: ``` php
docs/search/extensibility/create_custom_search_criterion.md@26: --8<--
docs/search/extensibility/create_custom_search_criterion.md@27: code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
docs/search/extensibility/create_custom_search_criterion.md@28: --8<--
docs/search/extensibility/create_custom_search_criterion.md@29: ```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\Query\Criterion\Solr;
006⫶
007⫶use App\Query\Criterion\CameraManufacturerCriterion;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
009⫶use Ibexa\Contracts\Solr\Query\CriterionVisitor;
010⫶
011⫶final class CameraManufacturerVisitor extends CriterionVisitor
012⫶{
013⫶ public function canVisit(Criterion $criterion)
014⫶ {
015⫶ return $criterion instanceof CameraManufacturerCriterion;
016⫶ }
017⫶
018⫶ /**
021⫶     */
022⫶ public function visit(CriterionVisitor $dispatcher, Criterion $criterion, LanguageFilter $languageFilter): array
023⫶ {
024⫶ return [
025⫶ 'terms' => [
026⫶ 'exif_camera_manufacturer_id' => (array)$criterion->value,
027⫶ ],
028⫶ ];
029⫶ }
030⫶}


code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php

docs/search/extensibility/create_custom_search_criterion.md@25: ``` php
docs/search/extensibility/create_custom_search_criterion.md@26: --8<--
docs/search/extensibility/create_custom_search_criterion.md@27: code_samples/search/custom/src/Query/Criterion/Solr/CameraManufacturerVisitor.php
docs/search/extensibility/create_custom_search_criterion.md@28: --8<--
docs/search/extensibility/create_custom_search_criterion.md@29: ```

001⫶<?php
002⫶
003⫶declare(strict_types=1);
004⫶
005⫶namespace App\Query\Criterion\Solr;
006⫶
007⫶use App\Query\Criterion\CameraManufacturerCriterion;
008⫶use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
009⫶use Ibexa\Contracts\Solr\Query\CriterionVisitor;
010⫶
011⫶final class CameraManufacturerVisitor extends CriterionVisitor
012⫶{
013⫶ public function canVisit(Criterion $criterion)
014⫶ {
015⫶ return $criterion instanceof CameraManufacturerCriterion;
016⫶ }
017⫶
018⫶ /**
019⫶     * @param \App\Query\Criterion\Solr\CameraManufacturerCriterion $criterion
019⫶     * @param \App\Query\Criterion\CameraManufacturerCriterion $criterion
020⫶     */
021⫶ public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null)
022⫶ {
023⫶ $expressions = array_map(
024⫶ function ($value): string {
025⫶ return 'exif_camera_manufacturer_id:"' . $this->escapeQuote((string) $value) . '"';
026⫶ },
027⫶ $criterion->value
028⫶ );
029⫶
030⫶ return '(' . implode(' OR ', $expressions) . ')';
031⫶ }
032⫶}

020⫶     */
021⫶ public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null)
022⫶ {
023⫶ $expressions = array_map(
024⫶ function ($value): string {
025⫶ return 'exif_camera_manufacturer_id:"' . $this->escapeQuote((string) $value) . '"';
026⫶ },
027⫶ $criterion->value
028⫶ );
029⫶
030⫶ return '(' . implode(' OR ', $expressions) . ')';
031⫶ }
032⫶}

Download colorized diff

@adriendupuis adriendupuis merged commit b5ea60f into 4.6 Feb 12, 2025
7 checks passed
@adriendupuis adriendupuis deleted the fix-search-phpstan branch February 12, 2025 12:24
adriendupuis added a commit that referenced this pull request Feb 12, 2025
* Fix errors found by PHPStan
* code_samples_usage.php: Tri more visible 'highlighted line' marker
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants