Completed
Pull Request — master (#5)
by
unknown
02:20
created

FlashMessagesExtension::getConfigSchema()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
ccs 6
cts 6
cp 1
cc 1
nc 1
nop 0
crap 1
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
			'vat' => Expect::bool(true),
44 1
			'useOverlay' => Expect::bool(false),
45 1
			'templateFile' => Expect::string(),
46 1
			'useTranslator' => Expect::bool(false),
47 1
			'useTitle' => Expect::bool(true)
48
		]);
49
	}
50
51
	/**
52
	 * @return void
53
	 *
54
	 * @throws Utils\AssertionException
55
	 */
56
	public function loadConfiguration() : void
57
	{
58 1
		$config = $this->config;
59 1
		$builder = $this->getContainerBuilder();
60
61
62
		// Notifier
63 1
		$builder->addDefinition($this->prefix('notifier'))
64 1
			->setType(FlashMessages\FlashNotifier::class)
65 1
			->setArguments(['useTranslator' => $config->useTranslator]);
66
67
		// Session storage
68 1
		$builder->addDefinition($this->prefix('storage'))
69 1
			->setType(Storage\Session::class);
70
71
		// Display components
72
73
74 1
		$control = $builder->addFactoryDefinition($this->prefix('messages'))
75 1
			->setImplement(Components\IControl::class)
76 1
			->getResultDefinition()->setFactory(Components\Control::class)
77 1
			->setArguments([
78 1
				new Nette\PhpGenerator\PhpLiteral('$templateFile'),
79 1
			])->addTag(Nette\DI\Extensions\InjectExtension::TAG_INJECT);
80
81 1
		foreach (['useTitle' => ['enableTitle', 'disableTitle'], 'useOverlay' => ['enableOverlay', 'disableOverlay']] as $parameter => $commands) {
82 1
			if ($config->$parameter === TRUE) {
83 1
				$control->addSetup('$service->' . $commands[0] . '(?)', [$config->$parameter]);
84
			} else {
85 1
				$control->addSetup('$service->' . $commands[1] . '(?)', [$config->$parameter]);
86
			}
87
		}
88
89 1
		if ($config->templateFile) {
90
			$control->addSetup('$service->setTemplateFile(?)', [$config->templateFile]);
91
		}
92
93
		// Extension events
94 1
		$builder->addDefinition($this->prefix('onResponseHandler'))
95 1
			->setType(Events\OnResponseHandler::class);
96
97 1
		$application = $builder->getDefinition('application');
98 1
		$application->addSetup('$service->onResponse[] = ?', ['@' . $this->prefix('onResponseHandler')]);
99 1
	}
100
101
	/**
102
	 * @param Nette\Configurator $config
103
	 * @param string $extensionName
104
	 *
105
	 * @return void
106
	 */
107
	public static function register(Nette\Configurator $config, string $extensionName = 'flashMessages') : void
108
	{
109 1
		$config->onCompile[] = function (Nette\Configurator $config, Nette\DI\Compiler $compiler) use ($extensionName) : void {
110 1
			$compiler->addExtension($extensionName, new FlashMessagesExtension());
111 1
		};
112 1
	}
113
}
114