<?php /** * This file have to be compatible with PHP >=7.0 to gracefully handle outdated client's websites. */ namespace WPDesk\Init; use WPDesk\Init\Extension\LegacyExtension; use WPDesk\Init\Extension\BuiltinExtension; use WPDesk\Init\Extension\ConfigExtension; use WPDesk\Init\Extension\ExtensionsSet; use WPDesk\Init\Util\PhpFileLoader; use WPDesk\Init\Configuration\Configuration; final class Init { private static $bootable = true; /** @var Configuration */ private $config; /** * @param string|array|Configuration $config */ public static function setup( $config ) { $result = require __DIR__ . '/platform_check.php'; if ( $result === false ) { self::$bootable = false; } return new self( $config ); } /** * @param string|array|Configuration $config */ public function __construct( $config ) { if ( $config instanceof Configuration ) { $this->config = $config; } elseif ( \is_array( $config ) ) { $this->config = new Configuration( $config ); } elseif ( \is_string( $config ) ) { $loader = new PhpFileLoader(); $this->config = new Configuration( $loader->load( $config ) ); } else { throw new \InvalidArgumentException( sprintf( 'Configuration must be either path to configuration file, array of configuration data or %s instance', Configuration::class ) ); } } /** * @param string|null $filename Filename of the booted plugin. May be null, if called from plugin's main file. */ public function boot( string? $filename = null ) { if ( self::$bootable === false ) { return; } if ( $filename === null ) { $backtrace = \debug_backtrace( \DEBUG_BACKTRACE_IGNORE_ARGS, 1 ); $filename = $backtrace[0]['file']; } $extensions = new ExtensionsSet( new BuiltinExtension(), new ConfigExtension(), new ConditionalExtension() ); if ( class_exists( \WPDesk_Plugin_Info::class ) ) { $extensions->add( new LegacyExtension() ); } $kernel = new Kernel( $filename, $this->config, $extensions ); $kernel->boot(); } }