• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

api-platform / core / 14246153067

03 Apr 2025 02:56PM UTC coverage: 7.286% (-0.002%) from 7.288%
14246153067

push

github

web-flow
Merge commit from fork

12 of 160 new or added lines in 7 files covered. (7.5%)

2343 existing lines in 152 files now uncovered.

12450 of 170870 relevant lines covered (7.29%)

12.06 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

60.0
/src/Doctrine/Odm/Extension/ParameterExtension.php
1
<?php
2

3
/*
4
 * This file is part of the API Platform project.
5
 *
6
 * (c) Kévin Dunglas <dunglas@gmail.com>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11

12
declare(strict_types=1);
13

14
namespace ApiPlatform\Doctrine\Odm\Extension;
15

16
use ApiPlatform\Doctrine\Common\ParameterValueExtractorTrait;
17
use ApiPlatform\Doctrine\Odm\Filter\FilterInterface;
18
use ApiPlatform\Metadata\Operation;
19
use ApiPlatform\State\ParameterNotFound;
20
use Doctrine\ODM\MongoDB\Aggregation\Builder;
21
use Psr\Container\ContainerInterface;
22

23
/**
24
 * Reads operation parameters and execute its filter.
25
 *
26
 * @author Antoine Bluchet <soyuka@gmail.com>
27
 */
28
final class ParameterExtension implements AggregationCollectionExtensionInterface, AggregationItemExtensionInterface
29
{
30
    use ParameterValueExtractorTrait;
31

32
    public function __construct(private readonly ContainerInterface $filterLocator)
33
    {
UNCOV
34
    }
469✔
35

36
    private function applyFilter(Builder $aggregationBuilder, ?string $resourceClass = null, ?Operation $operation = null, array &$context = []): void
37
    {
UNCOV
38
        foreach ($operation->getParameters() ?? [] as $parameter) {
469✔
UNCOV
39
            if (null === ($v = $parameter->getValue()) || $v instanceof ParameterNotFound) {
220✔
UNCOV
40
                continue;
219✔
41
            }
42

UNCOV
43
            $values = $this->extractParameterValue($parameter, $v);
170✔
UNCOV
44
            if (null === ($filterId = $parameter->getFilter())) {
170✔
UNCOV
45
                continue;
170✔
46
            }
47

48
            $filter = $this->filterLocator->has($filterId) ? $this->filterLocator->get($filterId) : null;
×
49
            if ($filter instanceof FilterInterface) {
×
50
                $filterContext = ['filters' => $values, 'parameter' => $parameter];
×
51
                $filter->apply($aggregationBuilder, $resourceClass, $operation, $filterContext);
×
52
                // update by reference
53
                if (isset($filterContext['mongodb_odm_sort_fields'])) {
×
54
                    $context['mongodb_odm_sort_fields'] = $filterContext['mongodb_odm_sort_fields'];
×
55
                }
56
            }
57
        }
58
    }
59

60
    /**
61
     * {@inheritdoc}
62
     */
63
    public function applyToCollection(Builder $aggregationBuilder, string $resourceClass, ?Operation $operation = null, array &$context = []): void
64
    {
UNCOV
65
        $this->applyFilter($aggregationBuilder, $resourceClass, $operation, $context);
274✔
66
    }
67

68
    /**
69
     * {@inheritdoc}
70
     */
71
    public function applyToItem(Builder $aggregationBuilder, string $resourceClass, array $identifiers, ?Operation $operation = null, array &$context = []): void
72
    {
UNCOV
73
        $this->applyFilter($aggregationBuilder, $resourceClass, $operation, $context);
217✔
74
    }
75
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc