<?php declare(strict_types=1); namespace WPDesk\Init\Extension; use DI\Definition\Helper\AutowireDefinitionHelper; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; use WPDesk\Init\Binding\Loader\ArrayDefinitions; use WPDesk\Init\Binding\Loader\BindingDefinitions; use WPDesk\Init\Configuration\Configuration; use WPDesk\Init\Configuration\ReadableConfig; use WPDesk\Init\DependencyInjection\ContainerBuilder; use WPDesk\Init\Extension\CommonBinding\RequirementsCheck; use WPDesk\Init\Extension\CommonBinding\WPDeskLicenseBridge; use WPDesk\Init\Extension\CommonBinding\WPDeskTrackerBridge; use WPDesk\Init\Plugin\Plugin; use WPDesk\Logger\SimpleLoggerFactory; class ConditionalExtension implements Extension { public function bindings( ContainerInterface $c ): BindingDefinitions { $config = $c->get( Configuration::class ); $bindings = []; if ( class_exists( \WPDesk_Basic_Requirement_Checker::class ) ) { $bindings[] = [ 'priority' => -10, 'handler' => RequirementsCheck::class, ]; } if ( class_exists( \WPDesk\License\LicenseServer\PluginRegistrator::class ) ) { $bindings[] = WPDeskLicenseBridge::class; } if ( class_exists( \WPDesk_Tracker::class ) ) { $bindings['plugins_loaded'] = WPDeskTrackerBridge::class; } return new ArrayDefinitions( $bindings ); } public function build( ContainerBuilder $builder, Plugin $plugin, ReadableConfig $config ): void { $definitions = []; if ( class_exists( \WPDesk_Basic_Requirement_Checker::class ) ) { $definitions[ RequirementsCheck::class ] = new AutowireDefinitionHelper(); } if ( class_exists( \WPDesk\License\LicenseServer\PluginRegistrator::class ) ) { $definitions[ WPDeskLicenseBridge::class ] = ( new AutowireDefinitionHelper() ) ->constructorParameter( 'product_id', $config->get( 'product_id' ) ) ->constructorParameter( 'shops', (array) $config->get( 'shops', [] ) ); } if ( class_exists( \WPDesk_Tracker::class ) ) { $definitions[ WPDeskTrackerBridge::class ] = new AutowireDefinitionHelper(); } if ( class_exists( \WPDesk\Logger\SimpleLoggerFactory::class ) ) { $definitions[ LoggerInterface::class ] = static function ( ContainerInterface $c ) { $p = $c->get( Plugin::class ); return ( new SimpleLoggerFactory( $p->get_slug(), [ 'level' => $c->has( 'logger.level' ) ? $c->get( 'logger.level' ) : 'debug', 'action_level' => $c->has( 'logger.action_level' ) ? $c->get( 'logger.action_level' ) : null, ] ) )->getLogger(); }; } $builder->add_definitions( $definitions ); } }