*/ public static function get_modules(): array { return array( 'error_log' => array( 'label' => __( 'Error Log', '0-day-analytics' ), 'option_key' => null, 'icon' => 'dashicons-warning', 'menu_slug' => 'advan_error_log', 'settings_tab' => 'error-log-list', 'has_events' => true, 'data_callback' => array( Dashboard_Data_Collector::class, 'get_error_log_events' ), 'stats_callback' => null, 'description' => __( 'PHP error log viewer and analyzer.', '0-day-analytics' ), ), 'fatals' => array( 'label' => __( 'Fatal Errors', '0-day-analytics' ), 'option_key' => 'fatals_module_enabled', 'icon' => 'dashicons-dismiss', 'menu_slug' => 'advan_fatals', 'settings_tab' => 'fatals-list', 'has_events' => true, 'data_callback' => array( Dashboard_Data_Collector::class, 'get_fatals_events' ), 'stats_callback' => null, 'description' => __( 'Captured PHP fatal errors.', '0-day-analytics' ), ), 'crons' => array( 'label' => __( 'Cron Jobs', '0-day-analytics' ), 'option_key' => 'cron_module_enabled', 'icon' => 'dashicons-clock', 'menu_slug' => 'advan_cron_jobs', 'settings_tab' => 'cron-list', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_crons_stats' ), 'description' => __( 'WordPress scheduled tasks overview.', '0-day-analytics' ), ), 'transients' => array( 'label' => __( 'Transients', '0-day-analytics' ), 'option_key' => 'transients_module_enabled', 'icon' => 'dashicons-database', 'menu_slug' => 'advan_transients', 'settings_tab' => 'transient-list', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_transients_stats' ), 'description' => __( 'Transient cache management overview.', '0-day-analytics' ), ), 'requests' => array( 'label' => __( 'HTTP Requests', '0-day-analytics' ), 'option_key' => 'requests_module_enabled', 'icon' => 'dashicons-networking', 'menu_slug' => 'advan_requests', 'settings_tab' => 'request-list', 'has_events' => true, 'data_callback' => array( Dashboard_Data_Collector::class, 'get_requests_events' ), 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_requests_stats' ), 'description' => __( 'Outgoing HTTP request logger.', '0-day-analytics' ), ), 'wp_mail' => array( 'label' => __( 'WP Mail', '0-day-analytics' ), 'option_key' => 'wp_mail_module_enabled', 'icon' => 'dashicons-email-alt', 'menu_slug' => 'advan_wp_mail', 'settings_tab' => 'mail-list', 'has_events' => true, 'data_callback' => array( Dashboard_Data_Collector::class, 'get_mail_events' ), 'stats_callback' => null, 'description' => __( 'WordPress email logging and monitoring.', '0-day-analytics' ), ), 'rest_api' => array( 'label' => __( 'REST API', '0-day-analytics' ), 'option_key' => 'rest_api_module_enabled', 'icon' => 'dashicons-rest-api', 'menu_slug' => 'advan_rest_api', 'settings_tab' => 'rest-api', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_rest_api_stats' ), 'description' => __( 'REST API endpoint management and security.', '0-day-analytics' ), ), 'security' => array( 'label' => __( 'Security', '0-day-analytics' ), 'option_key' => 'security_module_enabled', 'icon' => 'dashicons-shield', 'menu_slug' => 'advan_security', 'settings_tab' => 'security', 'has_events' => true, 'data_callback' => array( Dashboard_Data_Collector::class, 'get_security_events' ), 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_security_stats' ), 'description' => __( 'Security incident detection and monitoring.', '0-day-analytics' ), ), 'login_audit' => array( 'label' => __( 'Login Audit', '0-day-analytics' ), 'option_key' => 'login_auditor_module_enabled', 'icon' => 'dashicons-admin-users', 'menu_slug' => 'advan_login_audit', 'settings_tab' => 'login-audit', 'has_events' => true, 'data_callback' => array( Dashboard_Data_Collector::class, 'get_login_audit_events' ), 'stats_callback' => null, 'description' => __( 'Login and authentication event auditing.', '0-day-analytics' ), ), 'hooks_capture' => array( 'label' => __( 'Hooks Capture', '0-day-analytics' ), 'option_key' => 'hooks_capture_module_enabled', 'icon' => 'dashicons-admin-links', 'menu_slug' => 'advan_hooks_capture', 'settings_tab' => 'hooks-capture', 'has_events' => true, 'data_callback' => array( Dashboard_Data_Collector::class, 'get_hooks_events' ), 'stats_callback' => null, 'description' => __( 'WordPress hooks capture and analysis.', '0-day-analytics' ), ), 'snippets' => array( 'label' => __( 'Code Snippets', '0-day-analytics' ), 'option_key' => 'snippets_module_enabled', 'icon' => 'dashicons-editor-code', 'menu_slug' => 'advan_snippets', 'settings_tab' => 'snippets', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_snippets_stats' ), 'description' => __( 'Custom code snippets manager.', '0-day-analytics' ), ), 'tables' => array( 'label' => __( 'DB Tables', '0-day-analytics' ), 'option_key' => 'tables_module_enabled', 'icon' => 'dashicons-editor-table', 'menu_slug' => 'advan_table', 'settings_tab' => 'table-list', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_tables_stats' ), 'description' => __( 'Database tables overview and management.', '0-day-analytics' ), ), 'performance' => array( 'label' => __( 'Performance', '0-day-analytics' ), 'option_key' => 'performance_module_enabled', 'icon' => 'dashicons-performance', 'menu_slug' => 'advan_performance', 'settings_tab' => 'performance', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_performance_stats' ), 'description' => __( 'Site performance metrics and PageSpeed.', '0-day-analytics' ), ), 'traffic' => array( 'label' => __( 'Traffic Analytics', '0-day-analytics' ), 'option_key' => 'traffic_analytics_module_enabled', 'icon' => 'dashicons-chart-area', 'menu_slug' => 'advan_traffic_analytics', 'settings_tab' => 'traffic-analytics', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_traffic_stats' ), 'description' => __( 'Visitor traffic analysis and statistics.', '0-day-analytics' ), ), 'wp_panel' => array( 'label' => __( 'WP Panel', '0-day-analytics' ), 'option_key' => 'wp_panel_module_enabled', 'icon' => 'dashicons-wordpress', 'menu_slug' => 'advan_wp_panel', 'settings_tab' => 'wp-panel', 'has_events' => false, 'data_callback' => null, 'stats_callback' => null, 'description' => __( 'WordPress core settings and tweaks.', '0-day-analytics' ), ), 'server_info' => array( 'label' => __( 'Server Info', '0-day-analytics' ), 'option_key' => 'server_info_module_enabled', 'icon' => 'dashicons-desktop', 'menu_slug' => 'advan_system_analytics', 'settings_tab' => 'server-info', 'has_events' => false, 'data_callback' => null, 'stats_callback' => array( Dashboard_Data_Collector::class, 'get_server_info_stats' ), 'description' => __( 'Server CPU, memory, and disk usage.', '0-day-analytics' ), ), ); } /** * Get only currently enabled modules. * * @return array */ public static function get_enabled_modules(): array { $modules = self::get_modules(); $enabled = array(); foreach ( $modules as $key => $module ) { if ( self::is_module_enabled( $key ) ) { $enabled[ $key ] = $module; } } return $enabled; } /** * Get only currently disabled modules. * * @return array */ public static function get_disabled_modules(): array { $modules = self::get_modules(); $disabled = array(); foreach ( $modules as $key => $module ) { if ( ! self::is_module_enabled( $key ) ) { $disabled[ $key ] = $module; } } return $disabled; } /** * Check if a specific module is enabled. * * @param string $module_key The module key. * * @return bool */ public static function is_module_enabled( string $module_key ): bool { $modules = self::get_modules(); if ( ! isset( $modules[ $module_key ] ) ) { return false; } $option_key = $modules[ $module_key ]['option_key']; if ( null === $option_key ) { return true; } return (bool) Settings::get_option( $option_key ); } /** * Get sorted modules: enabled first, disabled last. * * @return array */ public static function get_sorted_modules(): array { return array_merge( self::get_enabled_modules(), self::get_disabled_modules() ); } } }