@@ -20,6 +20,7 @@ final class SupervisorExtension extends CompilerExtension
20
20
'prefix ' => NULL ,
21
21
'configuration ' => [],
22
22
'defaults ' => [],
23
+ 'group ' => NULL ,
23
24
];
24
25
25
26
@@ -28,6 +29,13 @@ public function loadConfiguration()
28
29
$ builder = $ this ->getContainerBuilder ();
29
30
30
31
$ config = $ this ->getConfig (self ::DEFAULTS );
32
+
33
+ if ( ! isset ($ config ['prefix ' ])) {
34
+ throw new \Pd \Supervisor \DI \MissingConfigurationValueException (
35
+ 'Parametr \'prefix \' pro extension \'supervisor \' je vyzadovany. Doplnte jej a jako hodnotu vyberte idealne nazev projektu. '
36
+ );
37
+ }
38
+
31
39
foreach ($ this ->compiler ->getExtensions () as $ extension ) {
32
40
if ($ extension instanceof IConfigurationProvider) {
33
41
$ config ['configuration ' ] = array_merge_recursive ($ extension ->getSupervisorConfiguration (), $ config ['configuration ' ]);
@@ -37,7 +45,8 @@ public function loadConfiguration()
37
45
$ this ->loadSupervisorConfiguration (
38
46
(array ) $ config ['configuration ' ],
39
47
(array ) $ config ['defaults ' ],
40
- isset ($ config ['prefix ' ]) ? (string ) $ config ['prefix ' ] : NULL
48
+ (string ) $ config ['prefix ' ],
49
+ isset ($ config ['group ' ]) ? (string ) $ config ['group ' ] : NULL
41
50
);
42
51
43
52
$ builder ->addDefinition ($ this ->prefix ('renderCommand ' ))
@@ -51,23 +60,21 @@ public function loadConfiguration()
51
60
}
52
61
53
62
54
- private function loadSupervisorConfiguration (array $ config , array $ defaults = [], string $ prefix = NULL )
63
+ private function loadSupervisorConfiguration (array $ config , array $ defaults = [], string $ prefix, string $ group = NULL )
55
64
{
56
65
$ builder = $ this ->getContainerBuilder ();
57
66
58
67
$ configuration = $ builder ->addDefinition ($ this ->prefix ('configuration ' ))
59
68
->setClass (Configuration::class)
60
69
;
70
+
61
71
foreach ($ config as $ sectionName => $ sectionConfig ) {
62
72
if ( ! $ sectionClass = (new Configuration )->findSection ($ sectionName )) {
63
73
$ sectionClass = GenericSection::class;
64
74
}
65
75
if (is_subclass_of ($ sectionClass , Named::class)) {
66
76
foreach ((array ) $ sectionConfig as $ name => $ properties ) {
67
- $ name = Helpers::expand ($ name , $ builder ->parameters );
68
- if ($ prefix !== NULL ) {
69
- $ name = sprintf ('%s-%s ' , $ prefix , $ name );
70
- }
77
+ $ name = $ this ->prepareName ($ name , $ prefix );
71
78
$ configuration ->addSetup ('addSection ' , [
72
79
new Statement ($ sectionClass , [
73
80
$ name ,
@@ -84,6 +91,8 @@ private function loadSupervisorConfiguration(array $config, array $defaults = []
84
91
]);
85
92
}
86
93
}
94
+
95
+ $ this ->prepareGroup ($ config , $ configuration , $ prefix , $ group );
87
96
}
88
97
89
98
@@ -99,4 +108,38 @@ private function mergeProperties(array $properties, array $defaults = []): array
99
108
100
109
return $ properties ;
101
110
}
111
+
112
+
113
+ private function prepareName (string $ name , string $ prefix ): string
114
+ {
115
+ $ builder = $ this ->getContainerBuilder ();
116
+ $ name = Helpers::expand ($ name , $ builder ->parameters );
117
+
118
+ $ name = sprintf ('%s-%s ' , $ prefix , $ name );
119
+
120
+ return $ name ;
121
+ }
122
+
123
+
124
+ private function prepareGroup (array $ config , \Nette \DI \ServiceDefinition $ configuration , string $ prefix , string $ group = NULL ): void
125
+ {
126
+ if ( ! $ group ) {
127
+ return ;
128
+ }
129
+
130
+ $ webPrograms = implode (', ' , array_map (function ($ name ) use ($ prefix ): string {
131
+ return $ this ->prepareName ($ name , $ prefix );
132
+ }, array_keys ($ config ['program ' ])));
133
+
134
+ $ sectionClass = (new Configuration )->findSection ('group ' );
135
+ $ configuration ->addSetup ('addSection ' , [
136
+ new Statement (
137
+ $ sectionClass ,
138
+ [
139
+ $ group ,
140
+ ['programs ' => $ webPrograms ],
141
+ ]
142
+ )
143
+ ]);
144
+ }
102
145
}
0 commit comments