PluginProbe
Packeta / 2.3.1
Packeta v2.3.1
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Module / Hooks / HookRegistrar.php

HookRegistrar.php in Packeta 2.3.1, at src/Packetery/Module/Hooks/HookRegistrar.php

659 lines 17.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare( strict_types=1 );
4
5 namespace Packetery\Module\Hooks;
6
7 use Packetery\Module\Api;
8 use Packetery\Module\Blocks\BlockHooks;
9 use Packetery\Module\Carrier\OptionsPage;
10 use Packetery\Module\Checkout\Checkout;
11 use Packetery\Module\Checkout\CheckoutSettings;
12 use Packetery\Module\Checkout\CheckoutStorage;
13 use Packetery\Module\CronService;
14 use Packetery\Module\Dashboard\DashboardPage;
15 use Packetery\Module\DashboardWidget;
16 use Packetery\Module\DiagnosticsLogger\DiagnosticsLogger;
17 use Packetery\Module\Email\EmailShortcodes;
18 use Packetery\Module\Framework\WpAdapter;
19 use Packetery\Module\Log;
20 use Packetery\Module\MessageManager;
21 use Packetery\Module\ModuleHelper;
22 use Packetery\Module\Options;
23 use Packetery\Module\Options\OptionNames;
24 use Packetery\Module\Options\OptionsProvider;
25 use Packetery\Module\Order;
26 use Packetery\Module\Order\CarrierModal;
27 use Packetery\Module\Order\CollectionPrint;
28 use Packetery\Module\Order\ConsignPasswordSynchronizer;
29 use Packetery\Module\Order\GridExtender;
30 use Packetery\Module\Order\LabelPrint;
31 use Packetery\Module\Order\LabelPrintModal;
32 use Packetery\Module\Order\MetaboxesWrapper;
33 use Packetery\Module\Order\PacketAutoSubmitter;
34 use Packetery\Module\Order\PacketSubmitter;
35 use Packetery\Module\Order\PacketSynchronizer;
36 use Packetery\Module\Order\StoredUntilModal;
37 use Packetery\Module\Product;
38 use Packetery\Module\ProductCategory;
39 use Packetery\Module\QueryProcessor;
40 use Packetery\Module\Shipping\ShippingProvider;
41 use Packetery\Module\ShippingMethod;
42 use Packetery\Module\Upgrade;
43 use Packetery\Module\Views\AssetManager;
44 use Packetery\Module\Views\ViewAdmin;
45 use Packetery\Module\Views\ViewFrontend;
46 use Packetery\Module\Views\ViewMail;
47 use Packetery\Module\Views\WizardAssetManager;
48
49 class HookRegistrar {
50
51 private const MIN_LISTENER_PRIORITY = - 9998;
52
53 /**
54 * @var DashboardWidget
55 */
56 private $dashboardWidget;
57
58 /**
59 * @var MetaboxesWrapper
60 */
61 private $metaboxesWrapper;
62
63 /**
64 * @var MessageManager
65 */
66 private $messageManager;
67
68 /**
69 * @var Checkout
70 */
71 private $checkout;
72
73 /**
74 * @var Order\BulkActions
75 */
76 private $orderBulkActions;
77
78 /**
79 * @var LabelPrint
80 */
81 private $labelPrint;
82
83 /**
84 * @var CollectionPrint
85 */
86 private $orderCollectionPrint;
87
88 /**
89 * @var GridExtender
90 */
91 private $gridExtender;
92
93 /**
94 * @var Product\DataTab
95 */
96 private $productTab;
97
98 /**
99 * @var CronService
100 */
101 private $cronService;
102
103 /**
104 * @var Api\Registrar
105 */
106 private $apiRegistrar;
107
108 /**
109 * @var Order\Modal
110 */
111 private $orderModal;
112
113 /**
114 * @var Options\Exporter
115 */
116 private $exporter;
117
118 /**
119 * @var Order\Repository
120 */
121 private $orderRepository;
122
123 /**
124 * @var Upgrade
125 */
126 private $upgrade;
127
128 /**
129 * @var QueryProcessor
130 */
131 private $queryProcessor;
132
133 /**
134 * @var OptionsProvider
135 */
136 private $optionsProvider;
137
138 /**
139 * @var PacketSubmitter
140 */
141 private $packetSubmitter;
142
143 /**
144 * @var ProductCategory\FormFields
145 */
146 private $productCategoryFormFields;
147
148 /**
149 * @var PacketAutoSubmitter
150 */
151 private $packetAutoSubmitter;
152
153 /**
154 * @var Order\ApiExtender
155 */
156 private $apiExtender;
157
158 /**
159 * @var LabelPrintModal
160 */
161 private $labelPrintModal;
162
163 /**
164 * @var UpdateOrderHook
165 */
166 private $updateOrderHook;
167
168 /**
169 * @var CarrierModal
170 */
171 private $carrierModal;
172
173 /**
174 * @var StoredUntilModal
175 */
176 private $storedUntilModal;
177
178 /**
179 * @var BlockHooks
180 */
181 private $blockHooks;
182
183 /**
184 * @var ViewAdmin
185 */
186 private $viewAdmin;
187
188 /**
189 * @var ViewFrontend
190 */
191 private $viewFrontend;
192
193 /**
194 * @var ViewMail
195 */
196 private $viewMail;
197
198 /**
199 * @var AssetManager
200 */
201 private $assetManager;
202
203 /**
204 * @var PluginHooks
205 */
206 private $pluginHooks;
207
208 /**
209 * @var OptionsPage
210 */
211 private $carrierOptionsPage;
212
213 /**
214 * @var Log\Page
215 */
216 private $logPage;
217
218 /**
219 * @var Options\Page
220 */
221 private $optionsPage;
222
223 /**
224 * @var WpAdapter
225 */
226 private $wpAdapter;
227
228 /**
229 * @var PacketSynchronizer
230 */
231 private $packetSynchronizer;
232
233 /**
234 * @var ConsignPasswordSynchronizer
235 */
236 private $consignPasswordSynchronizer;
237
238 /**
239 * @var CheckoutSettings
240 */
241 private $checkoutSettings;
242
243 /**
244 * @var ModuleHelper
245 */
246 private $moduleHelper;
247
248 /**
249 * @var ShippingProvider
250 */
251 private $shippingProvider;
252
253 /**
254 * @var CheckoutStorage
255 */
256 private $checkoutStorage;
257
258 /**
259 * @var WizardAssetManager
260 */
261 private $wizardAssetManager;
262
263 /**
264 * @var DashboardPage
265 */
266 private $dashboardPage;
267
268 /**
269 * @var EmailShortcodes
270 */
271 private $shortcodes;
272
273 /**
274 * @var DiagnosticsLogger
275 */
276 private $diagnosticsLogger;
277
278 public function __construct(
279 PluginHooks $pluginHooks,
280 MessageManager $messageManager,
281 Checkout $checkout,
282 Order\BulkActions $orderBulkActions,
283 Order\LabelPrint $labelPrint,
284 GridExtender $gridExtender,
285 Product\DataTab $productTab,
286 Api\Registrar $apiRegistar,
287 Order\Modal $orderModal,
288 Options\Exporter $exporter,
289 Order\CollectionPrint $orderCollectionPrint,
290 Order\Repository $orderRepository,
291 Upgrade $upgrade,
292 QueryProcessor $queryProcessor,
293 OptionsProvider $optionsProvider,
294 CronService $cronService,
295 DashboardWidget $dashboardWidget,
296 PacketSubmitter $packetSubmitter,
297 ProductCategory\FormFields $productCategoryFormFields,
298 PacketAutoSubmitter $packetAutoSubmitter,
299 Order\MetaboxesWrapper $metaboxesWrapper,
300 Order\ApiExtender $apiExtender,
301 LabelPrintModal $labelPrintModal,
302 UpdateOrderHook $updateOrderHook,
303 CarrierModal $carrierModal,
304 StoredUntilModal $storedUntilModal,
305 BlockHooks $blockHooks,
306 ViewAdmin $viewAdmin,
307 ViewFrontend $viewFrontend,
308 ViewMail $viewMail,
309 AssetManager $assetManager,
310 OptionsPage $carrierOptionsPage,
311 Log\Page $logPage,
312 Options\Page $optionsPage,
313 WpAdapter $wpAdapter,
314 PacketSynchronizer $packetSynchronizer,
315 ConsignPasswordSynchronizer $consignPasswordSynchronizer,
316 CheckoutSettings $checkoutSettings,
317 ModuleHelper $moduleHelper,
318 ShippingProvider $shippingProvider,
319 CheckoutStorage $checkoutStorage,
320 WizardAssetManager $wizardAssetManager,
321 DashboardPage $dashboardPage,
322 EmailShortcodes $shortcodes,
323 DiagnosticsLogger $diagnosticsLogger
324 ) {
325 $this->messageManager = $messageManager;
326 $this->checkout = $checkout;
327 $this->orderBulkActions = $orderBulkActions;
328 $this->labelPrint = $labelPrint;
329 $this->gridExtender = $gridExtender;
330 $this->productTab = $productTab;
331 $this->apiRegistrar = $apiRegistar;
332 $this->orderModal = $orderModal;
333 $this->exporter = $exporter;
334 $this->orderCollectionPrint = $orderCollectionPrint;
335 $this->orderRepository = $orderRepository;
336 $this->upgrade = $upgrade;
337 $this->queryProcessor = $queryProcessor;
338 $this->optionsProvider = $optionsProvider;
339 $this->cronService = $cronService;
340 $this->dashboardWidget = $dashboardWidget;
341 $this->packetSubmitter = $packetSubmitter;
342 $this->productCategoryFormFields = $productCategoryFormFields;
343 $this->packetAutoSubmitter = $packetAutoSubmitter;
344 $this->metaboxesWrapper = $metaboxesWrapper;
345 $this->apiExtender = $apiExtender;
346 $this->labelPrintModal = $labelPrintModal;
347 $this->updateOrderHook = $updateOrderHook;
348 $this->carrierModal = $carrierModal;
349 $this->storedUntilModal = $storedUntilModal;
350 $this->blockHooks = $blockHooks;
351 $this->viewAdmin = $viewAdmin;
352 $this->viewFrontend = $viewFrontend;
353 $this->viewMail = $viewMail;
354 $this->assetManager = $assetManager;
355 $this->pluginHooks = $pluginHooks;
356 $this->carrierOptionsPage = $carrierOptionsPage;
357 $this->logPage = $logPage;
358 $this->optionsPage = $optionsPage;
359 $this->wpAdapter = $wpAdapter;
360 $this->packetSynchronizer = $packetSynchronizer;
361 $this->consignPasswordSynchronizer = $consignPasswordSynchronizer;
362 $this->checkoutSettings = $checkoutSettings;
363 $this->moduleHelper = $moduleHelper;
364 $this->shippingProvider = $shippingProvider;
365 $this->checkoutStorage = $checkoutStorage;
366 $this->wizardAssetManager = $wizardAssetManager;
367 $this->dashboardPage = $dashboardPage;
368 $this->shortcodes = $shortcodes;
369 $this->diagnosticsLogger = $diagnosticsLogger;
370 }
371
372 public function register(): void {
373 $this->wpAdapter->addAction( 'init', [ $this->pluginHooks, 'loadTranslation' ] );
374
375 if ( $this->moduleHelper->isWooCommercePluginActive() === false ) {
376 if ( $this->wpAdapter->isAdmin() ) {
377 $this->wpAdapter->addAction( 'admin_notices', [ $this->viewAdmin, 'echoInactiveWooCommerceNotice' ] );
378 }
379
380 return;
381 }
382
383 $this->wpAdapter->addAction( 'before_woocommerce_init', [ $this->pluginHooks, 'declareWooCommerceCompability' ] );
384 $this->wpAdapter->addAction( 'init', [ $this->upgrade, 'check' ] );
385 $this->wpAdapter->addAction( 'rest_api_init', [ $this->apiRegistrar, 'registerRoutes' ] );
386
387 $this->wpAdapter->registerActivationHook( ModuleHelper::getPluginMainFilePath(), [ $this, 'activatePlugin' ] );
388
389 $this->wpAdapter->registerDeactivationHook(
390 ModuleHelper::getPluginMainFilePath(),
391 static function () {
392 CronService::deactivate();
393 }
394 );
395
396 if ( $this->wpAdapter->isAdmin() ) {
397 $this->registerBackEnd();
398 } else {
399 $this->registerFrontEnd();
400 }
401
402 $wcEmailHook = $this->optionsProvider->getEmailHook();
403 if ( $wcEmailHook !== '' && $this->optionsProvider->isAutoEmailInfoInsertionEnabled() ) {
404 $this->wpAdapter->addAction( $wcEmailHook, [ $this->viewMail, 'renderEmailFooter' ] );
405 }
406
407 $this->wpAdapter->addFilter( 'woocommerce_shipping_methods', [ $this, 'addShippingMethods' ] );
408 $this->cronService->register();
409 $this->packetAutoSubmitter->register();
410 $this->apiExtender->register();
411 $this->updateOrderHook->register();
412 $this->packetSubmitter->registerCronAction();
413 $this->packetSynchronizer->register();
414 $this->consignPasswordSynchronizer->register();
415 $this->shortcodes->register();
416
417 add_action( 'init', [ $this->shippingProvider, 'loadClasses' ] );
418
419 add_action( 'packeta_create_tables', [ $this->upgrade, 'runCreateTables' ] );
420 }
421
422 private function registerBackEnd(): void {
423 if ( $this->wpAdapter->doingAjax() === false ) {
424 $this->wpAdapter->addAction( 'admin_init', [ $this, 'redirectAfterActivation' ] );
425 $this->wpAdapter->addAction( 'init', [ $this->messageManager, 'init' ] );
426 $this->wpAdapter->addAction( 'admin_enqueue_scripts', [ $this->assetManager, 'enqueueAdminAssets' ] );
427 $this->wpAdapter->addAction( 'admin_enqueue_scripts', [ $this->wizardAssetManager, 'enqueueWizardAssets' ] );
428 $this->wpAdapter->addAction(
429 'admin_notices',
430 function () {
431 $this->messageManager->render( MessageManager::RENDERER_WORDPRESS );
432 },
433 self::MIN_LISTENER_PRIORITY
434 );
435 $this->wpAdapter->addAction( 'init', [ $this, 'addLinksToPluginGrid' ] );
436 $this->wpAdapter->addFilter( 'views_edit-shop_order', [ $this->gridExtender, 'addFilterLinks' ] );
437 $this->wpAdapter->addAction( 'restrict_manage_posts', [ $this->gridExtender, 'renderOrderTypeSelect' ] );
438 $this->wpAdapter->addFilter( 'manage_edit-shop_order_columns', [ $this->gridExtender, 'addOrderListColumns' ] );
439
440 $orderListScreenId = 'woocommerce_page_wc-orders';
441
442 $wooCommerceVersion = ModuleHelper::getWooCommerceVersion();
443 if ( $wooCommerceVersion !== null && version_compare( $wooCommerceVersion, '7.9.0', '>=' ) ) {
444 $this->wpAdapter->addFilter( sprintf( 'views_%s', $orderListScreenId ), [ $this->gridExtender, 'addFilterLinks' ] );
445 $this->wpAdapter->addAction(
446 'woocommerce_order_list_table_restrict_manage_orders',
447 [
448 $this->gridExtender,
449 'renderOrderTypeSelect',
450 ]
451 );
452 }
453
454 $this->queryProcessor->register();
455
456 $this->wpAdapter->addFilter(
457 sprintf( 'manage_%s_columns', $orderListScreenId ),
458 [
459 $this->gridExtender,
460 'addOrderListColumns',
461 ]
462 );
463 $this->wpAdapter->addAction(
464 'manage_shop_order_posts_custom_column',
465 [
466 $this->gridExtender,
467 'fillCustomOrderListColumns',
468 ],
469 10,
470 2
471 );
472 $this->wpAdapter->addAction(
473 sprintf( 'manage_%s_custom_column', $orderListScreenId ),
474 [
475 $this->gridExtender,
476 'fillCustomOrderListColumns',
477 ],
478 10,
479 2
480 );
481
482 $this->wpAdapter->addFilter(
483 'manage_edit-shop_order_sortable_columns',
484 [
485 $this->gridExtender,
486 'makeOrderListSpecificColumnsSortable',
487 ]
488 );
489 $this->wpAdapter->addFilter(
490 sprintf( 'manage_%s_sortable_columns', $orderListScreenId ),
491 [
492 $this->gridExtender,
493 'makeOrderListSpecificColumnsSortable',
494 ]
495 );
496
497 $this->optionsPage->register();
498 $this->wpAdapter->addAction( 'admin_menu', [ $this, 'addMenuPages' ] );
499 $this->wpAdapter->addAction( 'admin_head', [ $this->labelPrint, 'hideFromMenus' ] );
500 $this->wpAdapter->addAction( 'admin_head', [ $this->orderCollectionPrint, 'hideFromMenus' ] );
501
502 $this->wpAdapter->addAction( 'admin_head', [ $this->viewAdmin, 'renderConfirmModalTemplate' ] );
503
504 $this->orderModal->register();
505 $this->labelPrintModal->register();
506 $this->metaboxesWrapper->register();
507 $this->storedUntilModal->register();
508 $this->productTab->register();
509 $this->productCategoryFormFields->register();
510 $this->carrierModal->register();
511
512 $this->wpAdapter->addAction(
513 'woocommerce_admin_order_data_after_shipping_address',
514 [
515 $this->viewAdmin,
516 'renderDeliveryDetail',
517 ]
518 );
519
520 // Adding custom actions to dropdown in admin order list.
521 $this->wpAdapter->addFilter( 'bulk_actions-edit-shop_order', [ $this->orderBulkActions, 'addActions' ], 20 );
522 $this->wpAdapter->addFilter(
523 sprintf( 'bulk_actions-%s', $orderListScreenId ),
524 [
525 $this->orderBulkActions,
526 'addActions',
527 ],
528 20
529 );
530 // Execute the action for selected orders.
531 $this->wpAdapter->addFilter(
532 'handle_bulk_actions-edit-shop_order',
533 [
534 $this->orderBulkActions,
535 'handleActions',
536 ],
537 10,
538 3
539 );
540 $this->wpAdapter->addFilter(
541 sprintf( 'handle_bulk_actions-%s', $orderListScreenId ),
542 [
543 $this->orderBulkActions,
544 'handleActions',
545 ],
546 10,
547 3
548 );
549 // Print packets export result.
550 $this->wpAdapter->addAction(
551 'admin_notices',
552 [
553 $this->orderBulkActions,
554 'renderPacketsExportResult',
555 ],
556 self::MIN_LISTENER_PRIORITY
557 );
558 $this->wpAdapter->addAction( 'admin_init', [ $this->labelPrint, 'outputLabelsPdf' ] );
559 $this->wpAdapter->addAction( 'admin_init', [ $this->orderCollectionPrint, 'print' ] );
560
561 $this->wpAdapter->addAction( 'admin_init', [ $this->exporter, 'outputExportTxt' ] );
562 $this->wpAdapter->addAction( 'admin_init', [ $this->diagnosticsLogger, 'deletePacketaLog' ] );
563 $this->wpAdapter->addAction( 'admin_init', [ $this->pluginHooks, 'handleActions' ] );
564
565 $this->wpAdapter->addAction( 'deleted_post', [ $this->orderRepository, 'deletedPostHook' ], 10, 2 );
566 $this->dashboardWidget->register();
567 } else {
568 // For blocks, used at frontend.
569 $this->wpAdapter->addAction( 'wp_ajax_get_settings', [ $this->checkoutSettings, 'actionCreateSettingsAjax' ] );
570 $this->wpAdapter->addAction(
571 'wp_ajax_nopriv_get_settings',
572 [
573 $this->checkoutSettings,
574 'actionCreateSettingsAjax',
575 ]
576 );
577 }
578 }
579
580 private function registerFrontEnd(): void {
581 $this->checkout->registerHooks();
582
583 $this->wpAdapter->addAction( 'wp_enqueue_scripts', [ $this->assetManager, 'enqueueFrontAssets' ] );
584 $this->wpAdapter->addAction(
585 'woocommerce_cart_calculate_fees',
586 [
587 $this->checkout,
588 'actionCalculateFees',
589 ],
590 20
591 );
592 $this->wpAdapter->addAction(
593 'woocommerce_guest_session_to_user_id',
594 [
595 $this->checkoutStorage,
596 'migrateGuestSessionToUserSession',
597 ]
598 );
599
600 if ( $this->wpAdapter->doingAjax() === false ) {
601 $this->wpAdapter->addAction( 'woocommerce_order_details_after_order_table', [ $this->viewFrontend, 'renderOrderDetail' ] );
602
603 $this->wpAdapter->addAction( 'init', [ $this->blockHooks, 'register' ] );
604 // Cannot be moved to BlockHooks register.
605 $this->wpAdapter->addAction( 'woocommerce_blocks_loaded', [ $this->blockHooks, 'orderUpdateCallback' ] );
606 }
607 }
608
609 public function addLinksToPluginGrid(): void {
610 $this->wpAdapter->addFilter(
611 'plugin_action_links_' . $this->wpAdapter->pluginBasename( ModuleHelper::getPluginMainFilePath() ),
612 [ $this->pluginHooks, 'addPluginActionLinks' ]
613 );
614 $this->wpAdapter->addFilter( 'plugin_row_meta', [ $this->pluginHooks, 'addPluginRowMeta' ], 10, 2 );
615 }
616
617 /**
618 * Adds Packeta method to available shipping methods.
619 *
620 * @param array<string, string> $methods Previous state.
621 *
622 * @return array<string, string>
623 */
624 public function addShippingMethods( array $methods ): array {
625 if ( $this->optionsProvider->isWcCarrierConfigEnabled() ) {
626 return $this->shippingProvider->getSortedCachedMethods( $methods );
627 }
628
629 $methods[ ShippingMethod::PACKETERY_METHOD_ID ] = ShippingMethod::class;
630
631 return $methods;
632 }
633
634 /**
635 * Add links to left admin menu.
636 */
637 public function addMenuPages(): void {
638 $this->optionsPage->registerMenuPage();
639 $this->dashboardPage->register();
640 $this->optionsPage->registerSubmenuPage();
641 $this->carrierOptionsPage->register();
642 $this->labelPrint->register();
643 $this->orderCollectionPrint->register();
644 $this->logPage->register();
645 }
646
647 public function activatePlugin(): void {
648 $this->wpAdapter->updateOption( OptionNames::PACKETERY_ACTIVATED, true );
649 }
650
651 public function redirectAfterActivation(): void {
652 if ( (bool) $this->wpAdapter->getOption( OptionNames::PACKETERY_ACTIVATED ) === true ) {
653 $this->wpAdapter->deleteOption( OptionNames::PACKETERY_ACTIVATED );
654 $this->wpAdapter->safeRedirect( $this->wpAdapter->adminUrl( 'admin.php?page=' . DashboardPage::SLUG ) );
655 exit;
656 }
657 }
658 }
659