Skip to content
Snippets Groups Projects
Verified Commit 21716a64 authored by Bartek Jaskulski's avatar Bartek Jaskulski
Browse files

feat: manually discover, which extensions to enable

parent 96934a31
Branches
Tags
2 merge requests!3improve into wp-hook and some additional unfinished things,!21.x
<?php
namespace WPDesk\Init\Extension\CommonBinding;
use WPDesk\Init\Binding\Hookable;
use WPDesk\Init\Plugin\Plugin;
class CustomOrdersTableCompatibility implements Hookable {
/** @var Plugin */
private $plugin;
public function __construct( Plugin $plugin ) {
$this->plugin = $plugin;
}
public function hooks(): void {
add_action('before_woocommerce_init', $this);
}
public function __invoke(): void {
$features_util_class = '\\' . 'Automattic' . '\\' . 'WooCommerce' . '\\' . 'Utilities' . '\\' . 'FeaturesUtil';
if ( class_exists( $features_util_class ) ) {
$features_util_class::declare_compatibility(
'custom_order_tables',
$this->plugin->get_basename(),
true
);
}
}
}
......@@ -16,13 +16,13 @@ class I18n implements Hookable {
public function hooks(): void {
if ( did_action( 'plugins_loaded' ) ) {
$this->load_textdomain();
$this->__invoke();
} else {
add_action( 'plugins_loaded', [ $this, 'load_textdomain' ] );
add_action( 'plugins_loaded', $this );
}
}
public function load_textdomain(): void {
public function __invoke(): void {
\load_plugin_textdomain(
$this->plugin->get_slug(),
false,
......
<?php
namespace WPDesk\Init\Extension\CommonBinding;
use WPDesk\Init\Binding\Hookable;
use WPDesk\Init\Plugin\Plugin;
use WPDesk\License\PluginRegistrator;
class WPDeskLicenseBridge implements Hookable {
/** @var \WPDesk_Plugin_Info */
private $plugin_info;
private $registrator;
public function __construct( \WPDesk_Plugin_Info $plugin_info ) {
$this->plugin_info = $plugin_info;
}
public function hooks(): void {
$this->registrator = $this->register_plugin();
// add_action('plugins_loaded', $this);
}
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();
}
}
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;
}
}
}
<?php
namespace WPDesk\Init\Extension\CommonBinding;
use WPDesk\Init\Binding\Hookable;
use WPDesk\Init\Plugin\Plugin;
class WPDeskTrackerBridge implements Hookable {
/** @var Plugin */
private $plugin;
public function __construct( Plugin $plugin ) {
$this->plugin = $plugin;
}
public function hooks(): void {
$tracker_factory = new \WPDesk_Tracker_Factory_Prefixed();
$tracker_factory->create_tracker( $this->plugin->get_basename() );
}
}
<?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\ArrayBindingLoader;
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 ArrayBindingLoader( $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 );
}
}
<?php
declare(strict_types=1);
namespace WPDesk\Init\Extension;
use WPDesk\Init\Configuration\ReadableConfig;
use WPDesk\Init\DependencyInjection\ContainerBuilder;
use WPDesk\Init\Plugin\Plugin;
class LoggerExtension {
public function build( ContainerBuilder $builder, Plugin $plugin, ReadableConfig $config ): void {
$builder->add_definitions(
[
LoggerInterface::class => new NullLogger(),
]
);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment