1 | <?php |
||
31 | class TranslationExtension extends Extension |
||
32 | { |
||
33 | /** |
||
34 | * {@inheritdoc} |
||
35 | */ |
||
36 | 8 | public function load(array $configs, ContainerBuilder $container) |
|
86 | |||
87 | /** |
||
88 | * Handle the config node to prepare the config manager. |
||
89 | * |
||
90 | * @param ContainerBuilder $container |
||
91 | * @param array $config |
||
92 | */ |
||
93 | 8 | private function handleConfigNode(ContainerBuilder $container, array $config) |
|
94 | { |
||
95 | 8 | $storageManager = $container->getDefinition('php_translation.storage_manager'); |
|
96 | 8 | $configurationManager = $container->getDefinition('php_translation.configuration_manager'); |
|
97 | // $first will be the "default" configuration. |
||
98 | 8 | $first = null; |
|
99 | 8 | foreach ($config['configs'] as $name => &$c) { |
|
100 | 8 | if (null === $first || 'default' === $name) { |
|
101 | 8 | $first = $name; |
|
102 | } |
||
103 | 8 | if (empty($c['project_root'])) { |
|
104 | // Add a project root of none is set. |
||
105 | 8 | $c['project_root'] = dirname($container->getParameter('kernel.root_dir')); |
|
106 | } |
||
107 | 8 | $c['name'] = $name; |
|
108 | 8 | $c['locales'] = $config['locales']; |
|
109 | 8 | $configurationServiceId = 'php_translation.configuration.'.$name; |
|
110 | 8 | $configDef = $container->register($configurationServiceId, ConfigurationModel::class); |
|
111 | 8 | $configDef->setPublic(false)->addArgument($c); |
|
112 | 8 | $configurationManager->addMethodCall('addConfiguration', [$name, new Reference($configurationServiceId)]); |
|
113 | |||
114 | /* |
||
115 | * Configure storage chain service |
||
116 | */ |
||
117 | 8 | $storageDefinition = $this->createChildDefinition('php_translation.storage.abstract'); |
|
118 | 8 | $storageDefinition->replaceArgument(2, new Reference($configurationServiceId)); |
|
119 | 8 | $storageDefinition->setPublic(true); |
|
120 | 8 | $container->setDefinition('php_translation.storage.'.$name, $storageDefinition); |
|
121 | 8 | $storageManager->addMethodCall('addStorage', [$name, new Reference('php_translation.storage.'.$name)]); |
|
122 | |||
123 | // Add storages |
||
124 | 8 | foreach ($c['remote_storage'] as $serviceId) { |
|
125 | $storageDefinition->addMethodCall('addRemoteStorage', [new Reference($serviceId)]); |
||
126 | } |
||
127 | |||
128 | 8 | foreach ($c['local_storage'] as $serviceId) { |
|
129 | 8 | if ('php_translation.local_file_storage.abstract' !== $serviceId) { |
|
130 | $storageDefinition->addMethodCall('addLocalStorage', [new Reference($serviceId)]); |
||
131 | |||
132 | continue; |
||
133 | } |
||
134 | |||
135 | 8 | $def = $this->createChildDefinition($serviceId); |
|
136 | 8 | $def->replaceArgument(2, [$c['output_dir']]) |
|
137 | 8 | ->replaceArgument(3, $c['local_file_storage_options']) |
|
138 | 8 | ->addTag('php_translation.storage', ['type' => 'local', 'name' => $name]); |
|
139 | 8 | $container->setDefinition('php_translation.single_storage.file.'.$name, $def); |
|
140 | } |
||
141 | } |
||
142 | |||
143 | 8 | if (null !== $first) { |
|
144 | // Create some aliases for the default storage |
||
145 | 8 | $container->setAlias('php_translation.storage', new Alias('php_translation.storage.'.$first, true)); |
|
146 | 8 | if ('default' !== $first) { |
|
147 | $container->setAlias('php_translation.storage.default', new Alias('php_translation.storage.'.$first, true)); |
||
148 | } |
||
149 | } |
||
150 | 8 | } |
|
151 | |||
152 | /** |
||
153 | * Handle config for WebUI. |
||
154 | * |
||
155 | * @param ContainerBuilder $container |
||
156 | * @param array $config |
||
157 | */ |
||
158 | 1 | private function enableWebUi(ContainerBuilder $container, array $config) |
|
159 | { |
||
160 | 1 | $container->setParameter('php_translation.webui.enabled', true); |
|
161 | 1 | $container->setParameter('php_translation.webui.allow_create', $config['webui']['allow_create']); |
|
162 | 1 | $container->setParameter('php_translation.webui.allow_delete', $config['webui']['allow_delete']); |
|
163 | |||
164 | 1 | $path = $config['webui']['file_base_path']; |
|
165 | 1 | if (null === $path) { |
|
166 | 1 | if ($container->hasParameter('kernel.project_dir')) { |
|
167 | $path = $container->getParameter('kernel.project_dir'); |
||
168 | } else { |
||
169 | 1 | $path = $container->getParameter('kernel.root_dir').'/..'; |
|
170 | } |
||
171 | } |
||
172 | |||
173 | 1 | $container->setParameter('php_translation.webui.file_base_path', rtrim($path, '/').'/'); |
|
174 | 1 | } |
|
175 | |||
176 | /** |
||
177 | * Handle config for EditInPlace. |
||
178 | * |
||
179 | * @param ContainerBuilder $container |
||
180 | * @param array $config |
||
181 | */ |
||
182 | 1 | private function enableEditInPlace(ContainerBuilder $container, array $config) |
|
203 | |||
204 | /** |
||
205 | * Handle config for Symfony Profiler. |
||
206 | * |
||
207 | * @param ContainerBuilder $container |
||
208 | * @param array $config |
||
209 | */ |
||
210 | 8 | private function enableSymfonyProfiler(ContainerBuilder $container, array $config) |
|
214 | |||
215 | /** |
||
216 | * Handle config for fallback auto translate. |
||
217 | * |
||
218 | * @param ContainerBuilder $container |
||
219 | * @param array $config |
||
220 | */ |
||
221 | 1 | private function enableFallbackAutoTranslator(ContainerBuilder $container, array $config) |
|
231 | |||
232 | /** |
||
233 | * {@inheritdoc} |
||
234 | */ |
||
235 | 8 | public function getAlias() |
|
239 | |||
240 | /** |
||
241 | * To avoid BC break for Symfony 3.3+. |
||
242 | * |
||
243 | * @param $parent |
||
244 | * |
||
245 | * @return ChildDefinition|DefinitionDecorator |
||
246 | */ |
||
247 | 8 | private function createChildDefinition($parent) |
|
255 | |||
256 | /** |
||
257 | * {@inheritdoc} |
||
258 | */ |
||
259 | public function getConfiguration(array $config, ContainerBuilder $container) |
||
263 | } |
||
264 |