initTwig(); $this->initComponents(); $this->registerHooks(); } /** * Initialize Twig environment */ private function initTwig(): void { $loader = new FilesystemLoader(WC_LICENSED_PRODUCT_PLUGIN_DIR . 'templates'); $this->twig = new Environment($loader, [ 'cache' => WP_CONTENT_DIR . '/cache/wc-licensed-product/twig', 'auto_reload' => WP_DEBUG, ]); // Add WordPress functions as Twig functions $this->twig->addFunction(new \Twig\TwigFunction('__', function (string $text, string $domain = 'wc-licensed-product'): string { return __($text, $domain); })); $this->twig->addFunction(new \Twig\TwigFunction('esc_html', 'esc_html')); $this->twig->addFunction(new \Twig\TwigFunction('esc_attr', 'esc_attr')); $this->twig->addFunction(new \Twig\TwigFunction('esc_url', 'esc_url')); $this->twig->addFunction(new \Twig\TwigFunction('wp_nonce_field', 'wp_nonce_field', ['is_safe' => ['html']])); $this->twig->addFunction(new \Twig\TwigFunction('admin_url', 'admin_url')); $this->twig->addFunction(new \Twig\TwigFunction('wc_get_endpoint_url', 'wc_get_endpoint_url')); } /** * Initialize plugin components */ private function initComponents(): void { $this->licenseManager = new LicenseManager(); $this->versionManager = new VersionManager(); // Initialize controllers new LicensedProductType(); new CheckoutController($this->licenseManager); $this->downloadController = new DownloadController($this->licenseManager, $this->versionManager); new AccountController($this->twig, $this->licenseManager, $this->versionManager, $this->downloadController); new RestApiController($this->licenseManager); new LicenseEmailController($this->licenseManager); if (is_admin()) { new AdminController($this->twig, $this->licenseManager); new VersionAdminController($this->versionManager); new SettingsController(); } } /** * Register plugin hooks */ private function registerHooks(): void { // Generate license on order completion add_action('woocommerce_order_status_completed', [$this, 'onOrderCompleted']); } /** * Handle order completion - generate licenses */ public function onOrderCompleted(int $orderId): void { $order = wc_get_order($orderId); if (!$order) { return; } foreach ($order->get_items() as $item) { $product = $item->get_product(); if ($product && $product->is_type('licensed')) { $domain = $order->get_meta('_licensed_product_domain'); if ($domain) { $this->licenseManager->generateLicense( $orderId, $product->get_id(), $order->get_customer_id(), $domain ); } } } } /** * Get Twig environment */ public function getTwig(): Environment { return $this->twig; } /** * Get license manager */ public function getLicenseManager(): LicenseManager { return $this->licenseManager; } /** * Render a Twig template */ public function render(string $template, array $context = []): string { return $this->twig->render($template, $context); } }