getDefinitions($site)) > 0; } public function getUncachedSettings(Site $site): SiteSettings { // create a fresh Settings instance instead of using // $site->getSettings() which may have been loaded from cache return $this->siteSettingsFactory->createSettings( $site->getSets(), $site->getIdentifier(), $site->getRawConfiguration()['settings'] ?? [], ); } public function getSetSettings(Site $site): SettingsInterface { return $this->siteSettingsFactory->createSettings($site->getSets()); } public function getLocalSettings(Site $site): SiteSettings { $settings = $this->siteSettingsFactory->createSettings( $site->getSets(), $site->getIdentifier(), $site->getRawConfiguration()['settings'] ?? [], ); $setSettings = $this->getSetSettings($site); $localSettings = []; foreach ($settings->getIdentifiers() as $key) { $value = $settings->get($key); if ($setSettings->has($key) && $value === $setSettings->get($key)) { continue; } $localSettings[$key] = $value; } return SiteSettings::create(new Settings($localSettings)); } public function computeSettingsDiff(Site $site, SettingsInterface $newSettings, bool $minify = true): SettingsDiff { // Settings from sets only – setting values without site-local config/sites/*/settings.yaml applied $defaultSettings = $minify ? $this->siteSettingsFactory->createSettings($site->getSets(), null) : null; // Settings from config/sites/*/settings.yaml only (our persistence target) $localSettings = $this->siteSettingsFactory->loadLocalSettings($site->getIdentifier()) ?? $site->getRawConfiguration()['settings'] ?? []; return SettingsDiff::create( $localSettings, $newSettings, $defaultSettings, ); } public function writeSettings(Site $site, array $settings): void { try { $this->siteWriter->writeSettings($site->getIdentifier(), $settings); } catch (SiteConfigurationWriteException $e) { $flashMessage = new FlashMessage($e->getMessage(), '', ContextualFeedbackSeverity::ERROR, true); $defaultFlashMessageQueue = $this->flashMessageService->getMessageQueueByIdentifier(); $defaultFlashMessageQueue->enqueue($flashMessage); } // SiteWriter currently does not invalidate the code cache, see #103804 $this->codeCache->flush(); } /** * @return array */ public function getDefinitions(Site $site): array { $sets = $this->setRegistry->getSets(...$site->getSets()); $definitions = []; foreach ($sets as $set) { foreach ($set->settingsDefinitions as $settingDefinition) { $definitions[$settingDefinition->key] = $settingDefinition; } } return $definitions; } public function createSettingsFromFormData(Site $site, array $settingsMap): SettingsInterface { return $this->settingsFactory->createSettingsFromFormData($settingsMap, $this->getDefinitions($site)); } }