FlashMessagesExtension::loadConfiguration()   A
last analyzed

Complexity

Conditions 4
Paths 6

Size

Total Lines 44

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 23
CRAP Score 4.0011

Importance

Changes 0
Metric Value
dl 0
loc 44
rs 9.216
c 0
b 0
f 0
ccs 23
cts 24
cp 0.9583
cc 4
nc 6
nop 0
crap 4.0011
1
<?php
2
/**
3
 * FlashMessagesExtension.php
4
 *
5
 * @copyright      More in license.md
6
 * @license        https://www.ipublikuj.eu
7
 * @author         Adam Kadlec <[email protected]>
8
 * @package        iPublikuj:FlashMessages!
9
 * @subpackage     DI
10
 * @since          1.0.0
11
 *
12
 * @date           05.02.15
13
 */
14
15
declare(strict_types = 1);
16
17
namespace IPub\FlashMessages\DI;
18
19
use Nette;
20
use Nette\DI;
21
use Nette\Schema\Expect;
22
use Nette\Schema\Schema;
23
use Nette\Utils;
24
25
use IPub\FlashMessages;
26
use IPub\FlashMessages\Components;
27
use IPub\FlashMessages\Events;
28
use IPub\FlashMessages\Storage;
29
30
/**
31
 * Flash messages extension container
32
 *
33
 * @package        iPublikuj:FlashMessages!
34
 * @subpackage     DI
35
 *
36
 * @author         Adam Kadlec <[email protected]>
37
 */
38 1
final class FlashMessagesExtension extends DI\CompilerExtension
39
{
40
	public function getConfigSchema(): Schema
41
	{
42 1
		return Expect::structure([
43 1
			'useOverlay' => Expect::bool(false),
44 1
			'templateFile' => Expect::string(),
45 1
			'useTranslator' => Expect::bool(false),
46 1
			'useTitle' => Expect::bool(true)
47
		]);
48
	}
49
50
	/**
51
	 * @return void
52
	 *
53
	 * @throws Utils\AssertionException
54
	 */
55
	public function loadConfiguration() : void
56
	{
57 1
		$config = $this->config;
58 1
		$builder = $this->getContainerBuilder();
59
60
61
		// Notifier
62 1
		$builder->addDefinition($this->prefix('notifier'))
63 1
			->setType(FlashMessages\FlashNotifier::class)
64 1
			->setArguments(['useTranslator' => $config->useTranslator]);
65
66
		// Session storage
67 1
		$builder->addDefinition($this->prefix('storage'))
68 1
			->setType(Storage\Session::class);
69
70
		// Display components
71
72
73 1
		$control = $builder->addFactoryDefinition($this->prefix('messages'))
74 1
			->setImplement(Components\IControl::class)
75 1
			->getResultDefinition()->setFactory(Components\Control::class)
76 1
			->setArguments([
77 1
				new Nette\PhpGenerator\PhpLiteral('$templateFile'),
78 1
			])->addTag(Nette\DI\Extensions\InjectExtension::TAG_INJECT);
79
80 1
		foreach (['useTitle' => ['enableTitle', 'disableTitle'], 'useOverlay' => ['enableOverlay', 'disableOverlay']] as $parameter => $commands) {
81 1
			if ($config->$parameter === TRUE) {
82 1
				$control->addSetup('$service->' . $commands[0] . '(?)', [$config->$parameter]);
83
			} else {
84 1
				$control->addSetup('$service->' . $commands[1] . '(?)', [$config->$parameter]);
85
			}
86
		}
87
88 1
		if ($config->templateFile) {
89
			$control->addSetup('$service->setTemplateFile(?)', [$config->templateFile]);
90
		}
91
92
		// Extension events
93 1
		$builder->addDefinition($this->prefix('onResponseHandler'))
94 1
			->setType(Events\OnResponseHandler::class);
95
96 1
		$application = $builder->getDefinition('application');
97 1
		$application->addSetup('$service->onResponse[] = ?', ['@' . $this->prefix('onResponseHandler')]);
98 1
	}
99
100
	/**
101
	 * @param Nette\Configurator $config
102
	 * @param string $extensionName
103
	 *
104
	 * @return void
105
	 */
106
	public static function register(Nette\Configurator $config, string $extensionName = 'flashMessages') : void
107
	{
108 1
		$config->onCompile[] = function (Nette\Configurator $config, Nette\DI\Compiler $compiler) use ($extensionName) : void {
109 1
			$compiler->addExtension($extensionName, new FlashMessagesExtension());
110 1
		};
111 1
	}
112
}
113