/home/sylamedg/www/wp-content/plugins/woo-usps-simple-shipping/src/Plugin.php
<?php
namespace Dgm\UspsSimple;
use Automattic\WooCommerce\Utilities\FeaturesUtil;
class Plugin {
public const WOO_ID = 'usps_simple';
public static function init(string $pluginFile): void {
if (isset(self::$instance)) {
if (self::$instance->pluginFile !== $pluginFile) {
throw new \LogicException('plugin initialized more than one with different parameters');
}
return;
}
self::$instance = new self($pluginFile);
}
public static function instance(): self {
if (!isset(self::$instance)) {
throw new \LogicException('plugin is not initialized yet');
}
return self::$instance;
}
public function createDebug(): Debug
{
return Debug::default($this->pluginFile);
}
/** @var string */
private $pluginFile;
private function __construct(string $pluginFile) {
$this->pluginFile = $pluginFile;
self::declareHposCompat($pluginFile);
self::registerShippingMethod();
ShippingMethod::handleStorePostcodeChange();
self::registerPluginActionLink($pluginFile);
}
/**
* @var self
*/
private static $instance;
/** @noinspection PhpSameParameterValueInspection */
private static function shippingUrl(string $section = null): string
{
$query = array(
"page" => "wc-settings",
"tab" => "shipping",
);
if (isset($section)) {
$query['section'] = $section;
}
$query = http_build_query($query, '', '&');
return admin_url("admin.php?$query");
}
private static function prependPluginActions(array $current, array $new): array {
foreach ($new as $url => &$label) {
$label = '<a href="'.esc_html($url).'">'.esc_html($label).'</a>';
}
unset($label);
array_splice($current, 0, 0, $new);
return $current;
}
private static function registerShippingMethod(): void {
add_filter('woocommerce_shipping_methods', static function(array $methods) {
$methods[] = ShippingMethod::class;
return $methods;
});
}
private static function declareHposCompat(string $pluginFile): void {
add_action('before_woocommerce_init', static function() use($pluginFile) {
if (class_exists(FeaturesUtil::class)) {
FeaturesUtil::declare_compatibility('custom_order_tables', $pluginFile, true);
}
});
}
private static function registerPluginActionLink(string $pluginFile): void {
add_filter('plugin_action_links_' . plugin_basename($pluginFile), static function(array $links) {
return self::prependPluginActions($links, [
self::shippingUrl(Plugin::WOO_ID) => __('Settings', 'woo-usps-simple-shipping')
]);
});
}
}