1 | <?php |
||
38 | 1 | final class FlashMessagesExtension extends DI\CompilerExtension |
|
39 | { |
||
40 | /** |
||
41 | * @var array |
||
42 | */ |
||
43 | protected $defaults = [ |
||
44 | 'useTitle' => TRUE, |
||
45 | 'useOverlay' => FALSE, |
||
46 | 'templateFile' => NULL, |
||
47 | 'useTranslator' => TRUE, |
||
48 | ]; |
||
49 | |||
50 | /** |
||
51 | * @return void |
||
52 | */ |
||
53 | public function loadConfiguration() : void |
||
54 | { |
||
55 | 1 | $config = $this->getConfig($this->defaults); |
|
56 | 1 | $builder = $this->getContainerBuilder(); |
|
57 | |||
58 | 1 | Utils\Validators::assertField($config, 'useTitle', 'bool'); |
|
59 | 1 | Utils\Validators::assertField($config, 'useOverlay', 'bool'); |
|
60 | |||
61 | // Notifier |
||
62 | 1 | $builder->addDefinition($this->prefix('notifier')) |
|
63 | 1 | ->setClass(FlashMessages\FlashNotifier::class) |
|
64 | 1 | ->setArguments(['useTranslator' => $config['useTranslator']]); |
|
65 | |||
66 | // Session storage |
||
67 | 1 | $builder->addDefinition($this->prefix('storage')) |
|
68 | 1 | ->setClass(Storage\Session::class); |
|
69 | |||
70 | // Display components |
||
71 | 1 | $control = $builder->addDefinition($this->prefix('messages')) |
|
72 | 1 | ->setClass(Components\Control::class) |
|
73 | 1 | ->setImplement(Components\IControl::class) |
|
74 | 1 | ->setArguments([ |
|
75 | 1 | new Nette\PhpGenerator\PhpLiteral('$templateFile'), |
|
76 | ]) |
||
77 | 1 | ->setInject(TRUE); |
|
78 | |||
79 | 1 | foreach (['useTitle' => ['enableTitle', 'disableTitle'], 'useOverlay' => ['enableOverlay', 'disableOverlay']] as $parameter => $commands) { |
|
80 | 1 | if ($config[$parameter] === TRUE) { |
|
81 | 1 | $control->addSetup('$service->' . $commands[0] . '(?)', [$config[$parameter]]); |
|
82 | } else { |
||
83 | 1 | $control->addSetup('$service->' . $commands[1] . '(?)', [$config[$parameter]]); |
|
84 | } |
||
85 | } |
||
86 | |||
87 | 1 | if ($config['templateFile']) { |
|
88 | $control->addSetup('$service->setTemplateFile(?)', [$config['templateFile']]); |
||
89 | } |
||
90 | |||
91 | // Extension events |
||
92 | 1 | $builder->addDefinition($this->prefix('onResponseHandler')) |
|
93 | 1 | ->setClass(Events\OnResponseHandler::class); |
|
94 | |||
95 | 1 | $application = $builder->getDefinition('application'); |
|
96 | 1 | $application->addSetup('$service->onResponse[] = ?', ['@' . $this->prefix('onResponseHandler')]); |
|
97 | 1 | } |
|
98 | |||
99 | /** |
||
100 | * @param Nette\Configurator $config |
||
101 | * @param string $extensionName |
||
102 | * |
||
103 | * @return void |
||
104 | */ |
||
105 | public static function register(Nette\Configurator $config, string $extensionName = 'flashMessages') |
||
111 | } |
||
112 |