PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.20
ووسلام – همگام سازی ووکامرس و باسلام v1.10.20
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 / Registrar / AdminRegistrar.php

AdminRegistrar.php in ووسلام – همگام سازی ووکامرس و باسلام 1.10.20, at includes/Registrar/AdminRegistrar.php

685 lines 25.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\Registrar;
4
5 use SyncBasalam\Actions\RegisterActions;
6 use SyncBasalam\Admin\Pages;
7 use SyncBasalam\Registrar\Contracts\RegistrarInterface;
8 use SyncBasalam\Admin\Product\elements\ProductList\StatusColumn;
9 use SyncBasalam\Admin\Product\elements\ProductList\MetaBox;
10 use SyncBasalam\Admin\Product\elements\ProductList\BulkEdit;
11 use SyncBasalam\Admin\Product\elements\SingleProduct\Tab;
12 use SyncBasalam\Admin\Product\elements\SingleProduct\VideoField;
13 use SyncBasalam\Admin\Product\elements\ProductList\Filter;
14 use SyncBasalam\Admin\Product\elements\ProductList\Actions;
15 use SyncBasalam\Admin\Order\OrderColumn;
16 use SyncBasalam\Admin\Order\OrderMetaBox;
17 use SyncBasalam\Admin\Components\OrderPageComponents;
18 use SyncBasalam\Admin\Order\OrderStatuses;
19 use SyncBasalam\Admin\Product\Operations\ConnectProduct;
20 use SyncBasalam\Admin\Announcement\AnnouncementCenter;
21 use SyncBasalam\Admin\Onboarding\PointerTour;
22 use SyncBasalam\Services\Products\DuplicateConnectionReport;
23 use SyncBasalam\Services\Products\ProductConnection;
24 use SyncBasalam\Services\SystemResourceMonitor;
25 use SyncBasalam\Utilities\ProductMetaKey;
26 use SyncBasalam\Utilities\ChatWidget;
27 use SyncBasalam\Utilities\TicketFlashNotice;
28 use SyncBasalam\Admin\Settings\SettingsPageHandler;
29 use SyncBasalam\Admin\FinancialManagement\Menu as FinancialManagementMenu;
30 use SyncBasalam\Admin\FinancialManagement\BalanceSettlement;
31 use SyncBasalam\Admin\FinancialManagement\FinancialManagementHistory;
32
33 defined("ABSPATH") || exit;
34
35 class AdminRegistrar implements RegistrarInterface
36 {
37 public static function register(): void
38 {
39 $container = syncBasalamContainer();
40 $pages = $container->get(Pages::class);
41 $filter = $container->get(Filter::class);
42 $orderColumn = $container->get(OrderColumn::class);
43 $orderMetaBox = $container->get(OrderMetaBox::class);
44 $orderStatuses = $container->get(OrderStatuses::class);
45 $actions = $container->get(Actions::class);
46 $bulkEdit = $container->get(BulkEdit::class);
47
48 // Initialize Admin Actions
49 $container->get(RegisterActions::class);
50
51 // Admin Menu
52 \add_action("admin_menu", [$pages, "registerMenus"]);
53 \add_filter("script_loader_tag", [ChatWidget::class, "addTokenToWidgetScript"], 10, 3);
54
55 // Admin Scripts & Styles
56 \add_action("admin_enqueue_scripts", [self::class, "adminEnqueueStyles"]);
57 \add_action("admin_enqueue_scripts", [self::class, "adminEnqueueScripts"]);
58 \add_action("admin_enqueue_scripts", [self::class, "financialManagementEnqueueAssets"]);
59 \add_action("admin_footer", [AnnouncementCenter::class, 'renderPanel']);
60
61 // Financial Management (�
62 دیریت �
63 الی)
64 FinancialManagementHistory::register();
65 BalanceSettlement::register();
66
67 // Product Columns
68 \add_filter("manage_edit-product_columns", [StatusColumn::class, "registerStatusColumn"]);
69 \add_action("manage_product_posts_custom_column", [StatusColumn::class, "renderStatusColumnContent"], 10, 2);
70
71 // Product Meta Boxes
72 \add_action("add_meta_boxes_product", [MetaBox::class, "registerMetaBox"]);
73
74 // Basalam Product Settings Tab
75 \add_filter('woocommerce_product_data_tabs', [Tab::class, 'registerTab']);
76 \add_action('woocommerce_product_data_panels', [Tab::class, 'renderTabContent']);
77 \add_action('woocommerce_process_product_meta', [Tab::class, 'saveTabData']);
78
79 // Basalam Product Video Meta Box (sidebar, like product image/gallery)
80 \add_action('add_meta_boxes_product', [VideoField::class, 'registerMetaBox']);
81 \add_action('woocommerce_process_product_meta', [VideoField::class, 'save']);
82
83 // Product Filter
84 \add_action("restrict_manage_posts", [$filter, "renderFilterDropdown"]);
85 \add_action("pre_get_posts", [$filter, "applyFilterToQuery"]);
86
87 // Order Columns (HPOS)
88 \add_action("manage_woocommerce_page_wc-orders_custom_column", [$orderColumn, "renderColumn"], 10, 2);
89 \add_filter("manage_woocommerce_page_wc-orders_columns", [$orderColumn, "addColumn"]);
90
91 // Order Columns (Traditional CPT - non-HPOS)
92 \add_action("manage_shop_order_posts_custom_column", [$orderColumn, "renderColumn"], 10, 2);
93 \add_filter("manage_edit-shop_order_columns", [$orderColumn, "addColumn"]);
94
95 // Order Meta Boxes
96 \add_action("add_meta_boxes", [$orderMetaBox, "registerMetaBox"], 10);
97
98 // Order Meta Boxes (Traditional CPT - non-HPOS)
99 \add_action("add_meta_boxes_shop_order", [$orderMetaBox, "registerMetaBox"], 10);
100
101 // Order Statuses
102 \add_filter("wc_order_statuses", [$orderStatuses, "registerorderStatuses"]);
103
104 // Order Stock Levels
105 \add_action("woocommerce_order_status_bslm-rejected", "wc_maybe_increase_stock_levels");
106 \add_action("woocommerce_order_status_bslm-preparation", "wc_maybe_reduce_stock_levels");
107 \add_action("woocommerce_order_status_bslm-shipping", "wc_maybe_reduce_stock_levels");
108 \add_action("woocommerce_order_status_bslm-completed", "wc_maybe_reduce_stock_levels");
109
110 // Bulk Actions
111 \add_filter("bulk_actions-edit-product", [$actions, "registerBulkActions"]);
112 \add_filter("handle_bulk_actions-edit-product", [$actions, "handleBulkAction"], 10, 3);
113 \add_action('bulk_edit_custom_box', [$bulkEdit, 'renderFields'], 10, 2);
114 \add_action('admin_action_sync_basalam_bulk_edit', [$bulkEdit, 'save']);
115
116 // Product Duplicate
117 // نسخه کپی یک �
118 حصول تازه است و نباید هیچ داده ووسلا�
119 ی از �
120 حصول اصلی به ارث ببرد؛
121 // �
122 خصوصا شناسه اتصال، وگرنه بروزرسانی نسخه کپی، �
123 حصول اصلی را در باسلا�
124 تغییر �
125 ی‌دهد.
126 \add_filter("woocommerce_duplicate_product_exclude_meta", [self::class, "excludePluginMetaFromDuplicate"], 10, 2);
127
128 \add_action("woocommerce_product_duplicate", function ($newProduct) {
129 if (!is_object($newProduct) || !method_exists($newProduct, "get_id")) return;
130
131 ProductConnection::purgeAll($newProduct->get_id());
132 }, 10, 1);
133
134 // Product Duplicate (third party plugins, e.g. Yoast Duplicate Post)
135 foreach (["dp_duplicate_post", "dp_duplicate_page", "duplicate_post_post_copy"] as $duplicateHook) {
136 \add_action($duplicateHook, function ($newPostId, $sourcePost = null) {
137 if (!is_scalar($newPostId) || \get_post_type((int) $newPostId) !== "product") return;
138
139 // اگر هوک، پست �
140 بدا را ه�
141 بدهد �
142 ط�
143 ئنی�
144 شناسه اول نسخه کپی است.
145 if (is_object($sourcePost) && !empty($sourcePost->ID) && (int) $sourcePost->ID !== (int) $newPostId) {
146 ProductConnection::purgeAll((int) $newPostId);
147
148 return;
149 }
150
151 // در غیر این صورت �
152 حافظه‌کارانه ع�
153 ل �
154 ی‌کنی�
155 تا داده �
156 حصول اصلی پاک نشود.
157 ProductConnection::purgeIfCopy((int) $newPostId);
158 }, 10, 2);
159 }
160
161 // Duplicate connection report (admin notice + dismiss handler)
162 DuplicateConnectionReport::registerHooks();
163
164 // Order Check Buttons (HPOS)
165 \add_action("woocommerce_order_list_table_extra_tablenav", [OrderPageComponents::class, "renderCheckOrdersButton"], 20, 1);
166
167 // Order Check Buttons (Traditional CPT - uses same hook as product filter)
168 \add_action("restrict_manage_posts", [OrderPageComponents::class, "renderCheckOrdersButtonTraditional"]);
169
170 // Initialize AJAX handlers
171 $connectProduct = $container->get(ConnectProduct::class);
172 add_action('wp_ajax_basalam_search_products', [$connectProduct, 'handleSearchProducts']);
173 add_action('wp_ajax_sync_basalam_mark_pointer_onboarding_completed', [PointerTour::class, 'markPointerOnboardingCompleted']);
174 add_action('wp_ajax_' . AnnouncementCenter::MARK_SEEN_ACTION, [AnnouncementCenter::class, 'markAllSeen']);
175 add_action('wp_ajax_' . AnnouncementCenter::FETCH_PAGE_ACTION, [AnnouncementCenter::class, 'fetchPage']);
176
177 // Tasks per minute calculation handler
178 add_action('wp_ajax_basalam_calculate_tasks_per_minute', function () {
179 check_ajax_referer('basalam_update_setting_nonce', 'nonce', true);
180
181 $monitor = syncBasalamContainer()->get(SystemResourceMonitor::class);
182 $optimal = $monitor->calculateOptimalTasksPerMinute();
183
184 wp_send_json_success([
185 'optimal_tasks_per_minute' => $optimal
186 ]);
187 });
188 }
189
190
191 /**
192 * حذف ه�
193 ه �
194 تاهای ووسلا�
195 از نسخه کپی، پیش از ذخیره شدن آن توسط ووکا�
196 رس.
197 * ووکا�
198 رس ه�
199 ین فهرست را روی تنوع‌های کپی شده ه�
200 اع�
201 ال �
202 ی‌کند.
203 *
204 * @param array $excludedMeta کلیدهایی که تا اینجا برای حذف انتخاب شده‌اند.
205 * @param array $productMetaKeys کلیدهای �
206 تای �
207 حصول اصلی.
208 */
209 public static function excludePluginMetaFromDuplicate($excludedMeta, $productMetaKeys = [])
210 {
211 $excludedMeta = is_array($excludedMeta) ? $excludedMeta : [];
212
213 foreach ((array) $productMetaKeys as $metaKey) {
214 if (ProductConnection::isPluginMetaKey($metaKey)) $excludedMeta[] = $metaKey;
215 }
216
217 // کلیدهای تنوع‌ها در فهرست �
218 تای �
219 حصول والد نیستند و باید دستی اضافه شوند.
220 $excludedMeta = array_merge(
221 $excludedMeta,
222 ProductMetaKey::basalamProductMetaKeys(),
223 [ProductMetaKey::basalamVariationId(), ProductMetaKey::DISCOUNTED]
224 );
225
226 return array_values(array_unique($excludedMeta));
227 }
228
229 public static function assetsUrl($path = null)
230 {
231 return plugin_dir_url(dirname(__FILE__, 2)) . "assets/" . $path;
232 }
233
234 public static function isWoosalamRelatedAdminScreen($hook = ''): bool
235 {
236 return self::isPluginAdminPage($hook)
237 || self::isProductAdminScreen($hook)
238 || self::isOrderAdminScreen($hook);
239 }
240
241 private static function isPluginAdminPage($hook = ''): bool
242 {
243 $page = self::currentAdminPage();
244
245 if ($page !== '' && in_array($page, self::pluginAdminPages(), true)) {
246 return true;
247 }
248
249 return is_string($hook) && strpos($hook, 'sync_basalam') !== false;
250 }
251
252 private static function isProductAdminScreen($hook = ''): bool
253 {
254 $screen = function_exists('get_current_screen') ? get_current_screen() : null;
255
256 if ($screen && isset($screen->post_type) && $screen->post_type === 'product') {
257 return true;
258 }
259
260 $postType = isset($_GET['post_type']) ? sanitize_key(wp_unslash($_GET['post_type'])) : '';
261 if ($postType === 'product') {
262 return true;
263 }
264
265 $postId = isset($_GET['post']) ? absint($_GET['post']) : 0;
266 if ($postId > 0 && function_exists('get_post_type') && get_post_type($postId) === 'product') {
267 return true;
268 }
269
270 return in_array((string) $hook, ['edit-product', 'product'], true);
271 }
272
273 private static function isOrderAdminScreen($hook = ''): bool
274 {
275 $screen = function_exists('get_current_screen') ? get_current_screen() : null;
276
277 if ($screen) {
278 $screenId = isset($screen->id) ? (string) $screen->id : '';
279 $postType = isset($screen->post_type) ? (string) $screen->post_type : '';
280
281 if ($postType === 'shop_order' || $screenId === 'woocommerce_page_wc-orders') {
282 return true;
283 }
284 }
285
286 $page = self::currentAdminPage();
287 if ($page === 'wc-orders') {
288 return true;
289 }
290
291 $postType = isset($_GET['post_type']) ? sanitize_key(wp_unslash($_GET['post_type'])) : '';
292 if ($postType === 'shop_order') {
293 return true;
294 }
295
296 $postId = isset($_GET['post']) ? absint($_GET['post']) : 0;
297 if ($postId > 0 && function_exists('get_post_type') && get_post_type($postId) === 'shop_order') {
298 return true;
299 }
300
301 return in_array((string) $hook, ['edit-shop_order', 'shop_order', 'woocommerce_page_wc-orders'], true);
302 }
303
304 private static function isProductEditScreen($hook = ''): bool
305 {
306 $screen = function_exists('get_current_screen') ? get_current_screen() : null;
307
308 if ($screen && isset($screen->post_type, $screen->base)) {
309 return $screen->post_type === 'product' && in_array($screen->base, ['post', 'post-new'], true);
310 }
311
312 return self::isProductAdminScreen($hook) && in_array((string) $hook, ['post.php', 'post-new.php', 'product'], true);
313 }
314
315 private static function isPluginPage(string $page): bool
316 {
317 return self::currentAdminPage() === $page;
318 }
319
320 private static function isTicketPage(): bool
321 {
322 return in_array(self::currentAdminPage(), [
323 'sync_basalam_tickets',
324 'sync_basalam_ticket',
325 'sync_basalam_new_ticket',
326 ], true);
327 }
328
329 private static function currentAdminPage(): string
330 {
331 return isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : '';
332 }
333
334 private static function pluginAdminPages(): array
335 {
336 return [
337 'sync_basalam',
338 'sync_basalam_logs',
339 'sync_basalam_vendor_info',
340 'sync_basalam_help',
341 'sync_basalam_category_mapping',
342 FinancialManagementMenu::PAGE_SLUG,
343 'basalam-onboarding',
344 'basalam-save-token',
345 'basalam-show-products',
346 'sync_basalam_tickets',
347 'sync_basalam_ticket',
348 'sync_basalam_new_ticket',
349 ];
350 }
351
352 public static function adminEnqueueStyles($hook = '')
353 {
354 if (!self::isWoosalamRelatedAdminScreen($hook)) {
355 return;
356 }
357
358 $version = syncbasalamplugin()->getVersion();
359
360 wp_enqueue_style(
361 "basalam-admin-style",
362 self::assetsUrl("css/style.css"),
363 array(),
364 $version
365 );
366 wp_enqueue_style(
367 "basalam-admin-font-style",
368 self::assetsUrl("css/font.css"),
369 array(),
370 $version
371 );
372 if (self::isPluginPage('sync_basalam_vendor_info')) {
373 wp_enqueue_style(
374 "basalam-admin-social-style",
375 self::assetsUrl("css/social.css"),
376 array(),
377 $version
378 );
379 }
380
381 if (self::isPluginPage('sync_basalam_logs')) {
382 wp_enqueue_style(
383 "basalam-admin-logs-style",
384 self::assetsUrl("css/logs.css"),
385 array(),
386 $version
387 );
388 }
389
390 if (self::isPluginPage('basalam-onboarding')) {
391 wp_enqueue_style(
392 "basalam-admin-onboarding-style",
393 self::assetsUrl("css/onboarding.css"),
394 array(),
395 $version
396 );
397 }
398 wp_enqueue_style(
399 "basalam-admin-toast-style",
400 self::assetsUrl("css/toast.css"),
401 array(),
402 $version
403 );
404
405 if (PointerTour::shouldLoadPointerTour((string) $hook)) {
406 wp_enqueue_style('wp-pointer');
407 }
408 }
409
410 public static function adminEnqueueScripts($hook = '')
411 {
412 $version = syncbasalamplugin()->getVersion();
413
414 if (ChatWidget::shouldLoadWidget()) {
415 wp_enqueue_script(
416 "basalam-chat-widget-script",
417 self::assetsUrl("chat/widget-loader.js"),
418 [],
419 $version,
420 true
421 );
422 }
423
424 $shouldLoadPointerTour = PointerTour::shouldLoadPointerTour((string) $hook);
425 $shouldLoadAssets = self::isWoosalamRelatedAdminScreen($hook);
426
427 if (!$shouldLoadAssets && !$shouldLoadPointerTour) {
428 return;
429 }
430
431 $isPluginPage = self::isPluginAdminPage($hook);
432 $isMainPage = self::isPluginPage('sync_basalam');
433 $isProductScreen = self::isProductAdminScreen($hook);
434 $isProductEditScreen = self::isProductEditScreen($hook);
435 $isOrderScreen = self::isOrderAdminScreen($hook);
436
437 if ($shouldLoadPointerTour) {
438 wp_enqueue_script('wp-pointer');
439 }
440
441 wp_enqueue_script(
442 "basalam-admin-toast-script",
443 self::assetsUrl("js/toast.js"),
444 [],
445 $version,
446 true
447 );
448
449 $vendorStatusScriptPath = syncbasalamplugin()->pluginPath() . '/assets/js/vendor-status.js';
450 $vendorStatusScriptVersion = file_exists($vendorStatusScriptPath)
451 ? $version . '-' . filemtime($vendorStatusScriptPath)
452 : $version;
453 wp_enqueue_script(
454 "basalam-vendor-status-script",
455 self::assetsUrl("js/vendor-status.js"),
456 ["basalam-admin-toast-script"],
457 $vendorStatusScriptVersion,
458 true
459 );
460
461 $ticketNotice = TicketFlashNotice::pull();
462 if ($ticketNotice !== null) {
463 wp_add_inline_script(
464 "basalam-admin-toast-script",
465 sprintf(
466 'window.addEventListener("DOMContentLoaded",function(){if(window.BasalamToast){window.BasalamToast.show(%s,%s);}});',
467 wp_json_encode($ticketNotice['message'], JSON_UNESCAPED_UNICODE),
468 wp_json_encode($ticketNotice['type'])
469 ),
470 'after'
471 );
472 }
473
474 $settingsValidationError = SettingsPageHandler::pullValidationError();
475 if ($settingsValidationError !== '') {
476 wp_add_inline_script(
477 "basalam-admin-toast-script",
478 sprintf(
479 'window.addEventListener("DOMContentLoaded",function(){if(window.BasalamToast){window.BasalamToast.error(%s);}});',
480 wp_json_encode($settingsValidationError, JSON_UNESCAPED_UNICODE)
481 ),
482 'after'
483 );
484 }
485
486 if (self::isPluginPage('sync_basalam_logs')) {
487 wp_enqueue_script(
488 "basalam-admin-logs-script",
489 self::assetsUrl("js/logs.js"),
490 ["jquery", "basalam-admin-toast-script"],
491 $version,
492 true
493 );
494 }
495
496 if (self::isPluginPage('sync_basalam_help')) {
497 wp_enqueue_script(
498 "basalam-admin-help-script",
499 self::assetsUrl("js/help.js"),
500 ["jquery", "basalam-admin-toast-script"],
501 $version,
502 true
503 );
504 }
505
506 if ($isProductEditScreen) {
507 wp_enqueue_script(
508 "basalam-admin-product-fields-script",
509 self::assetsUrl("js/product-fields.js"),
510 ["jquery", "basalam-admin-toast-script"],
511 $version,
512 true
513 );
514 wp_enqueue_script(
515 "basalam-admin-connect-modal-script",
516 self::assetsUrl("js/connect-modal.js"),
517 ["jquery", "basalam-admin-toast-script"],
518 $version,
519 true
520 );
521 wp_enqueue_script(
522 "basalam-get-category-script",
523 self::assetsUrl("js/get-category.js"),
524 ["jquery", "basalam-admin-toast-script"],
525 $version,
526 true
527 );
528 wp_enqueue_script(
529 "basalam-generate-product-variation-script",
530 self::assetsUrl("js/generate-product-variation.js"),
531 ["jquery", "basalam-admin-toast-script"],
532 $version,
533 true
534 );
535 }
536
537 if ($isMainPage || $isProductEditScreen) {
538 wp_enqueue_script(
539 "basalam-admin-manage-box-script",
540 self::assetsUrl("js/manage-box.js"),
541 ["jquery", "basalam-admin-toast-script"],
542 $version,
543 true
544 );
545 }
546
547 if ($isMainPage) {
548 wp_enqueue_script(
549 "basalam-map-category-option-script",
550 self::assetsUrl("js/map-category-option.js"),
551 ["jquery", "basalam-admin-toast-script"],
552 $version,
553 true
554 );
555 }
556
557 if ($isMainPage || $isProductScreen) {
558 wp_enqueue_script(
559 "basalam-round-script",
560 self::assetsUrl("js/round.js"),
561 ["jquery", "basalam-admin-toast-script"],
562 $version,
563 true
564 );
565 }
566
567 if ($isOrderScreen) {
568 wp_enqueue_script(
569 "basalam-order-script",
570 self::assetsUrl("js/order.js"),
571 ["jquery", "basalam-admin-toast-script"],
572 $version,
573 true
574 );
575 }
576
577 if ($isMainPage || $isOrderScreen) {
578 wp_enqueue_script(
579 "basalam-check-sync-script",
580 self::assetsUrl("js/check-sync.js"),
581 ["jquery", "basalam-admin-toast-script"],
582 $version,
583 true
584 );
585 }
586
587 if ($isPluginPage || $isProductScreen || $isOrderScreen || $shouldLoadPointerTour) {
588 $adminScriptPath = syncBasalamPlugin()->pluginPath() . '/assets/js/admin.js';
589 $adminScriptVersion = file_exists($adminScriptPath)
590 ? $version . '-' . filemtime($adminScriptPath)
591 : $version;
592 wp_enqueue_script(
593 "basalam-admin-script",
594 self::assetsUrl("js/admin.js"),
595 $shouldLoadPointerTour ? ["jquery", "wp-pointer", "basalam-admin-toast-script"] : ["jquery", "basalam-admin-toast-script"],
596 $adminScriptVersion,
597 true
598 );
599 }
600
601 if (self::isTicketPage()) {
602 $ticketScriptPath = syncBasalamPlugin()->pluginPath() . '/assets/js/ticket.js';
603 $ticketScriptVersion = file_exists($ticketScriptPath)
604 ? $version . '-' . filemtime($ticketScriptPath)
605 : $version;
606 wp_enqueue_script(
607 "basalam-ticket-script",
608 self::assetsUrl("js/ticket.js"),
609 ["basalam-admin-toast-script"],
610 $ticketScriptVersion,
611 true
612 );
613 }
614
615 if ($shouldLoadPointerTour) {
616 wp_localize_script('basalam-admin-script', 'basalamPointerTour', PointerTour::getPointerTourConfig());
617 }
618
619 if (wp_script_is('basalam-admin-script', 'enqueued') && AnnouncementCenter::shouldLoadAnnouncement()) {
620 wp_localize_script('basalam-admin-script', 'basalamAnnouncements', AnnouncementCenter::getConfig());
621 }
622 }
623
624 public static function financialManagementEnqueueAssets($hook = '')
625 {
626 $page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : '';
627 if ($page !== FinancialManagementMenu::PAGE_SLUG) {
628 return;
629 }
630
631 $version = syncbasalamplugin()->getVersion();
632
633 wp_enqueue_style(
634 'sync-basalam-finance-style',
635 self::assetsUrl('css/finance.css'),
636 [],
637 $version
638 );
639
640 wp_enqueue_script(
641 'sync-basalam-finance-history-pagination',
642 self::assetsUrl('js/finance-history-pagination.js'),
643 [],
644 $version,
645 true
646 );
647
648 wp_localize_script('sync-basalam-finance-history-pagination', 'syncBasalamHistoryPagination', [
649 'ajaxUrl' => admin_url('admin-ajax.php'),
650 'action' => FinancialManagementHistory::AJAX_ACTION,
651 'nonce' => wp_create_nonce(FinancialManagementHistory::AJAX_ACTION),
652 'pageSlug' => FinancialManagementMenu::PAGE_SLUG,
653 'errorMessage' => 'بارگذاری تاریخچه تسویه انجا�
654 نشد.',
655 ]);
656
657 wp_enqueue_script(
658 'sync-basalam-finance-balance-settlement',
659 self::assetsUrl('js/finance-balance-settlement.js'),
660 [],
661 $version,
662 true
663 );
664
665 wp_localize_script('sync-basalam-finance-balance-settlement', 'syncBasalamBalanceSettlement', [
666 'ajaxUrl' => admin_url('admin-ajax.php'),
667 'action' => BalanceSettlement::AJAX_ACTION,
668 'bankAccountsAction' => BalanceSettlement::AJAX_ACTION_BANK_ACCOUNTS,
669 'nonce' => wp_create_nonce(BalanceSettlement::AJAX_ACTION),
670 'submitText' => 'ثبت درخواست',
671 'loadingText' => 'در حال ارسال...',
672 'errorMessage' => 'خطا در ثبت درخواست تسویه.',
673 'successMessage' => 'درخواست تسویه با �
674 وفقیت ثبت شد.',
675 'amountError' => 'لطفاً �
676 بلغ �
677 عتبری وارد کنید.',
678 'walletTitle' => 'انتقال به کیف پول',
679 'bankTitle' => 'انتقال به حساب بانکی',
680 'bankAccountsError' => 'خطا در دریافت لیست حساب‌های بانکی.',
681 ]);
682 }
683
684 }
685