PluginProbe
PostNL for WooCommerce / 4.4.0
PostNL for WooCommerce v4.4.0
5.9.12 5.9.11 5.9.10 5.9.9 5.9.8 5.9.7 5.9.6 trunk 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 3.1.4 3.1.5 3.1.6 3.1.7 4.0.0 4.0.1 4.0.2 4.3.2 4.3.3 4.4.0 4.4.1 All 72 releases
woo-postnl / includes / frontend / class-wcpn-frontend-track-trace.php

class-wcpn-frontend-track-trace.php in PostNL for WooCommerce 4.4.0, at includes/frontend/class-wcpn-frontend-track-trace.php

103 lines 2.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 use WPO\WC\PostNL\Compatibility\Order as WCX_Order;
4 use WPO\WC\PostNL\Compatibility\WCPN_WCPDF_Compatibility;
5
6 if (! defined('ABSPATH')) {
7 exit;
8 } // Exit if accessed directly
9
10 if (class_exists('WCPN_Frontend_Track_Trace')) {
11 return;
12 }
13
14 /**
15 * Track & Trace
16 */
17 class WCPN_Frontend_Track_Trace
18 {
19 public function __construct()
20 {
21 // Customer Emails
22 add_action("woocommerce_email_before_order_table", [$this, "addTrackTraceToEmail"], 10, 2);
23
24 // Track & Trace in my account
25 add_filter("woocommerce_my_account_my_orders_actions", [$this, "showTrackTraceActionInMyAccount"], 10, 2);
26
27 WCPN_WCPDF_Compatibility::add_filters();
28 }
29
30 /**
31 * Filter the emails sent to customers, adding Track & Trace link(s) if related order is completed.
32 *
33 * @param WC_Order $order
34 * @param bool $sentToAdmin
35 *
36 * @throws Exception
37 */
38 public function addTrackTraceToEmail(WC_Order $order, bool $sentToAdmin): void
39 {
40 if (! WCPOST()->setting_collection->isEnabled(WCPOST_Settings::SETTING_TRACK_TRACE_EMAIL)) {
41 return;
42 }
43
44 if ($sentToAdmin || WCX_Order::get_status($order) !== "completed") {
45 return;
46 }
47
48 $orderId = WCX_Order::get_id($order);
49 $trackTraceLinks = WCPN_Frontend::getTrackTraceLinks($orderId);
50
51 if (empty($trackTraceLinks)) {
52 return;
53 }
54
55 $createLinkCallback = function ($trackTrace) {
56 return sprintf('<a href="%s">%s</a>', $trackTrace["url"], $trackTrace["link"]);
57 };
58
59 printf(
60 '<p>%s %s</p>',
61 apply_filters(
62 "wcpostnl_email_text",
63 __("You can track your order with the following Track & Trace link:", "woocommerce-postnl"),
64 $order
65 ),
66 implode(
67 '<br />',
68 array_map($createLinkCallback, $trackTraceLinks)
69 )
70 );
71 }
72
73 /**
74 * @param array $actions
75 * @param WC_Order $order
76 *
77 * @return array
78 * @throws Exception
79 */
80 public function showTrackTraceActionInMyAccount(array $actions, WC_Order $order): array
81 {
82 if (! WCPOST()->setting_collection->isEnabled(WCPOST_Settings::SETTING_TRACK_TRACE_MY_ACCOUNT)) {
83 return $actions;
84 }
85
86 $order_id = WCX_Order::get_id($order);
87
88 $consignments = WCPN_Frontend::getTrackTraceLinks($order_id);
89
90 foreach ($consignments as $key => $consignment) {
91 $actions['postnl_tracktrace_' . $consignment['link']] = [
92 'url' => $consignment['url'],
93 'name' => apply_filters(
94 'wcpostnl_myaccount_tracktrace_button',
95 __('Track & Trace', 'woocommerce-postnl')
96 ),
97 ];
98 }
99
100 return $actions;
101 }
102 }
103