preferencesFile = sprintf( '%s/%s/config.ini', $this->getStoreConfig()->location, strtolower($this->getUser()->getUsername()) ); } /** * Load preferences from source * * @return array * * @throws NotReadableError When the INI file of the user exists and is not readable */ public function load() { if (file_exists($this->preferencesFile)) { if (! is_readable($this->preferencesFile)) { throw new NotReadableError( 'Preferences INI file %s for user %s is not readable', $this->preferencesFile, $this->getUser()->getUsername() ); } else { $this->preferences = IniParser::parseIniFile($this->preferencesFile)->toArray(); } } return $this->preferences; } /** * Save the given preferences * * @param Preferences $preferences The preferences to save */ public function save(Preferences $preferences) { $this->preferences = $preferences->toArray(); // TODO: Elaborate whether we need to patch the contents // $preferences = $preferences->toArray(); // $this->update(array_diff_assoc($preferences, $this->preferences)); // $this->delete(array_keys(array_diff_key($this->preferences, $preferences))); $this->write(); } /** * Write the preferences * * @throws NotWritableError In case the INI file cannot be written */ public function write() { Config::fromArray($this->preferences)->saveIni($this->preferencesFile); } /** * Add or update the given preferences * * @param array $preferences The preferences to set */ protected function update(array $preferences) { foreach ($preferences as $key => $value) { $this->preferences[$key] = $value; } } /** * Delete the given preferences by name * * @param array $preferenceKeys The preference names to delete */ protected function delete(array $preferenceKeys) { foreach ($preferenceKeys as $key) { unset($this->preferences[$key]); } } }