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

317 lines 11.8 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\ProductOperations;
20 use SyncBasalam\Admin\Product\Operations\ConnectProduct;
21 use SyncBasalam\Admin\Announcement\AnnouncementCenter;
22 use SyncBasalam\Admin\Onboarding\PointerTour;
23 use SyncBasalam\Services\SystemResourceMonitor;
24 use SyncBasalam\Utilities\ChatWidget;
25
26 defined("ABSPATH") || exit;
27
28 class AdminRegistrar implements RegistrarInterface
29 {
30 public static function register(): void
31 {
32 $container = syncBasalamContainer();
33 $pages = $container->get(Pages::class);
34 $filter = $container->get(Filter::class);
35 $orderColumn = $container->get(OrderColumn::class);
36 $orderMetaBox = $container->get(OrderMetaBox::class);
37 $orderStatuses = $container->get(OrderStatuses::class);
38 $actions = $container->get(Actions::class);
39 $bulkEdit = $container->get(BulkEdit::class);
40
41 // Initialize Admin Actions
42 $container->get(RegisterActions::class);
43
44 // Admin Menu
45 \add_action("admin_menu", [$pages, "registerMenus"]);
46 \add_filter("script_loader_tag", [ChatWidget::class, "addTokenToWidgetScript"], 10, 3);
47
48 // Admin Scripts & Styles
49 \add_action("admin_enqueue_scripts", [self::class, "adminEnqueueStyles"]);
50 \add_action("admin_enqueue_scripts", [self::class, "adminEnqueueScripts"]);
51 \add_action("admin_footer", [AnnouncementCenter::class, 'renderPanel']);
52
53 // Product Columns
54 \add_filter("manage_edit-product_columns", [StatusColumn::class, "registerStatusColumn"]);
55 \add_action("manage_product_posts_custom_column", [StatusColumn::class, "renderStatusColumnContent"], 10, 2);
56
57 // Product Meta Boxes
58 \add_action("add_meta_boxes_product", [MetaBox::class, "registerMetaBox"]);
59
60 // Basalam Product Settings Tab
61 \add_filter('woocommerce_product_data_tabs', [Tab::class, 'registerTab']);
62 \add_action('woocommerce_product_data_panels', [Tab::class, 'renderTabContent']);
63 \add_action('woocommerce_process_product_meta', [Tab::class, 'saveTabData']);
64
65 // Basalam Product Video Meta Box (sidebar, like product image/gallery)
66 \add_action('add_meta_boxes_product', [VideoField::class, 'registerMetaBox']);
67 \add_action('woocommerce_process_product_meta', [VideoField::class, 'save']);
68
69 // Product Filter
70 \add_action("restrict_manage_posts", [$filter, "renderFilterDropdown"]);
71 \add_action("pre_get_posts", [$filter, "applyFilterToQuery"]);
72
73 // Order Columns (HPOS)
74 \add_action("manage_woocommerce_page_wc-orders_custom_column", [$orderColumn, "renderColumn"], 10, 2);
75 \add_filter("manage_woocommerce_page_wc-orders_columns", [$orderColumn, "addColumn"]);
76
77 // Order Columns (Traditional CPT - non-HPOS)
78 \add_action("manage_shop_order_posts_custom_column", [$orderColumn, "renderColumn"], 10, 2);
79 \add_filter("manage_edit-shop_order_columns", [$orderColumn, "addColumn"]);
80
81 // Order Meta Boxes
82 \add_action("add_meta_boxes", [$orderMetaBox, "registerMetaBox"], 10);
83
84 // Order Meta Boxes (Traditional CPT - non-HPOS)
85 \add_action("add_meta_boxes_shop_order", [$orderMetaBox, "registerMetaBox"], 10);
86
87 // Order Statuses
88 \add_filter("wc_order_statuses", [$orderStatuses, "registerorderStatuses"]);
89
90 // Order Stock Levels
91 \add_action("woocommerce_order_status_bslm-rejected", "wc_maybe_increase_stock_levels");
92 \add_action("woocommerce_order_status_bslm-preparation", "wc_maybe_reduce_stock_levels");
93 \add_action("woocommerce_order_status_bslm-shipping", "wc_maybe_reduce_stock_levels");
94 \add_action("woocommerce_order_status_bslm-completed", "wc_maybe_reduce_stock_levels");
95
96 // Bulk Actions
97 \add_filter("bulk_actions-edit-product", [$actions, "registerBulkActions"]);
98 \add_filter("handle_bulk_actions-edit-product", [$actions, "handleBulkAction"], 10, 3);
99 \add_action('bulk_edit_custom_box', [$bulkEdit, 'renderFields'], 10, 2);
100 \add_action('admin_action_sync_basalam_bulk_edit', [$bulkEdit, 'save']);
101
102 // Product Duplicate
103 \add_action("woocommerce_product_duplicate", function ($newProduct) {
104 ProductOperations::disconnectProduct($newProduct->get_id());
105 }, 10, 1);
106
107 // Order Check Buttons (HPOS)
108 \add_action("woocommerce_order_list_table_extra_tablenav", [OrderPageComponents::class, "renderCheckOrdersButton"], 20, 1);
109
110 // Order Check Buttons (Traditional CPT - uses same hook as product filter)
111 \add_action("restrict_manage_posts", [OrderPageComponents::class, "renderCheckOrdersButtonTraditional"]);
112
113 // Initialize AJAX handlers
114 $connectProduct = $container->get(ConnectProduct::class);
115 add_action('wp_ajax_sync_basalam_connect_product', [$connectProduct, 'handleConnectProduct']);
116 add_action('wp_ajax_basalam_search_products', [$connectProduct, 'handleSearchProducts']);
117 add_action('wp_ajax_sync_basalam_mark_pointer_onboarding_completed', [PointerTour::class, 'markPointerOnboardingCompleted']);
118 add_action('wp_ajax_' . AnnouncementCenter::MARK_SEEN_ACTION, [AnnouncementCenter::class, 'markAllSeen']);
119 add_action('wp_ajax_' . AnnouncementCenter::FETCH_PAGE_ACTION, [AnnouncementCenter::class, 'fetchPage']);
120
121 // Tasks per minute calculation handler
122 add_action('wp_ajax_basalam_calculate_tasks_per_minute', function () {
123 check_ajax_referer('basalam_update_setting_nonce', 'nonce', true);
124
125 $monitor = syncBasalamContainer()->get(SystemResourceMonitor::class);
126 $optimal = $monitor->calculateOptimalTasksPerMinute();
127
128 wp_send_json_success([
129 'optimal_tasks_per_minute' => $optimal
130 ]);
131 });
132 }
133
134
135 public static function assetsUrl($path = null)
136 {
137 return plugin_dir_url(dirname(__FILE__, 2)) . "assets/" . $path;
138 }
139
140 public static function adminEnqueueStyles($hook = '')
141 {
142 $version = syncbasalamplugin()->getVersion();
143
144 wp_enqueue_style(
145 "basalam-admin-style",
146 self::assetsUrl("css/style.css"),
147 array(),
148 $version
149 );
150 wp_enqueue_style(
151 "basalam-admin-font-style",
152 self::assetsUrl("css/font.css"),
153 array(),
154 $version
155 );
156 wp_enqueue_style(
157 "basalam-admin-social-style",
158 self::assetsUrl("css/social.css"),
159 array(),
160 $version
161 );
162 wp_enqueue_style(
163 "basalam-admin-logs-style",
164 self::assetsUrl("css/logs.css"),
165 array(),
166 $version
167 );
168 wp_enqueue_style(
169 "basalam-admin-onboarding-style",
170 self::assetsUrl("css/onboarding.css"),
171 array(),
172 $version
173 );
174 wp_enqueue_style(
175 "basalam-admin-toast-style",
176 self::assetsUrl("css/toast.css"),
177 array(),
178 $version
179 );
180
181 if (PointerTour::shouldLoadPointerTour((string) $hook)) {
182 wp_enqueue_style('wp-pointer');
183 }
184 }
185
186 public static function adminEnqueueScripts($hook = '')
187 {
188 $shouldLoadPointerTour = PointerTour::shouldLoadPointerTour((string) $hook);
189 $version = syncbasalamplugin()->getVersion();
190
191 if ($shouldLoadPointerTour) {
192 wp_enqueue_script('wp-pointer');
193 }
194
195 wp_enqueue_script(
196 "basalam-admin-toast-script",
197 self::assetsUrl("js/toast.js"),
198 [],
199 $version,
200 true
201 );
202 wp_enqueue_script(
203 "basalam-admin-logs-script",
204 self::assetsUrl("js/logs.js"),
205 ["jquery", "basalam-admin-toast-script"],
206 $version,
207 true
208 );
209 wp_enqueue_script(
210 "basalam-admin-help-script",
211 self::assetsUrl("js/help.js"),
212 ["jquery", "basalam-admin-toast-script"],
213 $version,
214 true
215 );
216 wp_enqueue_script(
217 "basalam-admin-product-fields-script",
218 self::assetsUrl("js/product-fields.js"),
219 ["jquery", "basalam-admin-toast-script"],
220 $version,
221 true
222 );
223 wp_enqueue_script(
224 "basalam-admin-manage-box-script",
225 self::assetsUrl("js/manage-box.js"),
226 ["jquery", "basalam-admin-toast-script"],
227 $version,
228 true
229 );
230 wp_enqueue_script(
231 "basalam-admin-connect-modal-script",
232 self::assetsUrl("js/connect-modal.js"),
233 ["jquery", "basalam-admin-toast-script"],
234 $version,
235 true
236 );
237 wp_enqueue_script(
238 "basalam-round-script",
239 self::assetsUrl("js/round.js"),
240 ["jquery", "basalam-admin-toast-script"],
241 $version,
242 true
243 );
244 wp_enqueue_script(
245 "basalam-get-category-script",
246 self::assetsUrl("js/get-category.js"),
247 ["jquery", "basalam-admin-toast-script"],
248 $version,
249 true
250 );
251 wp_enqueue_script(
252 "basalam-order-script",
253 self::assetsUrl("js/order.js"),
254 ["jquery", "basalam-admin-toast-script"],
255 $version,
256 true
257 );
258 wp_enqueue_script(
259 "basalam-admin-script",
260 self::assetsUrl("js/admin.js"),
261 $shouldLoadPointerTour ? ["jquery", "wp-pointer", "basalam-admin-toast-script"] : ["jquery", "basalam-admin-toast-script"],
262 $version,
263 true
264 );
265 wp_enqueue_script(
266 "basalam-check-sync-script",
267 self::assetsUrl("js/check-sync.js"),
268 ["jquery", "basalam-admin-toast-script"],
269 $version,
270 true
271 );
272 wp_enqueue_script(
273 "basalam-map-category-option-script",
274 self::assetsUrl("js/map-category-option.js"),
275 ["jquery", "basalam-admin-toast-script"],
276 $version,
277 true
278 );
279
280 wp_enqueue_script(
281 "basalam-generate-product-variation-script",
282 self::assetsUrl("js/generate-product-variation.js"),
283 ["jquery", "basalam-admin-toast-script"],
284 $version,
285 true
286 );
287
288 wp_enqueue_script(
289 "basalam-ticket-script",
290 self::assetsUrl("js/ticket.js"),
291 ["basalam-admin-toast-script"],
292 $version,
293 true
294 );
295
296 if (ChatWidget::shouldLoadWidget()) {
297 wp_enqueue_script(
298 "basalam-chat-widget-script",
299 self::assetsUrl("chat/widget-loader.js"),
300 [],
301 $version,
302 true
303 );
304 }
305
306 if ($shouldLoadPointerTour) {
307 wp_localize_script('basalam-admin-script', 'basalamPointerTour', PointerTour::getPointerTourConfig());
308 }
309
310 if (AnnouncementCenter::shouldLoadAnnouncement()) {
311 wp_localize_script('basalam-admin-script', 'basalamAnnouncements', AnnouncementCenter::getConfig());
312 }
313 }
314
315
316 }
317