load_dependencies(); $this->define_admin_hooks(); $this->define_core_hooks(); } /** * Get singleton instance. * * @return Ability_Guard */ public static function get_instance(): Ability_Guard { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Load required classes. */ private function load_dependencies(): void { require_once ABILITY_GUARD_PATH . 'includes/class-ability-guard-loader.php'; require_once ABILITY_GUARD_PATH . 'includes/core/class-ability-guard-log-repository.php'; require_once ABILITY_GUARD_PATH . 'includes/core/class-ability-guard-ability-scanner.php'; require_once ABILITY_GUARD_PATH . 'includes/core/class-ability-guard-monitored-ability.php'; require_once ABILITY_GUARD_PATH . 'includes/core/class-ability-guard-ability-registration-monitor.php'; require_once ABILITY_GUARD_PATH . 'includes/core/class-ability-guard-logger.php'; require_once ABILITY_GUARD_PATH . 'includes/core/class-ability-guard-alerts.php'; require_once ABILITY_GUARD_PATH . 'includes/core/class-ability-guard-privacy.php'; require_once ABILITY_GUARD_PATH . 'includes/admin/class-ability-guard-settings.php'; require_once ABILITY_GUARD_PATH . 'includes/admin/class-ability-guard-admin.php'; require_once ABILITY_GUARD_PATH . 'includes/admin/class-ability-guard-admin-actions.php'; require_once ABILITY_GUARD_PATH . 'includes/admin/class-ability-guard-ability-table.php'; require_once ABILITY_GUARD_PATH . 'includes/admin/class-ability-guard-log-table.php'; $this->loader = new Ability_Guard_Loader(); } /** * Register admin hooks. */ private function define_admin_hooks(): void { $settings = new Ability_Guard_Settings(); $admin = new Ability_Guard_Admin(); $actions = new Ability_Guard_Admin_Actions(); $this->loader->add_action( 'admin_init', $settings, 'register_settings' ); $this->loader->add_action( 'admin_init', $actions, 'handle_admin_actions' ); $this->loader->add_action( 'admin_menu', $admin, 'register_menu_pages' ); $this->loader->add_action( 'network_admin_menu', $admin, 'register_network_menu_pages' ); $this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_assets' ); } /** * Register core hooks. */ private function define_core_hooks(): void { $logger = new Ability_Guard_Logger( new Ability_Guard_Log_Repository() ); $alerts = new Ability_Guard_Alerts(); $registration_monitor = new Ability_Guard_Ability_Registration_Monitor(); $privacy = new Ability_Guard_Privacy( new Ability_Guard_Log_Repository() ); if ( is_multisite() ) { $activator = new Ability_Guard_Activator(); $this->loader->add_action( 'init', $activator, 'activate_site', 1 ); } $this->loader->add_filter( 'wp_register_ability_args', $registration_monitor, 'monitor_registration_args', 10, 1 ); $this->loader->add_action( 'wp_before_execute_ability', $logger, 'on_before_execute', 10, 2 ); $this->loader->add_action( 'wp_after_execute_ability', $logger, 'on_after_execute', 10, 3 ); $this->loader->add_action( 'ability_guard_after_log_insert', $alerts, 'maybe_send_alert', 10, 2 ); $this->loader->add_action( 'ability_guard_send_scheduled_report', $alerts, 'send_scheduled_report' ); $this->loader->add_filter( 'cron_schedules', $alerts, 'add_cron_schedules' ); $this->loader->add_filter( 'wp_privacy_personal_data_exporters', $privacy, 'register_exporter' ); $this->loader->add_filter( 'wp_privacy_personal_data_erasers', $privacy, 'register_eraser' ); } /** * Register all hooks with WordPress. */ public function run(): void { $this->loader->run(); } }