<?php declare(strict_types=1); namespace WPDesk\Init\Extension; use DI\Definition\Helper\AutowireDefinitionHelper; use Monolog\Formatter\LineFormatter; use Monolog\Logger; use Monolog\Processor\PsrLogMessageProcessor; use Monolog\Processor\UidProcessor; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; use WPDesk\Init\Binding\Loader\ArrayDefinitions; use WPDesk\Init\Binding\Loader\BindingDefinitions; use WPDesk\Init\Configuration\ReadableConfig; use WPDesk\Init\DependencyInjection\ContainerBuilder; use WPDesk\Init\Extension\CommonBinding\WPDeskLicenseBridge; use WPDesk\Init\Extension\CommonBinding\WPDeskTrackerBridge; use WPDesk\Init\Plugin\Plugin; use WPDesk\Logger\WC\WooCommerceHandler; class ConditionalExtension implements Extension { public function bindings( ContainerInterface $c ): BindingDefinitions { $bindings = []; if ( class_exists( \WPDesk\License\PluginRegistrator::class ) ) { $bindings[] = WPDeskLicenseBridge::class; } if ( class_exists( \WPDesk_Tracker::class ) ) { $bindings[] = WPDeskTrackerBridge::class; } return new ArrayDefinitions( $bindings ); } public function build( ContainerBuilder $builder, Plugin $plugin, ReadableConfig $config ): void { $definitions = []; if ( class_exists( \WPDesk\License\PluginRegistrator::class ) ) { $definitions[ WPDeskLicenseBridge::class ] = new AutowireDefinitionHelper(); } if ( class_exists( \WPDesk_Tracker::class ) ) { $definitions[ WPDeskTrackerBridge::class ] = new AutowireDefinitionHelper(); } if ( class_exists( \WPDesk\Logger\WC\WooCommerceHandler::class ) ) { $definitions[ LoggerInterface::class ] = static function () use ( $plugin ) { $logger = new Logger( $plugin->get_slug(), [], [ new PsrLogMessageProcessor( null, true ), new UidProcessor() ] ); $attach_handler = function () use ( $logger, $plugin ) { $handler = new WooCommerceHandler( wc_get_logger(), $plugin->get_slug() ); $handler->setFormatter( new LineFormatter( '%channel%.%level_name% [%extra.uid%]: %message% %context% %extra%' ) ); $logger->pushHandler( $handler ); }; if ( \function_exists( 'wc_get_logger' ) ) { $attach_handler(); } else { \add_action( 'woocommerce_init', $attach_handler ); } return $logger; }; } $builder->add_definitions( $definitions ); } }