PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.2
ووسلام – همگام سازی ووکامرس و باسلام v1.10.2
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.2, at includes/Admin/Components/SettingPageComponents.php

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