PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.3
ووسلام – همگام سازی ووکامرس و باسلام v1.10.3
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 1.10.1 1.10.0 1.9.2 1.9.1 1.9.0 1.8.8 1.8.5 1.8.6 All 53 releases
sync-basalam / includes / Admin / Components / SettingPageComponents.php

SettingPageComponents.php in ووسلام – همگام سازی ووکامرس و باسلام 1.10.3, at includes/Admin/Components/SettingPageComponents.php

465 lines 25.5 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\Components;
4
5 use SyncBasalam\Admin\Settings\SettingsConfig;
6 use SyncBasalam\Utilities\PriceAdjustment;
7
8 defined('ABSPATH') || exit;
9
10 class SettingPageComponents
11 {
12 public static function renderDeleteAccess()
13 {
14 echo '<input type="hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::TOKEN) . ']" value="">'
15 . '<input type="hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::REFRESH_TOKEN) . ']" value="">';
16 }
17
18 public static function syncStatusProduct()
19 {
20 $value = syncBasalamSettings()->getSettings(SettingsConfig::SYNC_STATUS_PRODUCT) == true ? false : true;
21 echo '<input type="hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::SYNC_STATUS_PRODUCT) . ']" value="' . esc_attr($value) . '">';
22 }
23
24 public static function syncStatusOrder()
25 {
26 $value = syncBasalamSettings()->getSettings(SettingsConfig::SYNC_STATUS_ORDER) == true ? false : true;
27 echo '<input type="hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::SYNC_STATUS_ORDER) . ']" value="' . esc_attr($value) . '">';
28 }
29
30 public static function renderAutoConfirmOrderButton()
31 {
32 $value = syncBasalamSettings()->getSettings(SettingsConfig::AUTO_CONFIRM_ORDER) == true ? false : true;
33 echo '<input type="hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::AUTO_CONFIRM_ORDER) . ']" value="' . esc_attr($value) . '">';
34 }
35
36 public static function renderDefaultWeight()
37 {
38 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DEFAULT_WEIGHT);
39 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::DEFAULT_WEIGHT) . ']" min="50" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p" required>';
40 }
41
42 public static function renderPackageWeight()
43 {
44 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DEFAULT_PACKAGE_WEIGHT);
45 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::DEFAULT_PACKAGE_WEIGHT) . ']" min="1" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p" required>';
46 }
47
48 public static function renderDefaultPreparation()
49 {
50 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DEFAULT_PREPARATION);
51 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::DEFAULT_PREPARATION) . ']" min="0" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p" required>';
52 }
53
54 public static function renderCapPreparationToCategoryMax()
55 {
56 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::CAP_PREPARATION_TO_CATEGORY_MAX);
57 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::CAP_PREPARATION_TO_CATEGORY_MAX) . ']">'
58 . '<option value="yes"' . selected($current_value, 'yes', false) . '>کاهش به حداکثر �
59 جاز</option>'
60 . '<option value="no"' . selected($current_value, 'no', false) . '>عد�
61 ارسال</option>'
62 . '</select>';
63 }
64
65 public static function renderDefaultStockQuantity()
66 {
67 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DEFAULT_STOCK_QUANTITY);
68 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::DEFAULT_STOCK_QUANTITY) . ']" min="0" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p" required>';
69 }
70
71 public static function renderSafeStock()
72 {
73 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::SAFE_STOCK);
74 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::SAFE_STOCK) . ']" min="0" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p" required>';
75 }
76
77 public static function renderVariableProductStockSource()
78 {
79 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::VARIABLE_PRODUCT_STOCK_SOURCE);
80
81 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::VARIABLE_PRODUCT_STOCK_SOURCE) . ']">'
82 . '<option value="variation"' . selected($current_value, 'variation', false) . '>�
83 وجودی �
84 تغیرها</option>'
85 . '<option value="product"' . selected($current_value, 'product', false) . '>�
86 وجودی والد</option>'
87 . '</select>';
88 }
89
90 public static function renderPriceChange()
91 {
92 static $priceChangeControlIndex = 0;
93 $priceChangeControlIndex++;
94
95 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::PRICE_CHANGE_VALUE);
96 $is_commission = PriceAdjustment::isCommission($current_value);
97 $is_checked = $is_commission ? 'checked' : '';
98 $input_disabled = $is_commission ? 'disabled' : '';
99 $input_value = $is_commission || !is_numeric($current_value) ? '' : number_format((int) $current_value);
100 $checkbox_id = 'toggle-percentage-' . $priceChangeControlIndex;
101 $hidden_input_id = 'price-change-value-' . $priceChangeControlIndex;
102 $text_input_id = 'price-change-input-' . $priceChangeControlIndex;
103
104 echo '<div class="basalam-input-container">';
105 echo '<input type="text" id="' . esc_attr($text_input_id) . '" data-role="price-change-input" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRICE_CHANGE_VALUE) . ']" value="' . esc_attr($input_value) . '" class="basalam-input basalam-p percentage-input" inputmode="text" autocomplete="off" ' . esc_attr($input_disabled) . ' required>';
106 echo '<span class="percentage-unit basalam-p basalam-min-width-0 basalam-font-13">' . esc_html(PriceAdjustment::unitLabel($current_value)) . '</span>';
107 echo '</div>';
108
109 echo '<div class="basalam-flex-end-gap-4 basalam-margin-top-8">';
110 echo '<input type="checkbox" id="' . esc_attr($checkbox_id) . '" class="toggle-percentage" name="toggle_percentage" ' . esc_attr($is_checked) . '>';
111 echo '<label class="basalam-font-10" for="' . esc_attr($checkbox_id) . '">کار�
112 زد دسته‌بندی</label>';
113 echo '</div>';
114
115 echo '<input type="hidden" id="' . esc_attr($hidden_input_id) . '" data-role="price-change-hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRICE_CHANGE_VALUE) . ']" value="' . esc_attr($current_value) . '">';
116 }
117
118 public static function renderDefaultRound()
119 {
120 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::ROUND_PRICE);
121 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::ROUND_PRICE) . ']">'
122 . '<option value="none"' . selected($current_value, "none", false) . '>رند نکردن</option>'
123 . '<option value="up"' . selected($current_value, "up", false) . '>بالا</option>'
124 . '<option value="down"' . selected($current_value, "down", false) . '>پایین</option>'
125 . '</select>';
126 }
127
128 public static function renderSyncProduct()
129 {
130 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::SYNC_PRODUCT_FIELDS);
131 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::SYNC_PRODUCT_FIELDS) . ']" onchange="BasalamToggleCustomFields(this.value)" id="basalam-sync-type">'
132 . '<option value="all"' . selected($current_value, "all", false) . '>ه�
133 ه اطلاعات</option>'
134 . '<option value="price_stock"' . selected($current_value, "price_stock", false) . '>فقط قی�
135 ت و �
136 وجودی</option>'
137 . '<option value="custom"' . selected($current_value, "custom", false) . '>سفارشی</option>'
138 . '</select>';
139 }
140
141 public static function renderWholesaleProducts()
142 {
143 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::ALL_PRODUCTS_WHOLESALE);
144 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::ALL_PRODUCTS_WHOLESALE) . ']">'
145 . '<option value="none"' . selected($current_value, "none", false) . '>هیچ یا برخی �
146 حصولات ع�
147 ده</option>'
148 . '<option value="all"' . selected($current_value, "all", false) . '>ه�
149 ه �
150 حصولات ع�
151 ده</option>'
152 . '</select>';
153 }
154
155 public static function renderAttrAddToDesc()
156 {
157 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::ADD_ATTR_TO_DESC_PRODUCT);
158 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::ADD_ATTR_TO_DESC_PRODUCT) . ']">'
159 . '<option value="no"' . selected($current_value, 'no', false) . '>اضافه نشود</option>'
160 . '<option value="yes"' . selected($current_value, 'yes', false) . '>اضافه شود</option>'
161 . '</select>';
162 }
163
164 public static function renderOrderStatus()
165 {
166 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::ORDER_STATUES_TYPE);
167 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::ORDER_STATUES_TYPE) . ']">'
168 . '<option value="woosalam_statuses"' . selected($current_value, 'woosalam_statuses', false) . '>وضعیت های ووسلا�
169 </option>'
170 . '<option value="woocommerce_statuses"' . selected($current_value, 'woocommerce_statuses', false) . '>وضعیت های ووکا�
171 رس</option>'
172 . '</select>';
173 }
174
175 public static function renderShortAttrAddToDesc()
176 {
177 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::ADD_SHORT_DESC_TO_DESC_PRODUCT);
178 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::ADD_SHORT_DESC_TO_DESC_PRODUCT) . ']">'
179 . '<option value="no"' . selected($current_value, 'no', false) . '>اضافه نشود</option>'
180 . '<option value="yes"' . selected($current_value, 'yes', false) . '>اضافه شود</option>'
181 . '</select>';
182 }
183
184 public static function renderProductPrice()
185 {
186 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::PRODUCT_PRICE_FIELD);
187 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRODUCT_PRICE_FIELD) . ']">'
188 . '<option value="original_price"' . selected($current_value, 'original_price', false) . '>قی�
189 ت اصلی</option>'
190 . '<option value="sale_price"' . selected($current_value, 'sale_price', false) . '>قی�
191 ت حراجی (تک قی�
192 ت)</option>'
193 . '<option value="sale_strikethrough_price"' . selected($current_value, 'sale_strikethrough_price', false) . '>قی�
194 ت حراجی (خط خورده)</option>'
195 . '</select>';
196 }
197
198 public static function renderProductDiscountDuration()
199 {
200 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DISCOUNT_DURATION);
201
202 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::DISCOUNT_DURATION) . ']" min="1" max="90" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p percentage-input" required>';
203 }
204
205 public static function renderDiscountReductionPercent()
206 {
207 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DISCOUNT_REDUCTION_PERCENT);
208
209 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::DISCOUNT_REDUCTION_PERCENT) . ']" min="0" max="100" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p percentage-input" required>';
210 }
211
212 public static function renderTasksPerMinute()
213 {
214 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::TASKS_PER_MINUTE);
215 $is_auto = syncBasalamSettings()->getSettings(SettingsConfig::TASKS_PER_MINUTE_AUTO) == 'true';
216 $disabled = $is_auto ? 'disabled' : '';
217
218 echo '<input type="number" name="sync_basalam_settings[' . esc_attr(SettingsConfig::TASKS_PER_MINUTE) . ']" min="1" max="60" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p basalam-tasks-manual-input" ' . esc_attr($disabled) . ' required>';
219 }
220
221 public static function renderTasksPerMinuteAutoToggle()
222 {
223 $is_auto = syncBasalamSettings()->getSettings(SettingsConfig::TASKS_PER_MINUTE_AUTO) == 'true';
224 $checked = $is_auto ? 'checked' : '';
225
226 echo '<label class="basalam-switch">';
227 echo '<input type="hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::TASKS_PER_MINUTE_AUTO) . ']" value="false">';
228 echo '<input type="checkbox" name="sync_basalam_settings[' . esc_attr(SettingsConfig::TASKS_PER_MINUTE_AUTO) . ']" value="true" ' . esc_attr($checked) . ' class="basalam-tasks-auto-toggle">';
229 echo '<span class="basalam-slider"></span>';
230 echo '</label>';
231 }
232
233 public static function renderTasksPerMinuteInfo()
234 {
235 $is_auto = syncBasalamSettings()->getSettings(SettingsConfig::TASKS_PER_MINUTE_AUTO) == 'true';
236 $display_style = $is_auto ? '' : 'display: none;';
237
238 $monitor = syncBasalamContainer()->get(\SyncBasalam\Services\SystemResourceMonitor::class);
239 $optimal = $monitor->calculateOptimalTasksPerMinute();
240
241 echo '<div class="basalam-p basalam-form-group-full" style="' . esc_attr($display_style) . '">';
242 echo '<div class="basalam-tasks-info basalam-tasks-info-container" data-initial-optimal="' . esc_attr($optimal) . '">';
243
244 echo '<div class="basalam-tasks-info-flex">';
245
246 echo '<div class="basalam-tasks-info-item">';
247 echo '<strong class="basalam-tasks-info-label">🚀 تعداد تسک های اجرایی در دقیقه: </strong>';
248 echo '<span class="basalam-tasks-info-value-primary" id="basalam-tasks-optimal-value">' . esc_html($optimal) . ' تسک در دقیقه</span>';
249 echo '</div>';
250
251 echo '</div>';
252
253 echo '</div>';
254 echo '</div>';
255 }
256
257 public static function renderPrefixProductTitle()
258 {
259 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::PRODUCT_PREFIX_TITLE);
260 echo '<input type="text" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRODUCT_PREFIX_TITLE) . ']" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p basalam-max-width-80 basalam-font-12">';
261 }
262
263 public static function renderSuffixProductTitle()
264 {
265 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::PRODUCT_SUFFIX_TITLE);
266 echo '<input type="text" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRODUCT_SUFFIX_TITLE) . ']" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p basalam-max-width-80 basalam-font-12">';
267 }
268
269 public static function renderAttributeSuffixEnabled()
270 {
271 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::PRODUCT_ATTRIBUTE_SUFFIX_ENABLED);
272 $checked = $current_value == 'yes' ? 'checked' : '';
273
274 echo '<label class="basalam-switch">';
275 echo '<input type="checkbox" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRODUCT_ATTRIBUTE_SUFFIX_ENABLED) . ']" value="yes" ' . esc_attr($checked) . ' class="basalam-attribute-suffix-toggle">';
276 echo '<span class="basalam-slider"></span>';
277 echo '</label>';
278 echo '<input type="hidden" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRODUCT_ATTRIBUTE_SUFFIX_ENABLED) . ']" value="no" class="basalam-attribute-suffix-hidden">';
279 }
280
281 public static function renderAttributeSuffixPriority()
282 {
283 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::PRODUCT_ATTRIBUTE_SUFFIX_PRIORITY);
284 $is_enabled = syncBasalamSettings()->getSettings(SettingsConfig::PRODUCT_ATTRIBUTE_SUFFIX_ENABLED) == 'yes';
285 $disabled = $is_enabled ? '' : 'disabled';
286
287 echo '<input type="text" name="sync_basalam_settings[' . esc_attr(SettingsConfig::PRODUCT_ATTRIBUTE_SUFFIX_PRIORITY) . ']" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p basalam-attribute-suffix-priority basalam-max-width-80 basalam-font-12" placeholder="�
288 ثال: ناشر" ' . esc_attr($disabled) . '>';
289 }
290
291 public static function renderMapOptionsProduct()
292 {
293 ?>
294 <div id="Basalam-map-option-form" class="basalam-flex-center-vertical" role="group" aria-label="تغییر نا�
295 ویژگی دسته بندی">
296 <?php wp_nonce_field('basalam_add_map_option_nonce', 'basalam_add_map_option_nonce', false); ?>
297 <label for="woo-option-name" class="basalam-p__small">نا�
298 ویژگی در ووکا�
299 رس</label>
300 <input type="text" class="basalam-input basalam-width-auto" id="woo-option-name" name="woo-option-name">
301 <label for="Basalam-option-name" class="basalam-p__small">نا�
302 ویژگی در باسلا�
303 </label>
304 <input type="text" class="basalam-input basalam-width-auto" id="Basalam-option-name" name="Basalam-option-name">
305 <button type="button" id="Basalam-map-option-submit" class="basalam-primary-button basalam-p basalam-button-auto">ذخیره</button>
306 </div>
307 <?php
308 }
309
310 public static function renderSyncProductFields()
311 {
312 echo '<div>';
313 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_NAME, 'نا�
314 '); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
315 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_PHOTOS, 'عکس'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
316 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_PRICE, 'قی�
317 ت'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
318 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_STOCK, '�
319 وجودی'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
320 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_WEIGHT, 'وزن'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
321 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_DESCRIPTION, 'توضیحات'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
322 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_ATTR, 'ویژگی ها'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
323 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_VIDEO, 'ویدیو'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
324 echo '</div>';
325 }
326
327 private static function renderSingleCheckbox($field_key, $label)
328 {
329 return '<label class="basalam-p sync-checkbox-label basalam-checkbox-label">'
330 . '<input type="hidden" name="sync_basalam_settings[' . esc_attr($field_key) . ']" value="">'
331 . '<input type="checkbox" name="sync_basalam_settings[' . esc_attr($field_key) . ']" value="1" '
332 . checked(syncBasalamSettings()->getSettings($field_key), true, false) . '>'
333 . esc_html($label)
334 . '</label>';
335 }
336
337 public static function renderDeveloperMode()
338 {
339 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DEVELOPER_MODE);
340 echo '<select name="sync_basalam_settings[' . esc_attr(SettingsConfig::DEVELOPER_MODE) . ']" class="basalam-select basalam-select-center" onchange="this.form.submit()">'
341 . '<option value="false"' . selected($current_value, "false", false) . '>غیرفعال</option>'
342 . '<option value="true"' . selected($current_value, "true", false) . '>فعال</option>'
343 . '</select>';
344 }
345
346 public static function renderCategoryOptionsMapping($data)
347 {
348 $delete_nonce = wp_create_nonce('basalam_delete_mapped_option_nonce');
349
350 echo '<div class="options_mapping_section" data-delete-nonce="' . esc_attr($delete_nonce) . '">';
351 echo '<p class="basalam-p">لیست ویژگی ها : </p>';
352 echo "<table class='basalam-table basalam-p'>";
353 echo '<thead><tr><th>نا�
354 ویژگی در ووکا�
355 رس</th><th>نا�
356 ویژگی در باسلا�
357 </th><th>ع�
358 لیات</th></tr></thead>';
359 echo '<tbody>';
360
361 if (!empty($data)) {
362 foreach ($data as $item) {
363 echo '<tr data-woo="' . esc_attr($item['woo_name']) . '" data-basalam="' . esc_attr($item['sync_basalam_name']) . '">';
364 echo '<td>' . esc_html($item['woo_name']) . '</td>';
365 echo '<td>' . esc_html($item['sync_basalam_name']) . '</td>';
366 echo '<td>
367 <button
368 type="button"
369 class="Basalam-delete-option basalam-primary-button basalam-button-auto"
370 data-_wpnonce="' . esc_attr($delete_nonce) . '">
371 حذف
372 </button>
373 </td>';
374 echo '</tr>';
375 }
376 }
377
378 echo '</tbody></table>';
379 echo '</div>';
380 }
381
382 public static function renderShippingMethod()
383 {
384 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::ORDER_SHIPPING_METHOD);
385
386 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::ORDER_SHIPPING_METHOD) . ']">';
387 echo '<option value="basalam"' . selected($current_value, 'basalam', false) . '>ح�
388 ل و نقل باسلا�
389 </option>';
390
391 // Get active WooCommerce shipping methods
392 if (class_exists('WC_Shipping')) {
393 $shipping_zones = \WC_Shipping_Zones::get_zones();
394 $unique_methods = [];
395
396 foreach ($shipping_zones as $zone) {
397 $zone_id = $zone['id'] ?? 0;
398 $shipping_zone = new \WC_Shipping_Zone($zone_id);
399 $methods = $shipping_zone->get_shipping_methods(true);
400
401 foreach ($methods as $method) {
402 $method_value = 'wc_' . $method->id;
403 $method_title = $method->get_title() ?: $method->get_method_title();
404
405 // Avoid duplicate methods
406 if (!isset($unique_methods[$method_value])) {
407 $unique_methods[$method_value] = $method_title;
408 }
409 }
410 }
411
412 // Render options
413 foreach ($unique_methods as $value => $title) {
414 echo '<option value="' . esc_attr($value) . '"' . selected($current_value, $value, false) . '>' . esc_html($title) . '</option>';
415 }
416 }
417
418 echo '</select>';
419 }
420
421 public static function renderCustomerPrefixName()
422 {
423 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::CUSTOMER_PREFIX_NAME);
424 echo '<input type="text" name="sync_basalam_settings[' . esc_attr(SettingsConfig::CUSTOMER_PREFIX_NAME) . ']" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p basalam-max-width-80 basalam-font-12" placeholder="�
425 ثال: آقای/خان�
426 ">';
427 }
428
429 public static function renderCustomerSuffixName()
430 {
431 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::CUSTOMER_SUFFIX_NAME);
432 echo '<input type="text" name="sync_basalam_settings[' . esc_attr(SettingsConfig::CUSTOMER_SUFFIX_NAME) . ']" value="' . esc_attr($current_value) . '" class="basalam-input basalam-p basalam-max-width-80 basalam-font-12" placeholder="�
433 ثال: عزیز">';
434 }
435
436 public static function renderVideoSource()
437 {
438 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::VIDEO_SOURCE) ?: 'inherit';
439
440 echo '<select class="basalam-select basalam-select-center basalam-video-source-select" name="sync_basalam_settings[' . esc_attr(SettingsConfig::VIDEO_SOURCE) . ']">'
441 . '<option value="inherit"' . selected($current_value, 'inherit', false) . '>ارث‌بری از قالب یا افزونه</option>'
442 . '<option value="plugin_box"' . selected($current_value, 'plugin_box', false) . '>باکس اختصاصی افزونه (در صفحه �
443 حصول)</option>'
444 . '</select>';
445 }
446
447 public static function renderVideoInheritMode()
448 {
449 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::VIDEO_INHERIT_MODE) ?: 'auto';
450
451 echo '<select class="basalam-select basalam-select-center basalam-video-inherit-mode-select" name="sync_basalam_settings[' . esc_attr(SettingsConfig::VIDEO_INHERIT_MODE) . ']">'
452 . '<option value="auto"' . selected($current_value, 'auto', false) . '>تشخیص خودکار (Woodmart، Flatsome، YITH، ...)</option>'
453 . '<option value="manual"' . selected($current_value, 'manual', false) . '>وارد کردن دستی meta key</option>'
454 . '</select>';
455 }
456
457 public static function renderVideoMetaKey()
458 {
459 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::VIDEO_META_KEY);
460
461 echo '<input type="text" name="sync_basalam_settings[' . esc_attr(SettingsConfig::VIDEO_META_KEY) . ']" value="' . esc_attr((string) $current_value) . '" class="basalam-input basalam-p basalam-video-meta-key basalam-max-width-80 basalam-font-12" placeholder="�
462 ثال: _woodmart_product_video">';
463 }
464 }
465