register(); $providers->register( ProviderType::DOCUMENT_LANGUAGE, new SettingsDocumentLanguageResolver( $settings ) ); $languages = new DocumentLanguageService( $providers ); $mapper = new WooBasicOrderDocumentMapper( $settings, new MoneyFormatter() ); $texts = new BasicDocumentTextCatalog(); $renderer = new FixedBasicPdfRenderer( $texts ); self::$service = new BasicPdfService( $settings, $languages, $mapper, $renderer ); $temporary_files = new TemporaryPdfFileManager(); add_action( 'leanmerce_commerce_compliance_cleanup_temp_pdfs', static function (): void { TemporaryPdfFileManager::cleanup_orphans(); }, 10, 0 ); add_action( 'action_scheduler_init', static function () use ( $scheduler ): void { self::ensure_cleanup_scheduled( $scheduler ); } ); ( new BasicPdfAttachmentController( self::$service, $temporary_files ) )->register(); ( new BasicPdfAccountController( self::$service, new BasicPdfAuthorization() ) )->register(); ( new BasicPdfOrderAdminController( self::$service, $settings ) )->register(); ( new BasicPdfPreviewController( new BasicPdfPreviewService( $settings, new MoneyFormatter(), $texts, $renderer ), $settings ) )->register(); self::$registered = true; } public static function service(): ?BasicPdfService { return self::$service; } private static function ensure_cleanup_scheduled( SchedulerInterface $scheduler ): void { // Foreground read-only requests must not enqueue new Free maintenance actions. if ( in_array( $_SERVER['REQUEST_METHOD'] ?? '', array( 'GET', 'HEAD' ), true ) && ! wp_doing_cron() ) { return; } $now = time(); $next = (int) get_option( 'lmcc_basic_pdf_cleanup_next', 0 ); if ( $next > $now ) { return; } $next = $now + 86400; if ( null !== $scheduler->schedule( $next, 'leanmerce_commerce_compliance_cleanup_temp_pdfs' ) ) { update_option( 'lmcc_basic_pdf_cleanup_next', $next, false ); } } private function __construct() {} }