configFactory = $config_factory; $this->currentUser = $current_user; } /** * Sets the default time zone. */ public function setDefaultTimeZone() { if ($time_zone = $this->getTimeZone()) { date_default_timezone_set($time_zone); } } /** * Updates the default time zone when time zone config changes. * * @param \Drupal\Core\Config\ConfigCrudEvent $event * The config crud event. */ public function onConfigSave(ConfigCrudEvent $event) { $saved_config = $event->getConfig(); if ($saved_config->getName() === 'system.date' && ($event->isChanged('timezone.default') || $event->isChanged('timezone.user.configurable'))) { $this->setDefaultTimeZone(); } } /** * {@inheritdoc} */ public static function getSubscribedEvents(): array { $events[ConfigEvents::SAVE][] = ['onConfigSave', 0]; // The priority for this must run directly after the authentication // subscriber. $events[KernelEvents::REQUEST][] = ['setDefaultTimeZone', 299]; $events[AccountEvents::SET_USER][] = ['setDefaultTimeZone']; return $events; } /** * Gets the time zone based on site and user configuration. * * @return string|null * The time zone, or NULL if nothing is set. */ protected function getTimeZone() { $config = $this->configFactory->get('system.date'); if ($config->get('timezone.user.configurable') && $this->currentUser->isAuthenticated() && $this->currentUser->getTimezone()) { return $this->currentUser->getTimeZone(); } elseif ($default_timezone = $config->get('timezone.default')) { return $default_timezone; } return NULL; } }