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 / Components / SettingPageComponents.php

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

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