Files
WP-Content-Sync/src/Plugin.php
T
2026-04-28 13:04:39 -05:00

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();
}
}