get( SettingsRegistry::class ); foreach ( CollectionSettings::sections() as $section ) { $registry->add( $section ); } $registry->add( ModerationRules::section() ); $container->set( ModerationRules::class, static fn( Container $c ): ModerationRules => new ModerationRules( $c->get( Options::class ), $c->get( Features::class ), $c->get( Submission::class ) ) ); $container->set( FormConfig::class, static fn( Container $c ): FormConfig => new FormConfig( $c->get( Options::class ), $c->get( Features::class ) ) ); $container->set( FormRegistry::class, static fn(): FormRegistry => new FormRegistry() ); $container->set( CaptchaRegistry::class, static function (): CaptchaRegistry { $captchas = new CaptchaRegistry(); $captchas->add( new Turnstile() ); return $captchas; } ); $container->set( SpamGuard::class, static fn( Container $c ): SpamGuard => new SpamGuard( $c->get( FormConfig::class ), $c->get( CaptchaRegistry::class ) ) ); $container->set( OwnReviews::class, static fn(): OwnReviews => new OwnReviews() ); $container->set( Submission::class, static fn( Container $c ): Submission => new Submission( $c->get( FormConfig::class ), $c->get( FormRegistry::class ), $c->get( SpamGuard::class ), $c->get( OwnReviews::class ) ) ); $container->set( ClassicForm::class, static fn( Container $c ): ClassicForm => new ClassicForm( $c->get( Submission::class ), $c->get( OwnReviews::class ) ) ); $container->set( ImageSanitizer::class, static fn(): ImageSanitizer => new ImageSanitizer() ); $container->set( MediaPublisher::class, static fn(): MediaPublisher => new MediaPublisher() ); $container->set( MediaLinker::class, static fn( Container $c ): MediaLinker => new MediaLinker( $c->get( MediaPublisher::class ) ) ); $container->set( MediaUploader::class, static fn( Container $c ): MediaUploader => new MediaUploader( $c->get( FormConfig::class ), $c->get( ImageSanitizer::class ) ) ); $container->set( OrphanPurge::class, static fn(): OrphanPurge => new OrphanPurge() ); $container->set( FormRenderer::class, static fn( Container $c ): FormRenderer => new FormRenderer( $c->get( FormConfig::class ), $c->get( FormRegistry::class ), $c->get( SpamGuard::class ), $c->get( Submission::class ), $c->get( OwnReviews::class ), $c->get( Templates::class ), $c->get( Assets::class ) ) ); $container->set( MyReviews::class, static fn( Container $c ): MyReviews => new MyReviews( $c->get( OwnReviews::class ), $c->get( Templates::class ), $c->get( Assets::class ) ) ); $container->set( SubmissionController::class, static fn( Container $c ): SubmissionController => new SubmissionController( $c->get( Submission::class ), $c->get( MediaUploader::class ), $c->get( FormConfig::class ) ) ); } /** * Attach hooks. * * @param Container $container Service container. */ public function boot( Container $container ): void { $templates = $container->get( Templates::class ); $fields = $container->get( FormRegistry::class ); $fields->add( new RatingField( $templates ) ); $fields->add( new TitleField( $templates ) ); $fields->add( new ContentField( $templates ) ); $fields->add( new RecommendField( $templates ) ); $fields->add( new MediaField( $templates, $container->get( MediaLinker::class ), $container->get( MediaResolver::class ) ) ); $fields->add( new DisplayNameField( $templates ) ); $fields->add( new ConsentField( $templates ) ); $fields->add( new OrderLinkField( $templates ) ); $container->get( Submission::class )->hooks(); $container->get( ModerationRules::class )->hooks(); $container->get( ClassicForm::class )->hooks(); $container->get( MediaPublisher::class )->hooks(); $container->get( OrphanPurge::class )->hooks(); $container->get( MyReviews::class )->hooks(); $assets = $container->get( Assets::class ); add_action( 'init', static function () use ( $assets ): void { if ( $assets->register_script( FormRenderer::SCRIPT, 'frontend/form', array( ReviewsRenderer::SCRIPT ) ) ) { wp_add_inline_script( FormRenderer::SCRIPT, 'window.wpiprFormI18n = ' . wp_json_encode( self::i18n() ) . ';', 'before' ); } }, 7 ); add_action( 'rest_api_init', static function () use ( $container ): void { $container->get( SubmissionController::class )->register_routes(); } ); } /** * Strings for the form script. * * @return array */ public static function i18n(): array { return array( 'uploading' => __( 'Uploading…', 'wpinterface-product-reviews' ), /* translators: %s: file name. */ 'uploaded' => __( '%s added.', 'wpinterface-product-reviews' ), /* translators: %s: file name. */ 'removed' => __( '%s removed.', 'wpinterface-product-reviews' ), 'remove' => __( 'Remove', 'wpinterface-product-reviews' ), /* translators: 1: file name, 2: reason. */ 'uploadFailed' => __( '%1$s could not be added: %2$s', 'wpinterface-product-reviews' ), /* translators: %d: number of photos. */ 'tooManyPhotos' => __( 'You can add up to %d photos.', 'wpinterface-product-reviews' ), 'tooManyVideos' => __( 'You can add one video.', 'wpinterface-product-reviews' ), /* translators: %s: size limit such as "8 MB". */ 'tooLarge' => __( 'The file is larger than %s.', 'wpinterface-product-reviews' ), 'wrongType' => __( 'This file type is not supported.', 'wpinterface-product-reviews' ), 'submitting' => __( 'Sending your review…', 'wpinterface-product-reviews' ), 'fixErrors' => __( 'Please check the highlighted fields.', 'wpinterface-product-reviews' ), 'waitUploads' => __( 'Please wait until your files have finished uploading.', 'wpinterface-product-reviews' ), 'error' => __( 'Something went wrong. Please try again.', 'wpinterface-product-reviews' ), 'close' => __( 'Close', 'wpinterface-product-reviews' ), 'confirmDelete' => __( 'Delete your review? This cannot be undone.', 'wpinterface-product-reviews' ), 'deleted' => __( 'Your review has been deleted.', 'wpinterface-product-reviews' ), /* translators: %s: name of the file. */ 'photoAlt' => __( 'Your photo %s', 'wpinterface-product-reviews' ), ); } }