Skip to content

Commit f088737

Browse files
Marek HučíkJakub-Fajkus
authored andcommitted
#3 Automatické přiřazení consumerů projektu do skupiny
1 parent d5af498 commit f088737

File tree

1 file changed

+47
-6
lines changed

1 file changed

+47
-6
lines changed

src/DI/SupervisorExtension.php

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)