set_custom_path( 'mediazard', MEDIAZARD_PATH . 'languages' ); } require_once MEDIAZARD_PATH . 'includes/Repository/class-mediarepository.php'; require_once MEDIAZARD_PATH . 'includes/Repository/class-referencerepository.php'; require_once MEDIAZARD_PATH . 'includes/Repository/class-inventorystaterepository.php'; require_once MEDIAZARD_PATH . 'includes/Media/class-attachmentinventory.php'; require_once MEDIAZARD_PATH . 'includes/Repository/class-scanstaterepository.php'; require_once MEDIAZARD_PATH . 'includes/Support/class-scanscopeguard.php'; $media = new MediaRepository(); $state = new InventoryStateRepository(); $inventory = new AttachmentInventory( $media, $state ); $scan_state = new ScanStateRepository(); require_once MEDIAZARD_PATH . 'includes/Repository/class-sourcesrepository.php'; require_once MEDIAZARD_PATH . 'includes/Repository/class-dirtysourcesrepository.php'; require_once MEDIAZARD_PATH . 'includes/Media/class-incrementalindex.php'; $references = new ReferenceRepository(); $scanners = self::scanners( $media, $references ); $sources = new SourcesRepository(); $dirty = new DirtySourcesRepository(); $incremental = new IncrementalIndex( $scanners, $references, $dirty, $scan_state, $inventory, $media, $sources ); $guard = new ScanScopeGuard( $scan_state, $incremental, $sources ); $guard->register_hooks(); require_once MEDIAZARD_PATH . 'includes/Support/class-elementorintegration.php'; $elementor = new ElementorIntegration( $incremental ); $elementor->register_hooks(); require_once MEDIAZARD_PATH . 'includes/Repository/class-usagerepository.php'; require_once MEDIAZARD_PATH . 'includes/Media/class-usageindex.php'; require_once MEDIAZARD_PATH . 'includes/Repository/class-deletionsafetyrepository.php'; require_once MEDIAZARD_PATH . 'includes/Support/class-deletiondiagnostics.php'; require_once MEDIAZARD_PATH . 'includes/Media/class-deletionguard.php'; foreach ( array( 'class-attachmentlock', 'class-uploadvalidator', 'class-replacementfiles', 'class-replacementmetadata', 'class-replacementservice', 'class-replacementcache' ) as $file ) { require_once MEDIAZARD_PATH . 'includes/Media/' . $file . '.php'; } require_once MEDIAZARD_PATH . 'includes/Repository/class-replacementrepository.php'; require_once MEDIAZARD_PATH . 'includes/Repository/class-upgraderrepository.php'; require_once MEDIAZARD_PATH . 'includes/Media/class-upgradercleanup.php'; $replacement_cache = new ReplacementCache( new ReplacementRepository() ); $replacement_cache->register_hooks(); $usage_repository = new UsageRepository(); $usage = new UsageIndex( $usage_repository, $scan_state, $scanners->registered(), $sources ); $diagnostics = new DeletionDiagnostics(); $safety = new DeletionSafetyRepository(); $upgrader_cleanup = new Media\UpgraderCleanup( $safety, new ReplacementRepository(), $sources, $diagnostics ); $deletion_guard = new DeletionGuard( $usage_repository, $scan_state, $sources, $safety, $diagnostics, $scanners->registered(), $upgrader_cleanup ); $deletion_guard->register_hooks(); $upgrader_cleanup->register_hooks(); if ( is_admin() ) { require_once MEDIAZARD_PATH . 'admin/class-ui.php'; require_once MEDIAZARD_PATH . 'admin/class-productpage.php'; require_once MEDIAZARD_PATH . 'includes/Media/class-bulkdeletion.php'; $bulk_service = new BulkDeletion( $deletion_guard, $incremental ); require_once MEDIAZARD_PATH . 'includes/Repository/class-dashboardrepository.php'; add_action( 'admin_enqueue_scripts', array( \MediaZard\Admin\Ui::class, 'assets' ) ); add_action( 'current_screen', array( \MediaZard\Admin\Ui::class, 'screen_title' ) ); require_once MEDIAZARD_PATH . 'admin/class-corediagnostics.php'; require_once MEDIAZARD_PATH . 'admin/class-admin.php'; require_once MEDIAZARD_PATH . 'admin/class-inventorycontroller.php'; require_once MEDIAZARD_PATH . 'includes/Repository/class-sourcesrepository.php'; require_once MEDIAZARD_PATH . 'includes/Scanner/class-scancoordinator.php'; require_once MEDIAZARD_PATH . 'admin/class-scancontroller.php'; require_once MEDIAZARD_PATH . 'admin/class-scanpage.php'; add_action( 'admin_init', array( self::class, 'upgrade' ) ); $controller = new InventoryController( $inventory ); $controller->register_hooks(); $coordinator = new ScanCoordinator( $scanners, $references, $scan_state, $sources, $incremental ); $scan_controller = new ScanController( $coordinator ); $scan_controller->register_hooks(); require_once MEDIAZARD_PATH . 'admin/class-incrementalcontrols.php'; $incremental_controls = new IncrementalControls( $incremental, $dirty ); $incremental_controls->register_hooks(); $scan_page = new ScanPage( $coordinator, $incremental_controls ); $scan_page->register_hooks(); $admin = new Admin( $media, $references, $state, new CoreDiagnostics( $references ), $scan_page, new \MediaZard\Admin\ProductPage( $usage, $usage_repository, $bulk_service ) ); $admin->register_hooks(); foreach ( array( 'class-medialibrary', 'class-usagedetails', 'class-attachmentusage' ) as $file ) { require_once MEDIAZARD_PATH . 'admin/' . $file . '.php'; } $library = new MediaLibrary( $usage, $usage_repository ); $library->register_hooks(); $details = new UsageDetails( $usage, $usage_repository ); $details->register_hooks(); $attachment_usage = new AttachmentUsage( $usage ); $attachment_usage->register_hooks(); require_once MEDIAZARD_PATH . 'admin/class-deletionreview.php'; $deletion_review = new DeletionReview( $deletion_guard, $diagnostics ); $deletion_review->register_hooks(); require_once MEDIAZARD_PATH . 'admin/class-bulkdeletionreview.php'; $bulk_review = new BulkDeletionReview( $bulk_service ); $bulk_review->register_hooks(); require_once MEDIAZARD_PATH . 'admin/class-replacementrecovery.php'; $replacement_service = new ReplacementService(); $replacement_recovery = new ReplacementRecovery( $replacement_service ); $replacement_recovery->register_hooks(); require_once MEDIAZARD_PATH . 'admin/class-replacementcontroller.php'; require_once MEDIAZARD_PATH . 'admin/class-replacementpage.php'; $replacement_controller = new ReplacementController( $replacement_service, $inventory ); $replacement_controller->register_hooks(); $replacement_page = new ReplacementPage( $replacement_controller ); $replacement_page->register_hooks(); require_once MEDIAZARD_PATH . 'admin/class-upgradercleanup.php'; $cleanup_page = new UpgraderCleanupPage( $upgrader_cleanup ); $cleanup_page->register_hooks(); } } /** * Load the core registry for admin diagnostics without running any scanner. * * @param MediaRepository $media Media repository. * @param ReferenceRepository $references Reference repository. * @return ScannerManager */ private static function scanners( MediaRepository $media, ReferenceRepository $references ): ScannerManager { foreach ( array( 'interface-scannerinterface', 'class-source', 'class-reference', 'class-attachmentresolver', 'class-contentparser', 'class-contentscanner', 'class-featuredimagescanner', 'class-siteidentityscanner', 'class-scannermanager', 'class-elementorparser', 'class-elementorbasicscanner' ) as $file ) { require_once MEDIAZARD_PATH . 'includes/Scanner/' . $file . '.php'; } $resolver = new AttachmentResolver( $media ); $manager = new ScannerManager( $references, $resolver ); $manager->register( new FeaturedImageScanner( $resolver ) ); $manager->register( new SiteIdentityScanner( $resolver ) ); $manager->register( new ContentScanner( new ContentParser(), $resolver ) ); $manager->register( new ElementorBasicScanner( new ElementorParser(), $resolver ) ); return $manager; } /** * Apply pending schema changes after code updates on an authorized admin request. * * @return void */ public static function upgrade(): void { if ( current_user_can( 'manage_options' ) ) { Migrations::upgrade(); } } }