defaultSettingsMerged) { $this->mergeDefaults(); } return $this->settings; } /** * {@inheritdoc} */ public function getSetting($key) { // Merge defaults if we have no value for the key. if (!$this->defaultSettingsMerged && !array_key_exists($key, $this->settings)) { $this->mergeDefaults(); } return $this->settings[$key] ?? NULL; } /** * Merges default settings values into $settings. */ protected function mergeDefaults() { $this->settings += static::defaultSettings(); $this->defaultSettingsMerged = TRUE; } /** * {@inheritdoc} */ public function setSettings(array $settings) { $this->settings = $settings; $this->defaultSettingsMerged = FALSE; return $this; } /** * {@inheritdoc} */ public function setSetting($key, $value) { $this->settings[$key] = $value; return $this; } /** * {@inheritdoc} */ public function getThirdPartySettings($module = NULL) { if ($module) { return $this->thirdPartySettings[$module] ?? []; } return $this->thirdPartySettings; } /** * {@inheritdoc} */ public function getThirdPartySetting($module, $key, $default = NULL) { return $this->thirdPartySettings[$module][$key] ?? $default; } /** * {@inheritdoc} */ public function setThirdPartySetting($module, $key, $value) { $this->thirdPartySettings[$module][$key] = $value; return $this; } /** * {@inheritdoc} */ public function unsetThirdPartySetting($module, $key) { unset($this->thirdPartySettings[$module][$key]); // If the third party is no longer storing any information, completely // remove the array holding the settings for this module. if (empty($this->thirdPartySettings[$module])) { unset($this->thirdPartySettings[$module]); } return $this; } /** * {@inheritdoc} */ public function getThirdPartyProviders() { return array_keys($this->thirdPartySettings); } /** * {@inheritdoc} */ public function calculateDependencies() { if (!empty($this->thirdPartySettings)) { // Create dependencies on any modules providing third party settings. return [ 'module' => array_keys($this->thirdPartySettings), ]; } return []; } /** * {@inheritdoc} */ public function onDependencyRemoval(array $dependencies) { $changed = FALSE; if (!empty($this->thirdPartySettings) && !empty($dependencies['module'])) { $old_count = count($this->thirdPartySettings); $this->thirdPartySettings = array_diff_key($this->thirdPartySettings, array_flip($dependencies['module'])); $changed = $old_count != count($this->thirdPartySettings); } return $changed; } }