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