AbstractShippingProvider.php
<?php declare(strict_types=1);
namespace Automattic\WooCommerce\Admin\Features\Fulfillments\Providers;
/**
* Abstract class for shipping providers.
*
* This class defines the basic structure and methods that all shipping providers must implement.
*/
abstract class AbstractShippingProvider {
/**
* Get the key of the shipping provider.
*
* @return string
*/
abstract public function get_key(): string;
/**
* Get the name of the shipping provider.
*
* @return string
*/
abstract public function get_name(): string;
/**
* Get the path of the icon of the shipping provider.
*
* @return string
*/
abstract public function get_icon(): string;
/**
* Get the tracking URL for a given tracking number.
*
* @param string $tracking_number The tracking number.
* @return string The tracking URL.
*/
abstract public function get_tracking_url( string $tracking_number ): string;
/**
* Get the countries from which the shipping provider can ship.
*
* @return array An array of country codes.
*/
public function get_shipping_from_countries(): array {
return array();
}
/**
* Get the countries to which the shipping provider can ship.
*
* @return array An array of country codes.
*/
public function get_shipping_to_countries(): array {
return array();
}
/**
* Check if the shipping provider can ship from a specific country.
*
* @param string $country_code The country code to check.
* @return bool True if the provider can ship from the country, false otherwise.
*/
public function can_ship_from( string $country_code ): bool {
return in_array( $country_code, $this->get_shipping_from_countries(), true );
}
/**
* Check if the shipping provider can ship to a specific country.
*
* @param string $country_code The country code to check.
* @return bool True if the provider can ship to the country, false otherwise.
*/
public function can_ship_to( string $country_code ): bool {
return in_array( $country_code, $this->get_shipping_to_countries(), true );
}
/**
* Check if the shipping provider can ship from a specific country to another.
*
* @param string $shipping_from The country code from which the shipment is sent.
* @param string $shipping_to The country code to which the shipment is sent.
* @return bool True if the provider can ship from the source to the destination, false otherwise.
*/
public function can_ship_from_to( string $shipping_from, string $shipping_to ): bool {
return $this->can_ship_from( $shipping_from ) && $this->can_ship_to( $shipping_to );
}
/**
* Get the tracking URL for a given tracking number with additional parameters.
*
* @param string $tracking_number The tracking number.
* @param string $shipping_from The country code from which the shipment is sent.
* @param string $shipping_to The country code to which the shipment is sent.
*
* @return array|null The tracking URL with ambiguity score, or null if parsing fails.
*
* phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter
*/
public function try_parse_tracking_number( string $tracking_number, string $shipping_from, string $shipping_to ): ?array {
return null; // Default implementation returns null, subclasses should override this method.
}
}