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

476 lines 26.1 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) . ']" 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 echo '<div class="basalam-margin-top-25-bottom-10">';
327 echo '<label class="basalam-label basalam-p">�
328 تغیرها</label><br>';
329 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_VARIANT_PRICE, 'قی�
330 ت �
331 تغیرها'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
332 echo self::renderSingleCheckbox(SettingsConfig::SYNC_PRODUCT_FIELD_VARIANT_STOCK, '�
333 وجودی �
334 تغیرها'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- HTML is escaped inside the component method.
335 echo '</div>';
336 }
337
338 private static function renderSingleCheckbox($field_key, $label)
339 {
340 return '<label class="basalam-p sync-checkbox-label basalam-checkbox-label">'
341 . '<input type="hidden" name="sync_basalam_settings[' . esc_attr($field_key) . ']" value="">'
342 . '<input type="checkbox" name="sync_basalam_settings[' . esc_attr($field_key) . ']" value="1" '
343 . checked(syncBasalamSettings()->getSettings($field_key), true, false) . '>'
344 . esc_html($label)
345 . '</label>';
346 }
347
348 public static function renderDeveloperMode()
349 {
350 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::DEVELOPER_MODE);
351 echo '<select name="sync_basalam_settings[' . esc_attr(SettingsConfig::DEVELOPER_MODE) . ']" class="basalam-select basalam-select-center" onchange="this.form.submit()">'
352 . '<option value="false"' . selected($current_value, "false", false) . '>غیرفعال</option>'
353 . '<option value="true"' . selected($current_value, "true", false) . '>فعال</option>'
354 . '</select>';
355 }
356
357 public static function renderCategoryOptionsMapping($data)
358 {
359 $delete_nonce = wp_create_nonce('basalam_delete_mapped_option_nonce');
360
361 echo '<div class="options_mapping_section" data-delete-nonce="' . esc_attr($delete_nonce) . '">';
362 echo '<p class="basalam-p">لیست ویژگی ها : </p>';
363 echo "<table class='basalam-table basalam-p'>";
364 echo '<thead><tr><th>نا�
365 ویژگی در ووکا�
366 رس</th><th>نا�
367 ویژگی در باسلا�
368 </th><th>ع�
369 لیات</th></tr></thead>';
370 echo '<tbody>';
371
372 if (!empty($data)) {
373 foreach ($data as $item) {
374 echo '<tr data-woo="' . esc_attr($item['woo_name']) . '" data-basalam="' . esc_attr($item['sync_basalam_name']) . '">';
375 echo '<td>' . esc_html($item['woo_name']) . '</td>';
376 echo '<td>' . esc_html($item['sync_basalam_name']) . '</td>';
377 echo '<td>
378 <button
379 type="button"
380 class="Basalam-delete-option basalam-primary-button basalam-button-auto"
381 data-_wpnonce="' . esc_attr($delete_nonce) . '">
382 حذف
383 </button>
384 </td>';
385 echo '</tr>';
386 }
387 }
388
389 echo '</tbody></table>';
390 echo '</div>';
391 }
392
393 public static function renderShippingMethod()
394 {
395 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::ORDER_SHIPPING_METHOD);
396
397 echo '<select class="basalam-select basalam-select-center" name="sync_basalam_settings[' . esc_attr(SettingsConfig::ORDER_SHIPPING_METHOD) . ']">';
398 echo '<option value="basalam"' . selected($current_value, 'basalam', false) . '>ح�
399 ل و نقل باسلا�
400 </option>';
401
402 // Get active WooCommerce shipping methods
403 if (class_exists('WC_Shipping')) {
404 $shipping_zones = \WC_Shipping_Zones::get_zones();
405 $unique_methods = [];
406
407 foreach ($shipping_zones as $zone) {
408 $zone_id = $zone['id'] ?? 0;
409 $shipping_zone = new \WC_Shipping_Zone($zone_id);
410 $methods = $shipping_zone->get_shipping_methods(true);
411
412 foreach ($methods as $method) {
413 $method_value = 'wc_' . $method->id;
414 $method_title = $method->get_title() ?: $method->get_method_title();
415
416 // Avoid duplicate methods
417 if (!isset($unique_methods[$method_value])) {
418 $unique_methods[$method_value] = $method_title;
419 }
420 }
421 }
422
423 // Render options
424 foreach ($unique_methods as $value => $title) {
425 echo '<option value="' . esc_attr($value) . '"' . selected($current_value, $value, false) . '>' . esc_html($title) . '</option>';
426 }
427 }
428
429 echo '</select>';
430 }
431
432 public static function renderCustomerPrefixName()
433 {
434 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::CUSTOMER_PREFIX_NAME);
435 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="�
436 ثال: آقای/خان�
437 ">';
438 }
439
440 public static function renderCustomerSuffixName()
441 {
442 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::CUSTOMER_SUFFIX_NAME);
443 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="�
444 ثال: عزیز">';
445 }
446
447 public static function renderVideoSource()
448 {
449 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::VIDEO_SOURCE) ?: 'inherit';
450
451 echo '<select class="basalam-select basalam-select-center basalam-video-source-select" name="sync_basalam_settings[' . esc_attr(SettingsConfig::VIDEO_SOURCE) . ']">'
452 . '<option value="inherit"' . selected($current_value, 'inherit', false) . '>ارث‌بری از قالب یا افزونه</option>'
453 . '<option value="plugin_box"' . selected($current_value, 'plugin_box', false) . '>باکس اختصاصی افزونه (در صفحه �
454 حصول)</option>'
455 . '</select>';
456 }
457
458 public static function renderVideoInheritMode()
459 {
460 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::VIDEO_INHERIT_MODE) ?: 'auto';
461
462 echo '<select class="basalam-select basalam-select-center basalam-video-inherit-mode-select" name="sync_basalam_settings[' . esc_attr(SettingsConfig::VIDEO_INHERIT_MODE) . ']">'
463 . '<option value="auto"' . selected($current_value, 'auto', false) . '>تشخیص خودکار (Woodmart، Flatsome، YITH، ...)</option>'
464 . '<option value="manual"' . selected($current_value, 'manual', false) . '>وارد کردن دستی meta key</option>'
465 . '</select>';
466 }
467
468 public static function renderVideoMetaKey()
469 {
470 $current_value = syncBasalamSettings()->getSettings(SettingsConfig::VIDEO_META_KEY);
471
472 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="�
473 ثال: _woodmart_product_video">';
474 }
475 }
476