| 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 |
|