Mercurial > hg > isophonics-drupal-site
comparison core/modules/language/src/LanguageServiceProvider.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\language; | |
4 | |
5 use Drupal\Core\Config\BootstrapConfigStorageFactory; | |
6 use Drupal\Core\DependencyInjection\ContainerBuilder; | |
7 use Drupal\Core\DependencyInjection\ServiceProviderBase; | |
8 use Drupal\Core\Language\LanguageInterface; | |
9 use Symfony\Component\DependencyInjection\Reference; | |
10 | |
11 /** | |
12 * Overrides the language_manager service to point to language's module one. | |
13 */ | |
14 class LanguageServiceProvider extends ServiceProviderBase { | |
15 | |
16 const CONFIG_PREFIX = 'language.entity.'; | |
17 | |
18 /** | |
19 * {@inheritdoc} | |
20 */ | |
21 public function register(ContainerBuilder $container) { | |
22 // The following services are needed only on multilingual sites. | |
23 if ($this->isMultilingual()) { | |
24 $container->register('language_request_subscriber', 'Drupal\language\EventSubscriber\LanguageRequestSubscriber') | |
25 ->addTag('event_subscriber') | |
26 ->addArgument(new Reference('language_manager')) | |
27 ->addArgument(new Reference('language_negotiator')) | |
28 ->addArgument(new Reference('string_translation')) | |
29 ->addArgument(new Reference('current_user')); | |
30 | |
31 $container->register('path_processor_language', 'Drupal\language\HttpKernel\PathProcessorLanguage') | |
32 ->addTag('path_processor_inbound', ['priority' => 300]) | |
33 ->addTag('path_processor_outbound', ['priority' => 100]) | |
34 ->addArgument(new Reference('config.factory')) | |
35 ->addArgument(new Reference('language_manager')) | |
36 ->addArgument(new Reference('language_negotiator')) | |
37 ->addArgument(new Reference('current_user')) | |
38 ->addArgument(new Reference('language.config_subscriber')) | |
39 ->addMethodCall('initConfigSubscriber'); | |
40 } | |
41 } | |
42 | |
43 /** | |
44 * {@inheritdoc} | |
45 */ | |
46 public function alter(ContainerBuilder $container) { | |
47 $definition = $container->getDefinition('language_manager'); | |
48 $definition->setClass('Drupal\language\ConfigurableLanguageManager') | |
49 ->addArgument(new Reference('config.factory')) | |
50 ->addArgument(new Reference('module_handler')) | |
51 ->addArgument(new Reference('language.config_factory_override')) | |
52 ->addArgument(new Reference('request_stack')); | |
53 if ($default_language_values = $this->getDefaultLanguageValues()) { | |
54 $container->setParameter('language.default_values', $default_language_values); | |
55 } | |
56 | |
57 } | |
58 | |
59 /** | |
60 * Checks whether the site is multilingual. | |
61 * | |
62 * @return bool | |
63 * TRUE if the site is multilingual, FALSE otherwise. | |
64 */ | |
65 protected function isMultilingual() { | |
66 // Assign the prefix to a local variable so it can be used in an anonymous | |
67 // function. | |
68 $prefix = static::CONFIG_PREFIX; | |
69 // @todo Try to swap out for config.storage to take advantage of database | |
70 // and caching. This might prove difficult as this is called before the | |
71 // container has finished building. | |
72 $config_storage = BootstrapConfigStorageFactory::get(); | |
73 $config_ids = array_filter($config_storage->listAll($prefix), function ($config_id) use ($prefix) { | |
74 return $config_id != $prefix . LanguageInterface::LANGCODE_NOT_SPECIFIED && $config_id != $prefix . LanguageInterface::LANGCODE_NOT_APPLICABLE; | |
75 }); | |
76 return count($config_ids) > 1; | |
77 } | |
78 | |
79 /** | |
80 * Gets the default language values. | |
81 * | |
82 * @return array|bool | |
83 * Returns the default language values for the language configured in | |
84 * system.site:default_langcode if the corresponding configuration entity | |
85 * exists, otherwise FALSE. | |
86 */ | |
87 protected function getDefaultLanguageValues() { | |
88 $config_storage = BootstrapConfigStorageFactory::get(); | |
89 $system = $config_storage->read('system.site'); | |
90 $default_language = $config_storage->read(static::CONFIG_PREFIX . $system['default_langcode']); | |
91 if (is_array($default_language)) { | |
92 return $default_language; | |
93 } | |
94 return FALSE; | |
95 } | |
96 | |
97 } |