Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / language / src / LanguageServiceProvider.php
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 }