page_title = __( 'Website Scanner', 'wpconsent-cookies-banner-privacy-suite' ); $this->menu_title = __( 'Scanner', 'wpconsent-cookies-banner-privacy-suite' ); parent::__construct(); } /** * Page specific Hooks. * * @return void */ public function page_hooks() { $this->views = array( 'scanner' => __( 'Scanner', 'wpconsent-cookies-banner-privacy-suite' ), 'inspector' => __( 'Inspector', 'wpconsent-cookies-banner-privacy-suite' ), 'history' => __( 'History', 'wpconsent-cookies-banner-privacy-suite' ), 'settings' => __( 'Auto Scanning', 'wpconsent-cookies-banner-privacy-suite' ), ); } /** * For this page we output a menu. * * @return void */ public function output_header_bottom() { ?>
view || 'settings' === $this->view ) { $this->output_header(); ?> scan_results ) ) { $this->scan_results = wpconsent()->scanner->get_scan_data(); } return $this->scan_results; } /** * Output the page content. * * @return void */ public function output_content() { if ( 'inspector' === $this->view ) { $this->output_view_inspector(); return; } $this->metabox( esc_html__( 'Scan Overview', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_scan_overview() ); $scan_data = $this->get_scan_results(); if ( empty( $scan_data['data']['scripts'] ) ) { return; } $this->metabox( __( 'Detailed Report', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_scanner_input(), '', 'wpconsent-scan-detailed-report' ); } /** * Output the inspector review view. * * @return void */ public function output_view_inspector() { $pending_cookies = wpconsent()->inspector->get_pending_cookies(); $data = wpconsent()->inspector->get_categories_and_services(); $categories = $data['categories']; $services = $data['services']; $is_active = wpconsent()->inspector->is_active(); $cookies_url = admin_url( 'admin.php?page=wpconsent-cookies' ); $start_url = wp_nonce_url( admin_url( 'admin-post.php?action=wpconsent_start_inspector' ), 'wpconsent_start_inspector' ); $title = ! empty( $pending_cookies ) ? esc_html__( 'Review Cookies', 'wpconsent-cookies-banner-privacy-suite' ) . ' ' : esc_html__( 'Cookie Inspector', 'wpconsent-cookies-banner-privacy-suite' ); $this->metabox( $title, $this->get_inspector_unified_content( $pending_cookies, $is_active, $start_url, $cookies_url ) ); // Output data for the wizard JS (needed when pending cookies exist). if ( ! empty( $pending_cookies ) ) { ?> inspector, 'get_blocking_rules' ) ) { $blocking_rules = wpconsent()->inspector->get_blocking_rules(); } ?> output_new_service_modal( $categories ); // Output the service library modal for Pro users. if ( $is_pro ) { $this->output_service_library_modal(); } } } /** * Get the unified inspector content based on current state. * * @param array $pending_cookies Pending cookies. * @param bool $is_active Whether the inspector is currently running. * @param string $start_url URL to start the inspector. * @param string $cookies_url URL to the cookies settings page. * * @return string */ public function get_inspector_unified_content( $pending_cookies, $is_active, $start_url, $cookies_url ) { ob_start(); $mode = wpconsent()->inspector->get_inspector_mode(); if ( ! empty( $pending_cookies ) ) { // State: Pending Review -- show the wizard directly. $this->render_inspector_wizard( $pending_cookies, $start_url, $cookies_url ); } elseif ( $is_active ) { // State: Active -- inspector is running on the frontend. $this->render_inspector_active( $mode ); } else { // State: Ready -- no pending cookies, inspector not running. $this->render_inspector_ready( $start_url, $mode ); } return ob_get_clean(); } /** * Render the inspector mode badge with a short explanation. * * @param string $mode Inspector mode: 'optin', 'optout', or 'discovery'. * * @return void */ protected function render_inspector_mode_badge( $mode ) { $labels = array( 'optin' => __( 'Opt-in mode', 'wpconsent-cookies-banner-privacy-suite' ), 'optout' => __( 'Opt-out mode', 'wpconsent-cookies-banner-privacy-suite' ), 'discovery' => __( 'Discovery mode', 'wpconsent-cookies-banner-privacy-suite' ), ); $descriptions = array( 'optin' => __( 'Scripts are blocked until the visitor consents. Cookies loaded before consent are flagged as violations.', 'wpconsent-cookies-banner-privacy-suite' ), 'optout' => __( 'Scripts are allowed by default. Cookies that persist after the visitor rejects consent are flagged as violations.', 'wpconsent-cookies-banner-privacy-suite' ), 'discovery' => __( 'Script blocking is disabled. The inspector detects cookies but does not verify blocking.', 'wpconsent-cookies-banner-privacy-suite' ), ); $label = isset( $labels[ $mode ] ) ? $labels[ $mode ] : $labels['optin']; $description = isset( $descriptions[ $mode ] ) ? $descriptions[ $mode ] : $descriptions['optin']; ?>
render_inspector_geolocation_notice(); ?> scanner->get_scan_data() ) ) : ?> metabox_row_separator(); ?>
render_inspector_geolocation_notice(); ?> metabox_row_separator(); ?>