| @@ -10,8 +10,10 @@ | ||
| 10 | 10 | { |
| 11 | 11 | public static function getSettings($setting = null) |
| 12 | 12 | { |
| 13 | 13 | $settings = (array) get_option('sync_basalam_settings', SettingsConfig::getDefaultSettings()); |
| 14 | + $savedSettings = $settings; | |
| 15 | + $settings = self::normalizeProductSyncSettings($settings); | |
| 14 | 16 | |
| 15 | 17 | if ($setting == null || !array_key_exists($setting, $settings)) { |
| 16 | 18 | $defaultSettings = SettingsConfig::getDefaultSettings(); |
| 17 | 19 | |
| @@ -19,11 +21,11 @@ | ||
| 19 | 21 | if (!array_key_exists($key, $settings)) { |
| 20 | 22 | $settings[$key] = $value; |
| 21 | 23 | } |
| 22 | 24 | } |
| 25 | + } | |
| 23 | 26 | |
| 24 | - update_option('sync_basalam_settings', $settings); | |
| 25 | - } | |
| 27 | + if ($setting === null || $settings !== $savedSettings) update_option('sync_basalam_settings', $settings); | |
| 26 | 28 | |
| 27 | 29 | if ($setting === null) return $settings; |
| 28 | 30 | |
| 29 | 31 | return $settings[$setting] ?? null; |
| @@ -36,9 +38,17 @@ | ||
| 36 | 38 | } |
| 37 | 39 | |
| 38 | 40 | public static function sanitizeSettings($input) |
| 39 | 41 | { |
| 42 | + // Older forms and integrations can still toggle both operations together. | |
| 43 | + if (array_key_exists(SettingsConfig::SYNC_STATUS_PRODUCT, $input)) { | |
| 44 | + foreach ([SettingsConfig::SYNC_STATUS_PRODUCT_CREATE, SettingsConfig::SYNC_STATUS_PRODUCT_UPDATE] as $key) { | |
| 45 | + if (!array_key_exists($key, $input)) $input[$key] = $input[SettingsConfig::SYNC_STATUS_PRODUCT]; | |
| 46 | + } | |
| 47 | + } | |
| 48 | + | |
| 40 | 49 | $input = array_merge(self::getSettings() ?: [], $input); |
| 50 | + $input = self::normalizeProductSyncSettings($input); | |
| 41 | 51 | |
| 42 | 52 | $input[SettingsConfig::DEFAULT_WEIGHT] = absint($input[SettingsConfig::DEFAULT_WEIGHT]); |
| 43 | 53 | $input[SettingsConfig::DEFAULT_PREPARATION] = absint($input[SettingsConfig::DEFAULT_PREPARATION]); |
| 44 | 54 | $input[SettingsConfig::DISCOUNT_REDUCTION_PERCENT] = min(100, absint($input[SettingsConfig::DISCOUNT_REDUCTION_PERCENT])); |
| @@ -45,8 +55,33 @@ | ||
| 45 | 55 | $interval = absint($input[SettingsConfig::AUTO_FULL_UPDATE_INTERVAL] ?? 0); |
| 46 | 56 | $input[SettingsConfig::AUTO_FULL_UPDATE_INTERVAL] = in_array($interval, [24, 48], true) ? $interval : 0; |
| 47 | 57 | |
| 48 | 58 | return $input; |
| 59 | + } | |
| 60 | + | |
| 61 | + public static function isProductCreationSyncEnabled(): bool | |
| 62 | + { | |
| 63 | + return (bool) self::getSettings(SettingsConfig::SYNC_STATUS_PRODUCT_CREATE); | |
| 64 | + } | |
| 65 | + | |
| 66 | + public static function isProductUpdateSyncEnabled(): bool | |
| 67 | + { | |
| 68 | + return (bool) self::getSettings(SettingsConfig::SYNC_STATUS_PRODUCT_UPDATE); | |
| 69 | + } | |
| 70 | + | |
| 71 | + private static function normalizeProductSyncSettings(array $settings): array | |
| 72 | + { | |
| 73 | + $legacyStatus = $settings[SettingsConfig::SYNC_STATUS_PRODUCT] ?? false; | |
| 74 | + | |
| 75 | + foreach ([SettingsConfig::SYNC_STATUS_PRODUCT_CREATE, SettingsConfig::SYNC_STATUS_PRODUCT_UPDATE] as $key) { | |
| 76 | + $settings[$key] = in_array($settings[$key] ?? $legacyStatus, [true, 1, '1', 'true', 'yes', 'on'], true); | |
| 77 | + } | |
| 78 | + | |
| 79 | + // Keep the legacy status available to integrations as the aggregate status. | |
| 80 | + $settings[SettingsConfig::SYNC_STATUS_PRODUCT] = $settings[SettingsConfig::SYNC_STATUS_PRODUCT_CREATE] | |
| 81 | + || $settings[SettingsConfig::SYNC_STATUS_PRODUCT_UPDATE]; | |
| 82 | + | |
| 83 | + return $settings; | |
| 49 | 84 | } |
| 50 | 85 | |
| 51 | 86 | public static function isProductUpdateSelectionValid(?array $settings = null): bool |
| 52 | 87 | { |