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 / SettingsPageHandler.php

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

133 lines 4.8 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\Queue\Tasks\Debug;
6 use SyncBasalam\Actions\Controller\ProductActions\CancelDebug;
7 use SyncBasalam\Services\WebhookService;
8 use SyncBasalam\Services\VendorInfoService;
9 use SyncBasalam\Services\ScheduledProductSync;
10
11 defined('ABSPATH') || exit;
12
13 class SettingsPageHandler
14 {
15 private const VALIDATION_ERROR_TRANSIENT_PREFIX = 'sync_basalam_settings_validation_error_';
16
17 public static function saveSettings()
18 {
19 $data = isset($_POST['sync_basalam_settings']) ? array_map('sanitize_text_field', wp_unslash($_POST['sync_basalam_settings'])) : [];
20 $toggleProductSync = !empty($_POST['sync_basalam_toggle_product']);
21
22 if ($toggleProductSync) {
23 $nextStatus = !SettingsManager::getSettings(SettingsConfig::SYNC_STATUS_PRODUCT);
24 $nextValue = $nextStatus ? '1' : '0';
25 $data[SettingsConfig::SYNC_STATUS_PRODUCT] = $nextValue;
26 $data[SettingsConfig::SYNC_STATUS_PRODUCT_CREATE] = $nextValue;
27 $data[SettingsConfig::SYNC_STATUS_PRODUCT_UPDATE] = $nextValue;
28 }
29
30 if ($data) {
31 $syncToggleSubmitted = array_key_exists(SettingsConfig::SYNC_STATUS_PRODUCT, $data)
32 || array_key_exists(SettingsConfig::SYNC_STATUS_PRODUCT_CREATE, $data)
33 || array_key_exists(SettingsConfig::SYNC_STATUS_PRODUCT_UPDATE, $data);
34 $candidateSettings = SettingsManager::sanitizeSettings($data);
35
36 if (
37 (!$syncToggleSubmitted || $candidateSettings[SettingsConfig::SYNC_STATUS_PRODUCT_UPDATE])
38 && !SettingsManager::isProductUpdateSelectionValid($data)
39 ) {
40 self::pushValidationError(SettingsConfig::CUSTOM_PRODUCT_UPDATE_REQUIRED_MESSAGE);
41 return false;
42 }
43
44 SettingsManager::updateSettings($data);
45
46 if (array_key_exists(SettingsConfig::AUTO_FULL_UPDATE_INTERVAL, $data)) {
47 (new ScheduledProductSync())->ensureScheduled();
48 }
49
50 if (array_key_exists(SettingsConfig::DEVELOPER_MODE, $data)) {
51 if ($data[SettingsConfig::DEVELOPER_MODE] === 'true') {
52 $debugTask = new Debug();
53 $debugTask->schedule();
54 } else {
55 (new CancelDebug())();
56 }
57 }
58 }
59
60 if (isset($_POST['get_token']) && $_POST['get_token'] == 1) {
61 self::redirectToOAuth();
62 }
63
64 return true;
65 }
66
67 public static function pullValidationError(): string
68 {
69 $userId = get_current_user_id();
70 if ($userId <= 0) return '';
71
72 $key = self::VALIDATION_ERROR_TRANSIENT_PREFIX . $userId;
73 $message = get_transient($key);
74 delete_transient($key);
75
76 return is_string($message) ? $message : '';
77 }
78
79 private static function pushValidationError(string $message): void
80 {
81 $userId = get_current_user_id();
82 if ($userId <= 0) return;
83
84 set_transient(
85 self::VALIDATION_ERROR_TRANSIENT_PREFIX . $userId,
86 wp_strip_all_tags($message),
87 2 * MINUTE_IN_SECONDS
88 );
89 }
90
91 private static function redirectToOAuth()
92 {
93 $OAuthManger = new OAuthManager();
94 $oauthUrls = $OAuthManger->getOAuthUrls();
95
96 // Mark this authorization as started by the current (authenticated) admin
97 // so the OAuth callback can reject forged requests. This runs only after
98 // the nonce-protected settings POST, so it cannot be triggered cross-site.
99 if (! OAuthManager::issueOauthState()) {
100 wp_die(
101 esc_html__('ا�
102 کان شروع فرایند دریافت دسترسی وجود ندارد. لطفاً دوباره تلاش کنید.', 'sync-basalam'),
103 esc_html__('خطای دریافت دسترسی', 'sync-basalam'),
104 ['response' => 500]
105 );
106 }
107
108 wp_redirect($oauthUrls['url_req_token']); // phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- Intentional external/user-provided redirect.
109 exit();
110 }
111
112 public static function handleOauthCallback()
113 {
114 $oauthSaved = OAuthManager::saveOauthData();
115
116 if ($oauthSaved) {
117 $webhookService = new WebhookService();
118 $webhookService->setupWebhook();
119 $vendorInfoService = new VendorInfoService();
120 $vendorInfoService->FetchVendorInfo();
121 }
122
123 $onboardingCompleted = get_option('sync_basalam_onboarding_completed');
124
125 if (!$onboardingCompleted) {
126 wp_safe_redirect(admin_url('admin.php?page=basalam-onboarding&step=3'));
127 } else {
128 wp_safe_redirect(admin_url('admin.php?page=sync_basalam'));
129 }
130 exit();
131 }
132 }
133