*/ private array $checkers; /** * @param list $additional Explicitly composed profile-specific checkers. */ public function __construct( AuditRegistry $registry, array $additional = array() ) { $factory = new FindingFactory( $registry, new FindingContract() ); $privacy_packs = new PrivacyRulePack( plugin_dir_path( PX320_SITE_AUDIT_FILE ) . 'config/privacy-rule-packs.v1.json' ); $implementations = array( new TablesSizeChecker( $factory ), new AutoloadChecker( $factory ), new CleanupCandidatesChecker( $factory ), new ComponentSchemaChecker( $factory ), new CacheLayersChecker( $factory ), new RuntimeChecker(), new PhpLimitsChecker( $factory ), new PhpExtensionsChecker( $factory ), new LoopbackRestChecker( $factory ), new ServerVisibilityChecker( $factory ), new StoragePathsChecker( $factory ), new TimeCronMailChecker( $factory ), new CronInventoryChecker( $factory ), new ActionSchedulerChecker( $factory ), new RightsRetentionChecker( $factory ), new ManualChecklistChecker( $factory, $privacy_packs, 'privacy.ru_152fz' ), new ManualChecklistChecker( $factory, $privacy_packs, 'privacy.en_baseline' ), new CoreChecker( $factory ), new ConfigurationChecker( $factory ), new DatabaseBaselineChecker( $factory ), new PublicFeaturesChecker( $factory ), new SecretsPresenceChecker( $factory ), new SiteHealthChecker( $factory ), new UrlsHttpsChecker( $factory ), new InventoryChecker( $factory ), new ProvenanceUpdatesChecker( $factory ), new ThemeStateChecker( $factory ), new CompatibilityChecker( $factory ), new WritablePhpChecker( $factory ), new RepositoryBuildChecker( $factory ), ); foreach ( $additional as $checker ) { if ( ! $checker instanceof Checker ) { throw new \InvalidArgumentException( 'invalid_checker_implementation' ); } $implementations[] = $checker; } $this->checkers = array(); foreach ( $implementations as $checker ) { if ( isset( $this->checkers[ $checker->id() ] ) ) { throw new \InvalidArgumentException( 'duplicate_checker_implementation' ); } $this->checkers[ $checker->id() ] = $checker; } } /** * @return list */ public function ids(): array { return array_keys( $this->checkers ); } public function get( string $check_id ): ?Checker { return $this->checkers[ $check_id ] ?? null; } }