ACSCourierShippingProvider.php
3 months ago
AbstractShippingProvider.php
3 months ago
AmazonLogisticsShippingProvider.php
3 months ago
AnPostShippingProvider.php
3 months ago
ArasKargoShippingProvider.php
3 months ago
AustraliaPostShippingProvider.php
3 months ago
AzerpostShippingProvider.php
3 months ago
BartoliniBRTShippingProvider.php
3 months ago
BelpochtaShippingProvider.php
3 months ago
BpostShippingProvider.php
3 months ago
BulgarianPostsShippingProvider.php
3 months ago
CDEKShippingProvider.php
3 months ago
CTTShippingProvider.php
3 months ago
CanadaPostShippingProvider.php
3 months ago
CeskaPostaShippingProvider.php
3 months ago
ChronopostShippingProvider.php
3 months ago
CorreosShippingProvider.php
3 months ago
CustomShippingProvider.php
3 months ago
CyprusPostShippingProvider.php
3 months ago
DHLShippingProvider.php
3 months ago
DPDShippingProvider.php
3 months ago
DeutschePostShippingProvider.php
3 months ago
ELTAShippingProvider.php
3 months ago
EcontShippingProvider.php
3 months ago
EimskipShippingProvider.php
3 months ago
EvriHermesShippingProvider.php
3 months ago
FanCourierShippingProvider.php
3 months ago
FastwayShippingProvider.php
3 months ago
FedExShippingProvider.php
3 months ago
GLSShippingProvider.php
3 months ago
GenikiTaxydromikiShippingProvider.php
3 months ago
HayPostShippingProvider.php
3 months ago
HelthjemShippingProvider.php
3 months ago
HrvatskaPostaShippingProvider.php
3 months ago
InPostShippingProvider.php
3 months ago
IslandsposturShippingProvider.php
3 months ago
ItellaShippingProvider.php
3 months ago
KazpostShippingProvider.php
3 months ago
LaPosteColissimoShippingProvider.php
3 months ago
LasershipOntracShippingProvider.php
3 months ago
LatvijasPastsShippingProvider.php
3 months ago
LiechtensteinischePostShippingProvider.php
3 months ago
MPLShippingProvider.php
3 months ago
MRWShippingProvider.php
3 months ago
MagyarPostaShippingProvider.php
3 months ago
MakedonskaPostaShippingProvider.php
3 months ago
MaltaPostShippingProvider.php
3 months ago
MatkahuoltoShippingProvider.php
3 months ago
MondialRelayShippingProvider.php
3 months ago
NewZealandPostShippingProvider.php
3 months ago
NovaPoshtaShippingProvider.php
3 months ago
OmnivaShippingProvider.php
3 months ago
OsterreichischePostShippingProvider.php
3 months ago
ParcelForceShippingProvider.php
3 months ago
PocztaPolskaShippingProvider.php
3 months ago
PostLuxembourgShippingProvider.php
3 months ago
PostNLShippingProvider.php
3 months ago
PostNordShippingProvider.php
3 months ago
PostaMoldoveiShippingProvider.php
3 months ago
PostaRomanaShippingProvider.php
3 months ago
PosteItalianeShippingProvider.php
3 months ago
PosteSanMarinoShippingProvider.php
3 months ago
PostenNorgeBringShippingProvider.php
3 months ago
PurolatorShippingProvider.php
3 months ago
RoyalMailShippingProvider.php
3 months ago
RussianPostShippingProvider.php
3 months ago
SDAShippingProvider.php
3 months ago
SeurShippingProvider.php
3 months ago
SlovenskaPostaShippingProvider.php
3 months ago
SpeeDeeDeliveryShippingProvider.php
3 months ago
StarTrackShippingProvider.php
3 months ago
SwissPostShippingProvider.php
3 months ago
TollShippingProvider.php
3 months ago
UPSShippingProvider.php
3 months ago
USPSShippingProvider.php
3 months ago
UkrposhtaShippingProvider.php
3 months ago
UrgentCargusShippingProvider.php
3 months ago
YurticiKargoShippingProvider.php
3 months ago
ZasilkovnaShippingProvider.php
3 months ago
CustomShippingProvider.php
115 lines
| 1 | <?php declare(strict_types=1); |
| 2 | |
| 3 | namespace Automattic\WooCommerce\Admin\Features\Fulfillments\Providers; |
| 4 | |
| 5 | /** |
| 6 | * Custom shipping provider loaded from the wc_fulfillment_shipping_provider taxonomy. |
| 7 | * |
| 8 | * Unlike built-in providers, custom providers do not support automatic tracking |
| 9 | * number parsing; they rely on user-supplied tracking URL templates. |
| 10 | * |
| 11 | * @since 10.7.0 |
| 12 | */ |
| 13 | class CustomShippingProvider extends AbstractShippingProvider { |
| 14 | |
| 15 | /** |
| 16 | * The provider key (taxonomy term slug). |
| 17 | * |
| 18 | * @var string |
| 19 | */ |
| 20 | private string $key; |
| 21 | |
| 22 | /** |
| 23 | * The provider display name. |
| 24 | * |
| 25 | * @var string |
| 26 | */ |
| 27 | private string $name; |
| 28 | |
| 29 | /** |
| 30 | * The provider icon URL. |
| 31 | * |
| 32 | * @var string |
| 33 | */ |
| 34 | private string $icon; |
| 35 | |
| 36 | /** |
| 37 | * The tracking URL template containing __PLACEHOLDER__ for the tracking number. |
| 38 | * |
| 39 | * @var string |
| 40 | */ |
| 41 | private string $tracking_url_template; |
| 42 | |
| 43 | /** |
| 44 | * Constructor. |
| 45 | * |
| 46 | * @param string $key The provider key (term slug). |
| 47 | * @param string $name The provider display name. |
| 48 | * @param string $icon The provider icon URL. |
| 49 | * @param string $tracking_url_template The tracking URL template. |
| 50 | */ |
| 51 | public function __construct( string $key, string $name, string $icon, string $tracking_url_template ) { |
| 52 | $this->key = $key; |
| 53 | $this->name = $name; |
| 54 | $this->icon = $icon; |
| 55 | $this->tracking_url_template = $tracking_url_template; |
| 56 | } |
| 57 | |
| 58 | /** |
| 59 | * Get the key of the shipping provider. |
| 60 | * |
| 61 | * @return string |
| 62 | */ |
| 63 | public function get_key(): string { |
| 64 | return $this->key; |
| 65 | } |
| 66 | |
| 67 | /** |
| 68 | * Get the name of the shipping provider. |
| 69 | * |
| 70 | * @return string |
| 71 | */ |
| 72 | public function get_name(): string { |
| 73 | return $this->name; |
| 74 | } |
| 75 | |
| 76 | /** |
| 77 | * Get the icon URL of the shipping provider. |
| 78 | * |
| 79 | * @return string |
| 80 | */ |
| 81 | public function get_icon(): string { |
| 82 | return $this->icon; |
| 83 | } |
| 84 | |
| 85 | /** |
| 86 | * Get the tracking URL for a given tracking number. |
| 87 | * |
| 88 | * Replaces __PLACEHOLDER__ in the template with the actual tracking number. |
| 89 | * |
| 90 | * @param string $tracking_number The tracking number. |
| 91 | * @return string The tracking URL with the placeholder replaced. |
| 92 | */ |
| 93 | public function get_tracking_url( string $tracking_number ): string { |
| 94 | if ( empty( $this->tracking_url_template ) ) { |
| 95 | return ''; |
| 96 | } |
| 97 | |
| 98 | return str_replace( '__PLACEHOLDER__', rawurlencode( $tracking_number ), $this->tracking_url_template ); |
| 99 | } |
| 100 | |
| 101 | /** |
| 102 | * Custom providers do not support automatic tracking number parsing. |
| 103 | * |
| 104 | * @param string $tracking_number The tracking number. |
| 105 | * @param string $shipping_from The country code from which the shipment is sent. |
| 106 | * @param string $shipping_to The country code to which the shipment is sent. |
| 107 | * @return array|null Always returns null for custom providers. |
| 108 | * |
| 109 | * phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter |
| 110 | */ |
| 111 | public function try_parse_tracking_number( string $tracking_number, string $shipping_from, string $shipping_to ): ?array { |
| 112 | return null; |
| 113 | } |
| 114 | } |
| 115 |