PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.28
ووسلام – همگام سازی ووکامرس و باسلام v1.10.28
1.10.28 1.1.26 1.10.27 1.10.24 1.10.25 1.10.23 1.10.22 1.10.21 1.10.19 1.10.20 1.10.18 1.10.17 1.10.15 1.10.14 1.10.13 1.10.12 1.10.10 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 All 61 releases
sync-basalam / includes / Admin / Settings / SettingsManager.php

SettingsManager.php in ووسلام – همگام سازی ووکامرس و باسلام 1.10.28, at includes/Admin/Settings/SettingsManager.php

113 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SyncBasalam\Admin\Settings;
4
5 use SyncBasalam\Services\SystemResourceMonitor;
6
7 defined('ABSPATH') || exit;
8
9 class SettingsManager
10 {
11 public static function getSettings($setting = null)
12 {
13 $settings = (array) get_option('sync_basalam_settings', SettingsConfig::getDefaultSettings());
14 $savedSettings = $settings;
15 $settings = self::normalizeProductSyncSettings($settings);
16
17 if ($setting == null || !array_key_exists($setting, $settings)) {
18 $defaultSettings = SettingsConfig::getDefaultSettings();
19
20 foreach ($defaultSettings as $key => $value) {
21 if (!array_key_exists($key, $settings)) {
22 $settings[$key] = $value;
23 }
24 }
25 }
26
27 if ($setting === null || $settings !== $savedSettings) update_option('sync_basalam_settings', $settings);
28
29 if ($setting === null) return $settings;
30
31 return $settings[$setting] ?? null;
32 }
33
34 public static function updateSettings($data)
35 {
36 $settings = self::sanitizeSettings($data);
37 update_option('sync_basalam_settings', $settings);
38 }
39
40 public static function sanitizeSettings($input)
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
49 $input = array_merge(self::getSettings() ?: [], $input);
50 $input = self::normalizeProductSyncSettings($input);
51
52 $input[SettingsConfig::DEFAULT_WEIGHT] = absint($input[SettingsConfig::DEFAULT_WEIGHT]);
53 $input[SettingsConfig::DEFAULT_PREPARATION] = absint($input[SettingsConfig::DEFAULT_PREPARATION]);
54 $input[SettingsConfig::DISCOUNT_REDUCTION_PERCENT] = min(100, absint($input[SettingsConfig::DISCOUNT_REDUCTION_PERCENT]));
55 $interval = absint($input[SettingsConfig::AUTO_FULL_UPDATE_INTERVAL] ?? 0);
56 $input[SettingsConfig::AUTO_FULL_UPDATE_INTERVAL] = in_array($interval, [24, 48], true) ? $interval : 0;
57
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;
84 }
85
86 public static function isProductUpdateSelectionValid(?array $settings = null): bool
87 {
88 $settings = array_merge(self::getSettings() ?: [], $settings ?: []);
89
90 if (($settings[SettingsConfig::SYNC_PRODUCT_FIELDS] ?? 'all') !== 'custom') return true;
91
92 foreach (SettingsConfig::CUSTOM_PRODUCT_UPDATE_FIELDS as $field) {
93 $value = $settings[$field] ?? null;
94 if ($value === true || $value === 1 || $value === '1') return true;
95 }
96
97 return false;
98 }
99
100 public static function getEffectiveTasksPerMinute()
101 {
102 $isAuto = self::getSettings(SettingsConfig::TASKS_PER_MINUTE_AUTO) == 'true';
103
104 if ($isAuto) {
105 $monitor = syncBasalamContainer()->get(SystemResourceMonitor::class);
106
107 return $monitor->calculateOptimalTasksPerMinute();
108 } else {
109 return self::getSettings(SettingsConfig::TASKS_PER_MINUTE) ?? 10;
110 }
111 }
112 }
113