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

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