From f204711eb44f192fd2c9c1d285b64bd8505a0a0b Mon Sep 17 00:00:00 2001
From: Bart Jaskulski <bjaskulski@protonmail.com>
Date: Mon, 30 Sep 2024 20:43:12 +0200
Subject: [PATCH] feat: adjust tracker bridge to wp-wpdesk-tracker v4

Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com>
---
 composer.json                                 |  4 +-
 .../CommonBinding/WPDeskLicenseBridge.php     | 58 ++++++++++++-------
 src/Extension/ConditionalExtension.php        |  8 ++-
 3 files changed, 44 insertions(+), 26 deletions(-)

diff --git a/composer.json b/composer.json
index 00244f6..bb5d322 100644
--- a/composer.json
+++ b/composer.json
@@ -44,6 +44,7 @@
     "symfony/filesystem": "^5.4 || ^6.2",
     "wpdesk/phpstan-rules": "^1.1",
     "wpdesk/wp-basic-requirements": "^3",
+    "wpdesk/wp-wpdesk-license": "^4",
     "wpdesk/wp-builder": "^2.0",
 	"wpdesk/wp-code-sniffer": "^1.3"
   },
@@ -51,7 +52,8 @@
     "wpdesk/wp-basic-requirements": "Enables your plugin to check an environment requirement before instantiation, e.g. PHP version or active plugins"
   },
   "conflict": {
-    "wpdesk/wp-basic-requirements": "<3 >=4"
+    "wpdesk/wp-basic-requirements": "<3 >=4",
+    "wpdesk/wp-wpdesk-license": "<4 >=5"
   },
   "scripts": {
     "test": "vendor/bin/phpunit --bootstrap tests/bootstrap.php ./tests"
diff --git a/src/Extension/CommonBinding/WPDeskLicenseBridge.php b/src/Extension/CommonBinding/WPDeskLicenseBridge.php
index 55db2c7..51d4534 100644
--- a/src/Extension/CommonBinding/WPDeskLicenseBridge.php
+++ b/src/Extension/CommonBinding/WPDeskLicenseBridge.php
@@ -1,42 +1,56 @@
 <?php
+declare(strict_types=1);
 
 namespace WPDesk\Init\Extension\CommonBinding;
 
+use Psr\Log\LoggerInterface;
 use WPDesk\Init\Binding\Hookable;
 use WPDesk\Init\Plugin\Plugin;
-use WPDesk\License\PluginRegistrator;
+use WPDesk\License\LicenseServer\PluginRegistrator;
+use WPDesk\License\LicenseServer\PluginVersionInfo;
 
 class WPDeskLicenseBridge implements Hookable {
 
-	/** @var \WPDesk_Plugin_Info */
-	private $plugin_info;
+	private Plugin $plugin;
 
-	private $registrator;
+	private string $product_id;
 
-	public function __construct( \WPDesk_Plugin_Info $plugin_info ) {
-		$this->plugin_info = $plugin_info;
+	/** @var string[] */
+	private array $shops;
+
+	private LoggerInterface $logger;
+
+	public function __construct(
+		Plugin $plugin,
+		string $product_id,
+		array $shops,
+		LoggerInterface $logger
+	) {
+		$this->plugin     = $plugin;
+		$this->product_id = $product_id;
+		$this->shops      = $shops;
+		$this->logger     = $logger;
 	}
 
 	public function hooks(): void {
-		$this->registrator = $this->register_plugin();
-		// add_action('plugins_loaded', $this);
+		add_action( 'plugins_loaded', $this, -50 );
 	}
 
-	public function __invoke(): void {
-		$is_plugin_subscription_active = $this->registrator instanceof PluginRegistrator && $this->registrator->is_active();
-		if ( $this->plugin instanceof ActivationAware && $is_plugin_subscription_active ) {
-			$this->plugin->set_active();
+	public function __invoke() {
+		// Backward compatibility with wp-builder hook.
+		if ( apply_filters( 'wpdesk_can_register_plugin', true, $this->plugin ) === false ) {
+			return;
 		}
 
+		$plugin_info = new PluginVersionInfo(
+			$this->plugin->get_name(),
+			$this->plugin->get_version(),
+			$this->product_id,
+			$this->plugin->get_slug(),
+			$this->plugin->get_basename(),
+			$this->shops
+		);
+		$registrator = new PluginRegistrator( $plugin_info );
+		$registrator->initialize_license_manager();
 	}
-
-	private function register_plugin() {
-		if ( apply_filters( 'wpdesk_can_register_plugin', true, $this->plugin_info ) ) {
-			$registrator = new PluginRegistrator( $this->plugin_info );
-			$registrator->initialize_license_manager();
-
-			return $registrator;
-		}
-	}
-
 }
diff --git a/src/Extension/ConditionalExtension.php b/src/Extension/ConditionalExtension.php
index 6ecf12f..4d2a64e 100644
--- a/src/Extension/ConditionalExtension.php
+++ b/src/Extension/ConditionalExtension.php
@@ -30,7 +30,7 @@ class ConditionalExtension implements Extension {
 			$bindings[] = RequirementsCheck::class;
 		}
 
-		if ( class_exists( \WPDesk\License\PluginRegistrator::class ) ) {
+		if ( class_exists( \WPDesk\License\LicenseServer\PluginRegistrator::class ) ) {
 			$bindings[] = WPDeskLicenseBridge::class;
 		}
 
@@ -48,8 +48,10 @@ class ConditionalExtension implements Extension {
 			$definitions[ RequirementsCheck::class ] = new AutowireDefinitionHelper();
 		}
 
-		if ( class_exists( \WPDesk\License\PluginRegistrator::class ) ) {
-			$definitions[ WPDeskLicenseBridge::class ] = new AutowireDefinitionHelper();
+		if ( class_exists( \WPDesk\License\LicenseServer\PluginRegistrator::class ) ) {
+			$definitions[ WPDeskLicenseBridge::class ] = ( new AutowireDefinitionHelper() )
+				->constructorParameter( 'proudct_id', $config->get( 'product_id' ) )
+				->constructorParameter( 'shops', (array) $config->get( 'shops', [] ) );
 		}
 
 		if ( class_exists( \WPDesk_Tracker::class ) ) {
-- 
GitLab