133 lines
3.2 KiB
PHP
133 lines
3.2 KiB
PHP
<?php
|
|
/**
|
|
* Plugin lifecycle coordinator.
|
|
*
|
|
* @package WPContentSync
|
|
*/
|
|
|
|
namespace WPContentSync;
|
|
|
|
use WPContentSync\Admin\AdminPage;
|
|
use WPContentSync\Admin\FileImportController;
|
|
use WPContentSync\Logging\LoggerInterface;
|
|
use WPContentSync\Logging\OptionLogger;
|
|
use WPContentSync\Package\PackageValidator;
|
|
use WPContentSync\Rest\RestPackageController;
|
|
use WPContentSync\Settings\SettingsRepository;
|
|
use WPContentSync\Transport\FileTransportInterface;
|
|
use WPContentSync\Transport\JsonFileTransport;
|
|
use WPContentSync\Transport\RestTransportClient;
|
|
use WPContentSync\Url\MetadataUrlTransformer;
|
|
use WPContentSync\Url\UrlTransformer;
|
|
|
|
final class Plugin {
|
|
private Container $container;
|
|
|
|
private function __construct( Container $container ) {
|
|
$this->container = $container;
|
|
}
|
|
|
|
public static function create(): self {
|
|
$container = new Container();
|
|
|
|
$container->factory(
|
|
SettingsRepository::class,
|
|
static function (): SettingsRepository {
|
|
return new SettingsRepository();
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
LoggerInterface::class,
|
|
static function (): LoggerInterface {
|
|
return new OptionLogger();
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
UrlTransformer::class,
|
|
static function (): UrlTransformer {
|
|
return new UrlTransformer();
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
MetadataUrlTransformer::class,
|
|
static function () use ( $container ): MetadataUrlTransformer {
|
|
return new MetadataUrlTransformer(
|
|
$container->get( UrlTransformer::class )
|
|
);
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
PackageValidator::class,
|
|
static function (): PackageValidator {
|
|
return new PackageValidator();
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
FileTransportInterface::class,
|
|
static function () use ( $container ): FileTransportInterface {
|
|
return new JsonFileTransport(
|
|
$container->get( PackageValidator::class )
|
|
);
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
FileImportController::class,
|
|
static function () use ( $container ): FileImportController {
|
|
return new FileImportController(
|
|
$container->get( FileTransportInterface::class ),
|
|
$container->get( LoggerInterface::class )
|
|
);
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
RestTransportClient::class,
|
|
static function (): RestTransportClient {
|
|
return new RestTransportClient();
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
RestPackageController::class,
|
|
static function () use ( $container ): RestPackageController {
|
|
return new RestPackageController(
|
|
$container->get( PackageValidator::class )
|
|
);
|
|
}
|
|
);
|
|
|
|
$container->factory(
|
|
AdminPage::class,
|
|
static function () use ( $container ): AdminPage {
|
|
return new AdminPage(
|
|
$container->get( SettingsRepository::class ),
|
|
$container->get( LoggerInterface::class )
|
|
);
|
|
}
|
|
);
|
|
|
|
return new self( $container );
|
|
}
|
|
|
|
public function register(): void {
|
|
/** @var AdminPage $admin_page */
|
|
$admin_page = $this->container->get( AdminPage::class );
|
|
|
|
/** @var FileImportController $file_import_controller */
|
|
$file_import_controller = $this->container->get( FileImportController::class );
|
|
|
|
/** @var RestPackageController $rest_package_controller */
|
|
$rest_package_controller = $this->container->get( RestPackageController::class );
|
|
|
|
$admin_page->register();
|
|
$file_import_controller->register();
|
|
$rest_package_controller->register();
|
|
}
|
|
}
|