FiltersExtension::loadConfiguration()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 0
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Zenify
7
 * Copyright (c) 2012 Tomas Votruba (http://tomasvotruba.cz)
8
 */
9
10
namespace Zenify\DoctrineFilters\DI;
11
12
use Doctrine\ORM\Configuration;
13
use Nette\DI\CompilerExtension;
14
use Zenify\DoctrineFilters\Contract\FilterInterface;
15
use Zenify\DoctrineFilters\Contract\FilterManagerInterface;
16
use Zenify\DoctrineFilters\EventSubscriber\EnableFiltersSubscriber;
17
18
19
final class FiltersExtension extends CompilerExtension
20
{
21
22
	/**
23
	 * @var DefinitionFinder
24
	 */
25
	private $definitionFinder;
26
27
28 3
	public function loadConfiguration()
29
	{
30 3
		$containerBuilder = $this->getContainerBuilder();
31 3
		$services = $this->loadFromFile(__DIR__ . '/../config/services.neon');
32 3
		$this->compiler->parseServices($containerBuilder, $services);
0 ignored issues
show
Bug introduced by
It seems like $services defined by $this->loadFromFile(__DI.../config/services.neon') on line 31 can also be of type string; however, Nette\DI\Compiler::parseServices() does only seem to accept array, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
Deprecated Code introduced by
The method Nette\DI\Compiler::parseServices() has been deprecated.

This method has been deprecated.

Loading history...
33
34 3
		$this->definitionFinder = new DefinitionFinder($containerBuilder);
35 3
	}
36
37
38 2
	public function beforeCompile()
39
	{
40 2
		$containerBuilder = $this->getContainerBuilder();
41
42 2
		$definitionFinder = new DefinitionFinder($containerBuilder);
43 2
		$filterManagerDefinition = $definitionFinder->getDefinitionByType(FilterManagerInterface::class);
44 2
		$ormConfigurationDefinition = $definitionFinder->getDefinitionByType(Configuration::class);
45
46 2
		foreach ($containerBuilder->findByType(FilterInterface::class) as $name => $filterDefinition) {
47
			// 1) to filter manager to run conditions and enable allowed only
48 2
			$filterManagerDefinition->addSetup('addFilter', [$name, '@' . $name]);
49
			// 2) to Doctrine itself
50 2
			$ormConfigurationDefinition->addSetup('addFilter', [$name, $filterDefinition->getClass()]);
51
		}
52
53 2
		$this->passFilterManagerToListener();
54 2
	}
55
56
57
	/**
58
	 * Prevents circular reference.
59
	 */
60 2
	private function passFilterManagerToListener()
61
	{
62 2
		$enableFiltersSubscriberDefinition = $this->definitionFinder->getDefinitionByType(
63 2
			EnableFiltersSubscriber::class
64
		);
65
66 2
		$filterManagerServiceName = $this->definitionFinder->getServiceNameByType(FilterManagerInterface::class);
67 2
		$enableFiltersSubscriberDefinition->addSetup(
68 2
			'setFilterManager',
69 2
			['@' . $filterManagerServiceName]
70
		);
71 2
	}
72
73
}
74