PluginProbe
The Innovative Form Builder – IvyForms / 1.5.1
The Innovative Form Builder – IvyForms v1.5.1
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
← All changes | backend/src/Services/Settings/SettingsService.php +55 -22 0.8 → 1.5.1 View file →
@@ -5,13 +5,8 @@
5 5 */
6 6
7 7 namespace IvyForms\Services\Settings;
8 8
9 -// phpcs:disable PSR1.Files.SideEffects
10 -if (!defined('ABSPATH')) {
11 - exit; // Exit if accessed directly
12 -}
13 -
14 9 /**
15 10 * Class SettingsService
16 11 *
17 12 * @package IvyForms\Services\Settings
@@ -37,9 +32,39 @@
37 32 */
38 33 public function __construct()
39 34 {
40 35 $this->settingsCache = json_decode(get_option('ivyforms_settings'), true);
36 + if (!is_array($this->settingsCache)) {
37 + $this->settingsCache = [];
38 + }
41 39
40 + $this->refreshWordPressSettingsCache();
41 + }
42 +
43 + /**
44 + * @return array<string, mixed>
45 + */
46 + private function readStoredSettings(): array
47 + {
48 + $stored = json_decode((string) get_option('ivyforms_settings'), true);
49 +
50 + return is_array($stored) ? $stored : [];
51 + }
52 +
53 + /**
54 + * @param array<string, mixed> $stored
55 + */
56 + private function writeStoredSettings(array $stored): void
57 + {
58 + update_option('ivyforms_settings', json_encode($stored));
59 + }
60 +
61 + private function refreshWordPressSettingsCache(): void
62 + {
63 + if (!isset($this->settingsCache['wordpress']) || !is_array($this->settingsCache['wordpress'])) {
64 + $this->settingsCache['wordpress'] = [];
65 + }
66 +
42 67 foreach (self::$wpSettings as $setting => $wpSetting) {
43 68 $this->settingsCache['wordpress'][$setting] = get_option($wpSetting);
44 69 }
45 70 }
@@ -119,15 +144,25 @@
119 144 * @return void
120 145 */
121 146 public function setSetting(string $settingCategoryKey, string $settingKey, $settingValue)
122 147 {
123 - $this->settingsCache[$settingCategoryKey][$settingKey] = $settingValue;
148 + if ($settingCategoryKey === 'integrations' && is_array($settingValue)) {
149 + $existing = $this->getSetting($settingCategoryKey, $settingKey);
150 + if (is_array($existing)) {
151 + $settingValue = array_merge($existing, $settingValue);
152 + }
153 + }
124 154
125 - $settingsCopy = $this->settingsCache;
155 + $stored = $this->readStoredSettings();
126 156
127 - unset($settingsCopy['wordpress']);
157 + if (!isset($stored[$settingCategoryKey]) || !is_array($stored[$settingCategoryKey])) {
158 + $stored[$settingCategoryKey] = [];
159 + }
128 160
129 - update_option('ivyforms_settings', json_encode($settingsCopy));
161 + $stored[$settingCategoryKey][$settingKey] = $settingValue;
162 + $this->settingsCache = $stored;
163 + $this->refreshWordPressSettingsCache();
164 + $this->writeStoredSettings($stored);
130 165 }
131 166
132 167 /**
133 168 * @param string $settingCategoryKey
@@ -136,15 +171,13 @@
136 171 * @return void
137 172 */
138 173 public function setCategorySettings(string $settingCategoryKey, $settingValue)
139 174 {
140 - $this->settingsCache[$settingCategoryKey] = $settingValue;
141 -
142 - $settingsCopy = $this->settingsCache;
143 -
144 - unset($settingsCopy['wordpress']);
145 -
146 - update_option('ivyforms_settings', json_encode($settingsCopy));
175 + $stored = $this->readStoredSettings();
176 + $stored[$settingCategoryKey] = $settingValue;
177 + $this->settingsCache = $stored;
178 + $this->refreshWordPressSettingsCache();
179 + $this->writeStoredSettings($stored);
147 180 }
148 181
149 182 /**
150 183 * Get all settings
@@ -154,15 +187,15 @@
154 187 *
155 188 */
156 189 public function setAllSettings(array $settings): void
157 190 {
191 + $stored = $this->readStoredSettings();
192 +
158 193 foreach ($settings as $settingCategoryKey => $settingValues) {
159 - $this->settingsCache[$settingCategoryKey] = $settingValues;
194 + $stored[$settingCategoryKey] = $settingValues;
160 195 }
161 196
162 - $settingsCopy = $this->settingsCache;
163 -
164 - unset($settingsCopy['wordpress']);
165 -
166 - update_option('ivyforms_settings', json_encode($settingsCopy));
197 + $this->settingsCache = $stored;
198 + $this->refreshWordPressSettingsCache();
199 + $this->writeStoredSettings($stored);
167 200 }
168 201 }