ocommerce_load_cart_from_session' ) && function_exists( 'wc_load_cart' ) ) { WC()->call_function( 'wc_load_cart' ); } } /** * Check if WooCommerce session is available. * * @return bool True if session is available. */ private function is_session_available(): bool { $this->ensure_cart_loaded(); return WC()->session instanceof \WC_Session; } /** * Get a unique identifier for the current session. * * @return string Session identifier. */ public function get_session_id(): string { if ( ! $this->is_session_available() ) { return 'no-session'; } // Use or generate a stable session ID for tracking consistency. $fraud_customer_session_id = WC()->session->get( '_fraud_protection_customer_session_id' ); if ( ! $fraud_customer_session_id ) { $fraud_customer_session_id = WC()->call_function( 'wc_rand_hash', 'customer_', 30 ); WC()->session->set( '_fraud_protection_customer_session_id', $fraud_customer_session_id ); } return $fraud_customer_session_id; } /** * Empty the cart. * * @return void */ private function empty_cart(): void { if ( function_exists( 'WC' ) && WC()->cart ) { WC()->cart->empty_cart(); } } /** * Log a session update event using FraudProtectionController's logging helper. * * @param string $action The action taken (allowed, challenged, or blocked). * @return void */ private function log_session_update_event( string $action ): void { $session_id = $this->get_session_id(); $user_id = get_current_user_id(); $user_info = $user_id ? "User: {$user_id}" : 'User: guest'; $timestamp = current_time( 'mysql' ); $message = sprintf( 'Session updated: %s | %s | Action: %s | Timestamp: %s', $session_id, $user_info, $action, $timestamp ); FraudProtectionController::log( 'info', $message ); } }