@@ -20,6 +20,7 @@ final class SupervisorExtension extends CompilerExtension
2020 'prefix ' => NULL ,
2121 'configuration ' => [],
2222 'defaults ' => [],
23+ 'group ' => NULL ,
2324 ];
2425
2526
@@ -37,7 +38,8 @@ public function loadConfiguration()
3738 $ this ->loadSupervisorConfiguration (
3839 (array ) $ config ['configuration ' ],
3940 (array ) $ config ['defaults ' ],
40- isset ($ config ['prefix ' ]) ? (string ) $ config ['prefix ' ] : NULL
41+ isset ($ config ['prefix ' ]) ? (string ) $ config ['prefix ' ] : NULL ,
42+ isset ($ config ['group ' ]) ? (string ) $ config ['group ' ] : NULL
4143 );
4244
4345 $ builder ->addDefinition ($ this ->prefix ('renderCommand ' ))
@@ -51,23 +53,21 @@ public function loadConfiguration()
5153 }
5254
5355
54- private function loadSupervisorConfiguration (array $ config , array $ defaults = [], string $ prefix = NULL )
56+ private function loadSupervisorConfiguration (array $ config , array $ defaults = [], string $ prefix = NULL , string $ group = NULL )
5557 {
5658 $ builder = $ this ->getContainerBuilder ();
5759
5860 $ configuration = $ builder ->addDefinition ($ this ->prefix ('configuration ' ))
5961 ->setClass (Configuration::class)
6062 ;
63+
6164 foreach ($ config as $ sectionName => $ sectionConfig ) {
6265 if ( ! $ sectionClass = (new Configuration )->findSection ($ sectionName )) {
6366 $ sectionClass = GenericSection::class;
6467 }
6568 if (is_subclass_of ($ sectionClass , Named::class)) {
6669 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- }
70+ $ name = $ this ->prepareName ($ name , $ prefix );
7171 $ configuration ->addSetup ('addSection ' , [
7272 new Statement ($ sectionClass , [
7373 $ name ,
@@ -84,6 +84,8 @@ private function loadSupervisorConfiguration(array $config, array $defaults = []
8484 ]);
8585 }
8686 }
87+
88+ $ this ->prepareGroup ($ config , $ configuration , $ prefix , $ group );
8789 }
8890
8991
@@ -99,4 +101,43 @@ private function mergeProperties(array $properties, array $defaults = []): array
99101
100102 return $ properties ;
101103 }
104+
105+
106+ private function prepareName (string $ name , string $ prefix = NULL ): string
107+ {
108+ $ builder = $ this ->getContainerBuilder ();
109+ $ parameters = [
110+ 'webId ' => $ builder ->parameters ['webId ' ],
111+ ];
112+ $ name = Helpers::expand ($ name , $ builder ->parameters );
113+
114+ if ($ prefix !== NULL ) {
115+ $ name = sprintf ('%s-%s ' , $ prefix , $ name );
116+ }
117+
118+ return $ name ;
119+ }
120+
121+
122+ private function prepareGroup (array $ config , \Nette \DI \ServiceDefinition $ configuration , string $ prefix = NULL , string $ group = NULL ): void
123+ {
124+ if ( ! $ group ) {
125+ return ;
126+ }
127+
128+ $ webPrograms = implode (', ' , array_map (function ($ name ) use ($ prefix ): string {
129+ return $ this ->prepareName ($ name , $ prefix );
130+ }, array_keys ($ config ['program ' ])));
131+
132+ $ sectionClass = (new Configuration )->findSection ('group ' );
133+ $ configuration ->addSetup ('addSection ' , [
134+ new Statement (
135+ $ sectionClass ,
136+ [
137+ $ group ,
138+ ['programs ' => $ webPrograms ],
139+ ]
140+ )
141+ ]);
142+ }
102143}
0 commit comments