= self::MAX_DISPLAY_COUNT ) { return false; } // Check cooldown period $last_shown = get_user_meta( $user_id, 'wcs_migration_survey_last_shown', true ); if ( $last_shown && ( time() - $last_shown ) < self::COOLDOWN_PERIOD ) { return false; } // Check if user has already completed the survey if ( get_user_meta( $user_id, 'wcs_migration_survey_completed', true ) ) { return false; } return true; } /** * Add survey data to shipping label script localization */ public function add_survey_data_to_script( $root_view, $payload ) { // Only add survey data to shipping label context if ( 'wc-connect-create-shipping-label' !== $root_view ) { return; } $should_show = $this->should_show_survey(); if ( ! $should_show ) { return; } // Add survey data via separate localize_script call // NOTE: We don't update user meta here - only when survey is actually displayed in frontend $survey_data = array( 'shouldShow' => true, 'nonce' => wp_create_nonce( 'wcs_migration_survey' ), 'ajaxUrl' => admin_url( 'admin-ajax.php' ), ); wp_localize_script( 'wc_connect_admin', 'wcsMigrationSurvey', $survey_data ); } /** * Handle survey submission via AJAX */ public function handle_survey_submission() { // Verify nonce if ( ! wp_verify_nonce( Utils::get_sanitized_request_data( 'nonce' ), 'wcs_migration_survey' ) ) { wp_die( 'Security check failed' ); } // Get survey data $survey_data = json_decode( stripslashes( $_POST['survey_data'] ), true ); if ( ! $survey_data ) { wp_send_json_error( 'Invalid survey data' ); } // Mark survey as completed for this user $user_id = get_current_user_id(); update_user_meta( $user_id, 'wcs_migration_survey_completed', true ); // Track submission event with detailed properties $track_properties = array( 'primary_reason' => sanitize_text_field( $survey_data['primary'] ), ); // Add followup responses to tracking (flatten the array) if ( ! empty( $survey_data['followup'] ) ) { foreach ( $survey_data['followup'] as $key => $value ) { if ( is_bool( $value ) ) { $track_properties[ 'followup_' . $key ] = $value ? 'true' : 'false'; } else { $track_properties[ 'followup_' . $key ] = sanitize_text_field( $value ); } } } $this->track_event( 'submitted', $track_properties ); wp_send_json_success(); } /** * Handle survey dismissal */ public function handle_survey_dismissal() { // Verify nonce if ( ! wp_verify_nonce( Utils::get_sanitized_request_data( 'nonce' ), 'wcs_migration_survey' ) ) { wp_die( 'Security check failed' ); } // Track dismissal event $this->track_event( 'dismissed', array() ); wp_send_json_success(); } /** * Handle survey display tracking (update user meta when survey is actually shown) */ public function handle_survey_display_tracking() { // Verify nonce if ( ! wp_verify_nonce( Utils::get_sanitized_request_data( 'nonce' ), 'wcs_migration_survey' ) ) { wp_die( 'Security check failed' ); } // Update user meta to track that survey was displayed $user_id = get_current_user_id(); $display_count = get_user_meta( $user_id, 'wcs_migration_survey_count', true ); update_user_meta( $user_id, 'wcs_migration_survey_count', intval( $display_count ) + 1 ); update_user_meta( $user_id, 'wcs_migration_survey_last_shown', time() ); // Track survey display event $this->track_event( 'displayed', array() ); wp_send_json_success(); } /** * Track survey events */ private function track_event( $event_name, $properties = array() ) { $wc_logger = wc_get_logger(); $logger = new WC_Connect_Logger( $wc_logger ); $tracks = new WC_Connect_Tracks( $logger, WCSERVICES_PLUGIN_FILE ); $tracks->record_user_event( 'migration_survey_' . $event_name, $properties ); } } }