ump ) : $save_bump_rejected; $conversion_data['bump_accepted'] = ! empty( $accepted_bump ) ? wp_json_encode( $accepted_bump ) : $save_bump_accepted; $conversion_data['offer_rejected'] = ! empty( $rejected_offer ) ? wp_json_encode( $rejected_offer ) : $save_offer_rejected; $conversion_data['offer_accepted'] = ! empty( $accepted_offer ) ? wp_json_encode( $accepted_offer ) : $save_offer_accepted; $conversion_data['offer_total'] = floatval( $offer_total ); $conversion_data['referrer'] = method_exists( $conversion_tracking, 'filter_referrer' ) ? $conversion_tracking->filter_referrer( $conversion['referrer'] ) : $conversion['referrer']; $conversion_data['bump_total'] = $bump_total; $conversion_data['funnel_id'] = ! empty( $fid ) ? $fid : $conversion['funnel_id']; $conversion_data['contact_id'] = ! empty( $cid ) ? $cid : $conversion['contact_id']; $conversion_data['checkout_total'] = floatval( $aero_total ); $conversion_data['value'] = ( $conversion_data['checkout_total'] + $conversion_data['offer_total'] + $conversion_data['bump_total'] ); if ( function_exists( 'wc_get_order' ) ) { $order = wc_get_order( $order_id ); if ( $order && method_exists( $order, 'get_order_number' ) ) { $temp_order_number = $order->get_order_number(); $conversion_data['order_number'] = $temp_order_number; } else { $need_to_delete_orders[] = $order_id; continue; } } // Run Update for conversion $need_to_update_orders[] = $conversion_data; } else { if ( empty( $fid ) ) { $need_to_delete_orders[] = $order_id; continue; } /** * add upsell created order in conversion table */ $args = array( 'contact_id' => '', 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => '', 'utm_term' => '', 'utm_content' => '', 'click_id' => '', 'type' => 2, 'value' => 0, 'checkout_total' => 0, 'bump_total' => 0, 'offer_total' => 0, 'bump_accepted' => '', 'bump_rejected' => '', 'offer_accepted' => '', 'offer_rejected' => '', 'step_id' => 0, 'funnel_id' => 0, 'automation_id' => 0, 'first_click' => '0000-00-00 00:00:00', 'first_landing_url' => '', 'referrer' => '', 'journey' => '', 'source' => 0, 'order_number' => '', 'device' => 'desktop', 'browser' => '', 'country' => '', 'timestamp' => '0000-00-00 00:00:00', ); if ( is_array( $maybe_upsell_orders ) && count( $maybe_upsell_orders ) > 0 ) { foreach ( $maybe_upsell_orders as $upsell_order ) { $offer_id = (string) $upsell_order['offer_id']; $upsell_created_orders[] = absint( $upsell_order['order_id'] ); $upsell_args = $args; $upsell_args['funnel_id'] = $fid; $upsell_args['contact_id'] = $cid; $upsell_args['source'] = $upsell_order['order_id']; $upsell_args['offer_accepted'] = wp_json_encode( array( $offer_id ) ); $upsell_args['timestamp'] = $upsell_order['offertime']; $upsell_args['step_id'] = $step_id; $upsell_args['offer_total'] = floatval( $upsell_order['total_sales'] ); if ( function_exists( 'wc_get_order' ) ) { $upsell_order_obj = wc_get_order( $upsell_order['order_id'] ); if ( $upsell_order_obj && method_exists( $upsell_order_obj, 'get_order_number' ) ) { $temp_order_number = $upsell_order_obj->get_order_number(); $upsell_args['order_number'] = $temp_order_number; } else { $need_to_delete_orders[] = $order_id; continue; } } $upsell_args['utm_source'] = ! empty( $conversion ) ? $conversion_tracking->string_length( $conversion['utm_source'] ) : ''; $upsell_args['utm_medium'] = ! empty( $conversion ) ? $conversion_tracking->string_length( $conversion['utm_medium'] ) : ''; $upsell_args['utm_campaign'] = ! empty( $conversion ) ? $conversion_tracking->string_length( $conversion['utm_campaign'] ) : ''; $upsell_args['utm_term'] = ! empty( $conversion ) ? $conversion_tracking->string_length( $conversion['utm_term'] ) : ''; $upsell_args['utm_content'] = ! empty( $conversion ) ? $conversion_tracking->string_length( $conversion['utm_content'] ) : ''; $need_to_create_orders[] = $upsell_args; } /*** * remove offer data from primary order */ $accepted_offer = array(); $offer_total = 0; } $args['funnel_id'] = $fid; $args['contact_id'] = $cid; $args['source'] = $order_id; $args['bump_rejected'] = ! empty( $rejected_bump ) ? wp_json_encode( $rejected_bump ) : ''; $args['bump_accepted'] = ! empty( $accepted_bump ) ? wp_json_encode( $accepted_bump ) : ''; $args['offer_rejected'] = ! empty( $rejected_offer ) ? wp_json_encode( $rejected_offer ) : ''; $args['offer_accepted'] = ! empty( $accepted_offer ) ? wp_json_encode( $accepted_offer ) : ''; $args['bump_total'] = floatval( $bump_total ); $args['checkout_total'] = floatval( $aero_total ); $args['timestamp'] = $item['date']; $args['step_id'] = $step_id; $args['offer_total'] = floatval( $offer_total ); $args['value'] = ( $args['checkout_total'] + $args['offer_total'] + $args['bump_total'] ); if ( function_exists( 'wc_get_order' ) ) { $order = wc_get_order( $order_id ); if ( $order && method_exists( $order, 'get_order_number' ) ) { $temp_order_number = $order->get_order_number(); $args['order_number'] = $temp_order_number; } else { $need_to_delete_orders[] = $order_id; continue; } } $need_to_create_orders[] = $args; } } if ( ! empty( $need_to_delete_orders ) ) { $ids = implode( ',', $need_to_delete_orders ); $wpdb->query( $wpdb->prepare( "delete from {$wpdb->prefix}bwf_conversion_tracking where type=2 and source IN (%1s)", $ids ) ); //phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder if ( ! empty( $wpdb->last_error ) ) { WFFN_Core()->logger->log( 'migration process delete orders query error ' . $wpdb->last_error . ' last query ' . $wpdb->last_query, 'fk_conv_migration', true ); } } if ( ! empty( $need_to_update_orders ) ) { WFFN_Conversion_Tracking_Migrator::update_multiple_conversion_rows( $need_to_update_orders ); } if ( ! empty( $need_to_create_orders ) ) { WFFN_Conversion_Tracking_Migrator::insert_multiple_conversion_rows( $need_to_create_orders ); } do_action( 'wffn_conversion_migration_complete_batch' ); return true; } } if ( ! function_exists( 'wffn_run_optin_conversion_migrator' ) ) { function wffn_run_optin_conversion_migrator() { global $wpdb; $per_page = 20; /** * If threshold is 0 then we will set it to total number of optins * reaching inside this condition also means that this is the first time we are running this migration */ $conversion_threshold = absint( get_option( '_bwf_optin_conversion_threshold', 0 ) ); if ( 0 === $conversion_threshold ) { $number_of_entries = $wpdb->get_var( "SELECT COUNT(`id`) FROM {$wpdb->prefix}bwf_optin_entries" ); WFFN_Core()->logger->log( 'migration process total number of optins ' . $number_of_entries, 'fk_conv_migration', true ); if ( $number_of_entries === 0 ) { return false; } update_option( '_bwf_optin_conversion_threshold', absint( $number_of_entries ) ); $conversion_threshold = $number_of_entries; } $offset = absint( get_option( '_bwf_optin_conversion_offset', 0 ) ); if ( $offset > 0 && $conversion_threshold > 0 && $offset >= $conversion_threshold ) { WFFN_Core()->logger->log( 'No optin record found', 'fk_conv_migration', true ); return false; } WFFN_Core()->logger->log( 'finding entry from bwf_optin_entries - offset: ' . $offset, 'fk_conv_migration', true ); $number_of_entries = $wpdb->get_results( $wpdb->prepare( "select * from {$wpdb->prefix}bwf_optin_entries limit %d,%d ", $offset, $per_page ), ARRAY_A ); if ( empty( $number_of_entries ) ) { WFFN_Core()->logger->log( 'no entries found', 'fk_conv_migration', true ); return false; } $default = array( 'contact_id' => '', 'utm_source' => '', 'utm_medium' => '', 'utm_campaign' => '', 'utm_term' => '', 'utm_content' => '', 'click_id' => '', 'type' => 2, 'value' => 0, 'checkout_total' => 0, 'bump_total' => 0, 'offer_total' => 0, 'bump_accepted' => '', 'bump_rejected' => '', 'offer_accepted' => '', 'offer_rejected' => '', 'step_id' => 0, 'funnel_id' => 0, 'automation_id' => 0, 'first_click' => '0000-00-00 00:00:00', 'first_landing_url' => '', 'referrer' => '', 'journey' => '', 'source' => 0, 'device' => 'desktop', 'browser' => '', 'country' => '', 'timestamp' => '0000-00-00 00:00:00', ); $conversion_tracking = BWF_Ecomm_Tracking_Common::get_instance(); $new_data = array(); $update_data = array(); foreach ( $number_of_entries as $entry ) { WFFN_Core()->logger->log( 'Processing optin : ' . $entry['id'], 'fk_conv_migration', true ); ++$offset; update_option( '_bwf_optin_conversion_offset', $offset ); $optin_id = $entry['id']; $cid = $entry['cid']; $step_id = $entry['step_id']; $funnel_id = $entry['funnel_id']; $_conversion = $wpdb->get_row( $wpdb->prepare( "SELECT id,utm_source, utm_medium, utm_campaign, utm_term, utm_content, referrer FROM {$wpdb->prefix}bwf_conversion_tracking WHERE type=1 AND source = %d", $optin_id ), ARRAY_A ); if ( ! empty( $_conversion ) ) { // Trim Reference foreach ( array( 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content' ) as $key ) { $_conversion[ $key ] = $conversion_tracking->string_length( $_conversion[ $key ] ); } $_conversion['referrer'] = method_exists( $conversion_tracking, 'filter_referrer' ) ? $conversion_tracking->filter_referrer( $_conversion['referrer'] ) : $_conversion['referrer']; $update_data[ $_conversion['id'] ] = $_conversion; } else { $_conversion = $wpdb->get_row( $wpdb->prepare( "SELECT id,utm_source, utm_medium, utm_campaign, utm_term, utm_content,referrer,timestamp FROM {$wpdb->prefix}bwf_conversion_tracking WHERE step_id = %d AND contact_id = %d AND timestamp BETWEEN DATE_SUB(%s, INTERVAL 5 SECOND) AND DATE_ADD(%s, INTERVAL 5 SECOND)", $step_id, $cid, $entry['date'], $entry['date'] ), ARRAY_A ); $new_data_entry = wp_parse_args( array( 'contact_id' => $cid, 'type' => 1, 'step_id' => $step_id, 'source' => $entry['id'], 'funnel_id' => $funnel_id, 'first_click' => $entry['date'], 'timestamp' => $entry['date'], ), $default ); if ( ! empty( $_conversion ) ) { $_conversion['source'] = $optin_id; foreach ( array( 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content' ) as $key ) { $_conversion[ $key ] = $conversion_tracking->string_length( $_conversion[ $key ] ); } $_conversion['referrer'] = method_exists( $conversion_tracking, 'filter_referrer' ) ? $conversion_tracking->filter_referrer( $_conversion['referrer'] ) : $_conversion['referrer']; $update_data[ $_conversion['id'] ] = $_conversion; } else { $new_data[] = $new_data_entry; } } } if ( ! empty( $update_data ) ) { WFFN_Conversion_Tracking_Migrator::update_multiple_conversion_rows( $update_data ); } if ( ! empty( $new_data ) ) { WFFN_Conversion_Tracking_Migrator::insert_multiple_conversion_rows( $new_data ); } return true; } }