init_ajax_events( $ajax_events ); } /** * Save order bump settings. * * @return void */ public function save_order_bump_settings() { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_save_order_bump_settings', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $response_data = array( 'success' => false, 'messsage' => __( 'Order Bump data not saved.', 'cartflows-pro' ), ); $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : ''; $ob_id = isset( $_POST['ob_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_id'] ) ) : ''; $ob_tab = isset( $_POST['ob_tab'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_tab'] ) ) : ''; if ( ! empty( $ob_id ) && ! empty( $step_id ) ) { $order_bumps = get_post_meta( $step_id, 'wcf-order-bumps', true ); $new_data = isset( $_POST ) ? $_POST : array(); $default_data = \Cartflows_Pro_Checkout_Default_Meta::get_instance()->order_bump_default_meta(); $default_data_keys = array_keys( $default_data ); if ( is_array( $order_bumps ) && ! empty( $order_bumps ) ) { foreach ( $order_bumps as $index => $ob_data ) { if ( $ob_data['id'] === $ob_id ) { foreach ( $new_data as $data_key => $data_value ) { if ( ! in_array( $data_key, $default_data_keys, true ) ) { continue; } $data_value = $this->sanitize_multiple_order_bump_values( $data_value, $default_data[ $data_key ]['sanitize'], $step_id, $order_bumps, $index, $new_data ); $order_bumps[ $index ][ $data_key ] = $data_value; } if ( ! empty( array_keys( $new_data ) ) && in_array( 'product', array_keys( $new_data ), true ) && $new_data['product'] !== $ob_data['product'] ) { // Checking if product tab. Can update later. $order_bumps[ $index ]['product_image'] = ''; $order_bumps[ $index ]['product_img_obj'] = ''; $order_bumps[ $index ]['desc_text'] = false; // Can't set it as empty. Case: If user want to put desc empty. } update_post_meta( $step_id, 'wcf-order-bumps', $order_bumps ); delete_post_meta( $step_id, 'wcf-pro-dynamic-css' ); break; } } $response_data = array( 'messsage' => __( 'Order bump settings saved successfully!', 'cartflows-pro' ), 'success' => true, ); if ( ! empty( array_keys( $new_data ) ) && in_array( 'product', array_keys( $new_data ), true ) && $new_data['product'] !== $ob_data['product'] ) { $current_ob = $this->get_ob_data( $step_id, $ob_id ); $response_data['current_ob'] = $current_ob; } } wp_send_json_error( $response_data ); } else { wp_send_json_error( $response_data ); } } /** * Sanitixe order bump values. * * @param string $data_value meta value. * @param string $filter filter type. * @param int $step_id checkout id. * @param array $order_bumps order bumps. * @param int $index order bump index. * @param int $new_data order bump data. */ public function sanitize_multiple_order_bump_values( $data_value, $filter, $step_id, $order_bumps, $index, $new_data ) { switch ( $filter ) { case 'FILTER_SANITIZE_ARRAY': $sanitized_data = array(); $data_value = (array) $data_value; foreach ( $data_value as $index => $value ) { $sanitized_data[ $index ] = sanitize_text_field( wp_unslash( $value ) ); } $meta_value = $sanitized_data; break; case 'FILTER_SANITIZE_STRING': $meta_value = sanitize_text_field( wp_unslash( $data_value ) ); break; case 'FILTER_VALIDATE_BOOLEAN': $meta_value = filter_var( $data_value, FILTER_VALIDATE_BOOLEAN ); break; case 'FILTER_SANITIZE_URL': $meta_value = filter_var( $data_value, FILTER_SANITIZE_URL ); break; case 'FILTER_SANITIZE_NUMBER_INT': $meta_value = filter_var( $data_value, FILTER_SANITIZE_NUMBER_INT ); break; case 'FILTER_SANITIZE_NUMBER_FLOAT': $meta_value = filter_var( $data_value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); break; case 'FILTER_WP_KSES_POST': $meta_value = wp_kses_post( $data_value ); break; case 'FILTER_SANITIZE_COLOR': $meta_value = sanitize_hex_color( $data_value ); break; case 'FILTER_SANITIZE_RULES': $sanitized_data = array(); if ( is_array( $data_value ) && ! empty( $data_value ) ) { foreach ( $data_value as $group_index => $group_data ) { if ( is_array( $group_data ) && is_array( $group_data['rules'] ) ) { $rules = $this->sanitize_rules( $group_data['rules'] ); $sanitized_data[ $group_index ]['group_id'] = sanitize_text_field( $group_data['group_id'] ); $sanitized_data[ $group_index ]['rules'] = $rules; } } } $meta_value = $sanitized_data; break; case 'FILTER_CARTFLOWS_OB_IMAGE': $image_data = ''; if ( ! empty( $data_value ) && ! is_serialized( $data_value ) ) { $image_obj = json_decode( stripcslashes( wp_unslash( $data_value ) ), true ); $image_url = isset( $image_obj['sizes'] ) ? $image_obj['sizes'] : array(); $image_id = isset( $image_obj['id'] ) ? intval( $image_obj['id'] ) : 0; if ( 0 !== $image_id ) { $image_data = array( 'id' => $image_id, 'url' => array( 'thumbnail' => isset( $image_url['thumbnail']['url'] ) ? esc_url_raw( $image_url['thumbnail']['url'] ) : '', 'medium' => isset( $image_url['medium']['url'] ) ? esc_url_raw( $image_url['medium']['url'] ) : '', 'full' => isset( $image_url['full']['url'] ) ? esc_url_raw( $image_url['full']['url'] ) : '', ), ); } } $meta_value = $image_data; break; default: $meta_value = sanitize_text_field( wp_unslash( $data_value ) ); break; } return $meta_value; } /** * Sanitize rules. * * @param array $rules rules. */ public function sanitize_rules( $rules ) { $sanitized_rules = array(); foreach ( $rules as $index => $rule_data ) { if ( ! empty( $rule_data['value'] ) ) { $sanitized_rules[] = $this->sanitize_rule_data( $rule_data ); } } return $sanitized_rules; } /** * Sanitize rule data. * * @param array $rule_data rule data. */ public static function sanitize_rule_data( $rule_data ) { $sanitized_input = ''; if ( is_array( $rule_data ) ) { $sanitized_input = array(); foreach ( $rule_data as $key => $value ) { $sanitized_key = sanitize_text_field( $key ); $sanitized_input[ $sanitized_key ] = self::sanitize_rule_data( $value ); } } else { $sanitized_input = sanitize_text_field( $rule_data ); } return $sanitized_input; } /** * Get order bump. * * @return void */ public function get_current_order_bump() { if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_get_current_order_bump', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : ''; $ob_id = isset( $_POST['ob_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_id'] ) ) : 0; $current_ob = array(); if ( ! empty( $ob_id ) && ! empty( $step_id ) ) { $current_ob = $this->get_ob_data( $step_id, $ob_id ); $response_data = array( 'success' => true, 'messsage' => __( 'Order Bump Data Retrieved', 'cartflows-pro' ), 'current_ob' => $current_ob, ); } else { $response_data = array( 'success' => false, 'messsage' => __( 'No data.', 'cartflows-pro' ), 'current_ob' => $current_ob, ); } wp_send_json_success( $response_data ); } /** * Get ob data. * * @param int $step_id step id. * @param int $ob_id ob id. */ public function get_ob_data( $step_id, $ob_id ) { $order_bumps = get_post_meta( $step_id, 'wcf-order-bumps', true ); $admin_helper = \Cartflows_Pro_Admin_Helper::get_instance(); $default_meta = \Cartflows_Pro_Checkout_Default_Meta::get_instance()->order_bump_default_meta(); $ob_default_meta = array(); foreach ( $default_meta as $key => $value ) { $ob_default_meta[ $key ] = $value['default']; } if ( is_array( $order_bumps ) ) { foreach ( $order_bumps as $index => $ob_data ) { if ( $ob_id === $ob_data['id'] ) { $ob_data = wp_parse_args( $ob_data, $ob_default_meta ); $product_id = 0; if ( ! empty( $ob_data['product'] ) ) { $product_id = intval( $ob_data['product'] ); $ob_data['product'] = $admin_helper::get_products_label( array( $product_id ) ); } $ob_data = $this->add_ob_product_data( $product_id, $ob_data ); if ( ! empty( $ob_data['discount_coupon'] ) ) { $ob_data['discount_coupon'] = $admin_helper::get_coupons_label( array( $ob_data['discount_coupon'] ) ); } if ( 'yes' === $ob_data['is_rule'] ) { $ob_data['rules'] = $this->filter_ob_rules( $ob_data['rules'] ); } break; } } } return $ob_data; } /** * Add product data. * * @param int $product_id product id. * @param array $ob_data order bump data. */ public function add_ob_product_data( $product_id, $ob_data ) { $product_obj = wc_get_product( $product_id ); if ( ! empty( $ob_data['product'] ) && $product_obj ) { // Update product image. if ( empty( $ob_data['product_image'] ) ) { $product_image = get_the_post_thumbnail_url( $product_id ); if ( empty( $product_image ) ) { $product_image = esc_url_raw( CARTFLOWS_PRO_URL . 'assets/images/image-placeholder.png' ); } $ob_data['product_image'] = $product_image; } // Update product description. if ( empty( $ob_data['desc_text'] ) ) { $product_desc = $product_obj->get_short_description(); $ob_data['desc_text'] = $product_desc . '
' . "\r\n{{product_price}}"; } // Calculate product custom price. $custom_price = wcf_pro()->utils->get_calculated_discount( $ob_data['discount_type'], $ob_data['discount_value'], $ob_data['product'][0]['original_price'] ); $product_price_data = \Cartflows_Pro_Order_Bump_Product::get_instance()->get_taxable_product_price( $product_obj, $ob_data['product'][0]['original_price'], $custom_price ); $display_price = ''; if ( 0 < $ob_data['discount_value'] && \Cartflows_Pro_Helper::is_valid_custom_price( $custom_price ) ) { $display_price = '' . wc_price( $product_price_data['product_price'] ) . ''; $display_price .= ' ' . wc_price( $product_price_data['custom_price'] ) . ''; } else { $display_price = '' . wc_price( $product_price_data['product_price'] ) . ''; } $ob_data['product'][0]['display_price'] = $display_price; } else { $ob_data['product_image'] = esc_url_raw( CARTFLOWS_PRO_URL . 'assets/images/image-placeholder.png' ); } return $ob_data; } /** * Filter ob rules. * * @param array $conditions conditions data. */ public function filter_ob_rules( $conditions ) { if ( is_array( $conditions ) ) { foreach ( $conditions as $group_index => $group_data ) { if ( is_array( $group_data ) & ! empty( $group_data['rules'] ) ) { $conditions[ $group_index ]['rules'] = $this->filter_rules_data( $group_data['rules'] ); } } } return $conditions; } /** * Filter rule options. * * @param array $rules rule. */ public function filter_rules_data( $rules ) { $admin_helper = \Cartflows_Pro_Admin_Helper::get_instance(); foreach ( $rules as $rule_index => $rule_data ) { if ( is_array( $rule_data['value'] ) && ! empty( $rule_data['value'][0] ) ) { switch ( $rule_data['condition'] ) { case 'cart_item': $rules[ $rule_index ]['value'] = $admin_helper::get_products_label( $rule_data['value'] ); break; case 'cart_shipping_method': $rules[ $rule_index ]['value'] = $admin_helper::get_labels( $rule_data['value'] ); break; case 'cart_item_category': $rules[ $rule_index ]['value'] = $admin_helper::get_products_cat_label( $rule_data['value'] ); break; case 'cart_item_tag': $rules[ $rule_index ]['value'] = $admin_helper::get_products_tag_label( $rule_data['value'] ); break; case 'cart_coupons': $rules[ $rule_index ]['value'] = $admin_helper::get_coupons_label( $rule_data['value'] ); break; case 'cart_payment_method': $rules[ $rule_index ]['value'] = $admin_helper::get_payment_methods_label( $rule_data['value'] ); break; case 'cart_shipping_country': case 'cart_billing_country': $rules[ $rule_index ]['value'] = $admin_helper::get_country_label( $rule_data['value'] ); break; default: break; } } } return $rules; } /** * Delete order bump. * * @return void */ public function update_order_bump_status() { if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_update_order_bump_status', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $response_data = array( 'success' => false, 'messsage' => __( 'Cant update order bump status!', 'cartflows-pro' ), ); $post_id = isset( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : 0; $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : 0; $ob_id = isset( $_POST['ob_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_id'] ) ) : 0; $ob_status = isset( $_POST['ob_status'] ) && 'true' === $_POST['ob_status'] ? true : false; if ( CARTFLOWS_STEP_POST_TYPE !== get_post_type( $step_id ) ) { wp_send_json_error( $response_data ); } if ( ! empty( $ob_id ) && ! empty( $step_id ) ) { $order_bumps = get_post_meta( $step_id, 'wcf-order-bumps', true ); if ( is_array( $order_bumps ) && ! empty( $order_bumps ) ) { foreach ( $order_bumps as $index => $ob_data ) { if ( $ob_id === $ob_data['id'] ) { $order_bumps[ $index ]['status'] = $ob_status; } } update_post_meta( $step_id, 'wcf-order-bumps', $order_bumps ); AdminHelper::clear_current_step_css( $step_id ); $response_data = array( 'success' => true, 'messsage' => __( 'Order Bump Status Updated Succesfully', 'cartflows-pro' ), ); wp_send_json_success( $response_data ); } wp_send_json_error( $response_data ); } else { wp_send_json_error( $response_data ); } } /** * Delete order bump. * * @return void */ public function delete_order_bump() { if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_delete_order_bump', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $response_data = array( 'success' => false, 'messsage' => __( 'Cant delete order bump!', 'cartflows-pro' ), ); $post_id = isset( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : 0; $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : 0; $ob_id = isset( $_POST['ob_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_id'] ) ) : 0; if ( CARTFLOWS_STEP_POST_TYPE !== get_post_type( $step_id ) ) { wp_send_json_error( $response_data ); } if ( ! empty( $ob_id ) && ! empty( $step_id ) ) { $order_bumps = get_post_meta( $step_id, 'wcf-order-bumps', true ); $new_ob_data = array(); if ( is_array( $order_bumps ) && ! empty( $order_bumps ) ) { foreach ( $order_bumps as $index => $ob_data ) { if ( $ob_id === $ob_data['id'] ) { unset( $order_bumps[ $index ] ); $new_ob_data = array_values( $order_bumps ); update_post_meta( $step_id, 'wcf-order-bumps', $new_ob_data ); AdminHelper::clear_current_step_css( $step_id ); break; } } $response_data = array( 'success' => true, 'messsage' => __( 'Order Bump Deleted Succesfully', 'cartflows-pro' ), 'order_bumps' => $new_ob_data, ); wp_send_json_success( $response_data ); } wp_send_json_error( $response_data ); } else { wp_send_json_error( $response_data ); } } /** * Add Order Bump. * * @return void */ public function add_order_bump() { if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); wp_send_json_error( $response_data ); } $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); if ( empty( $_POST ) ) { wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_add_order_bump', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $post_id = isset( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : 0; $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : 0; $ob_id = isset( $_POST['ob_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_id'] ) ) : 0; $title = isset( $_POST['title'] ) ? sanitize_text_field( wp_unslash( $_POST['title'] ) ) : 'no title'; if ( CARTFLOWS_STEP_POST_TYPE !== get_post_type( $step_id ) ) { wp_send_json_error( $response_data ); } if ( ! empty( $ob_id ) && ! empty( $step_id ) ) { $order_bumps = get_post_meta( $step_id, 'wcf-order-bumps', true ); if ( ! is_array( $order_bumps ) ) { $order_bumps = array(); } $new_ob_data = AdminHelper::add_default_order_bump_data( $ob_id, $title, $order_bumps ); update_post_meta( $step_id, 'wcf-order-bumps', $new_ob_data ); $response_data = array( 'success' => true, 'messsage' => __( 'Order Bump Added Succesfully', 'cartflows-pro' ), 'order_bumps' => $new_ob_data, ); wp_send_json_success( $response_data ); } else { $response_data = array( 'messsage' => __( 'Cant add order bump!', 'cartflows-pro' ), 'success' => false, ); wp_send_json_error( $response_data ); } } /** * Clone Order Bump * * @return void */ public function clone_order_bump() { if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_clone_order_bump', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $response_data = array( 'messsage' => __( 'Can\'t clone the order bump! Order Bump ID or Page ID not found.', 'cartflows-pro' ), 'success' => false, ); $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : 0; $ob_id = isset( $_POST['ob_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_id'] ) ) : ''; if ( CARTFLOWS_STEP_POST_TYPE !== get_post_type( $step_id ) ) { wp_send_json_error( $response_data ); } if ( ! empty( $ob_id ) && ! empty( $step_id ) ) { // Get all the order bumps for current step. $order_bumps = get_post_meta( $step_id, 'wcf-order-bumps', true ); if ( is_array( $order_bumps ) && ! empty( $order_bumps ) ) { foreach ( $order_bumps as $index => $ob_data ) { if ( $ob_id === $ob_data['id'] ) { // Generate random ID for new order Bump. $new_ob_id = substr( md5( wp_rand() ), 2, 3 ); $data_to_clone = $ob_data; // Replace/Change the ID and Title to new. $data_to_clone['id'] = $new_ob_id; $data_to_clone['title'] = $data_to_clone['title'] . __( ' Clone', 'cartflows-pro' ); $data_to_clone['status'] = false; array_push( $order_bumps, $data_to_clone ); update_post_meta( $step_id, 'wcf-order-bumps', $order_bumps ); break; } } $response_data = array( 'success' => true, 'messsage' => __( 'Order Bump Cloned Succesfully', 'cartflows-pro' ), 'order_bumps' => $order_bumps, ); wp_send_json_success( $response_data ); } wp_send_json_error( $response_data ); } else { wp_send_json_error( $response_data ); } } /** * Update order bump title. */ public function update_order_bump_title() { if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); wp_send_json_error( $response_data ); } $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); if ( empty( $_POST ) ) { wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_update_order_bump_title', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $post_id = isset( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : 0; $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : 0; $ob_id = isset( $_POST['ob_id'] ) ? sanitize_text_field( wp_unslash( $_POST['ob_id'] ) ) : 0; $new_title = isset( $_POST['new_title'] ) ? sanitize_text_field( wp_unslash( $_POST['new_title'] ) ) : 'no title'; if ( CARTFLOWS_STEP_POST_TYPE !== get_post_type( $step_id ) ) { wp_send_json_error( $response_data ); } $order_bumps = get_post_meta( $step_id, 'wcf-order-bumps', true ); if ( is_array( $order_bumps ) && ! empty( $order_bumps ) ) { foreach ( $order_bumps as $index => $ob_data ) { if ( $ob_id === $ob_data['id'] ) { $order_bumps[ $index ]['title'] = $new_title; break; } } update_post_meta( $step_id, 'wcf-order-bumps', $order_bumps ); $response_data = array( 'success' => true, 'messsage' => __( 'Order Bump Title Updated Succesfully', 'cartflows-pro' ), 'order_bumps' => $order_bumps, ); wp_send_json_success( $response_data ); } $response_data = array( 'success' => true, 'messsage' => __( 'Order Bump Title Not Updated.', 'cartflows-pro' ), 'order_bumps' => $order_bumps, ); wp_send_json_error( $response_data ); } /** * Reorder order bumps. */ public function reorder_order_bumps() { if ( ! current_user_can( 'cartflows_manage_flows_steps' ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'permission' ) ); wp_send_json_error( $response_data ); } if ( empty( $_POST ) ) { $response_data = array( 'messsage' => __( 'No post data found!', 'cartflows-pro' ) ); wp_send_json_error( $response_data ); } /** * Nonce verification */ if ( ! check_ajax_referer( 'cartflows_pro_reorder_order_bumps', 'security', false ) ) { $response_data = array( 'messsage' => $this->get_error_msg( 'nonce' ) ); wp_send_json_error( $response_data ); } $step_id = isset( $_POST['step_id'] ) ? intval( $_POST['step_id'] ) : 0; $sorted_obs = isset( $_POST['sorted_obs'] ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['sorted_obs'] ) ) ) : array(); $result = array( 'status' => false, 'text' => __( 'Order Bumps not sorted.', 'cartflows-pro' ), ); if ( ! $step_id || empty( $sorted_obs ) ) { wp_send_json( $result ); } if ( CARTFLOWS_STEP_POST_TYPE !== get_post_type( $step_id ) ) { wp_send_json_error( $result ); } $new_order_bumps = array(); foreach ( $sorted_obs as $index => $ob_id ) { $get_ob_data = $this->get_order_bump_data_by_id( $step_id, $ob_id ); if ( ! empty( $get_ob_data ) ) { array_push( $new_order_bumps, $get_ob_data ); } } update_post_meta( $step_id, 'wcf-order-bumps', $new_order_bumps ); $result = array( 'status' => true, /* translators: %s step id */ 'text' => sprintf( __( 'Order Bump sorted for step - %s', 'cartflows-pro' ), $step_id ), ); wp_send_json( $result ); } /** * Get order bump. * * @param int $checkout_id checkout id. * @param string $ob_id order bump id. */ public function get_order_bump_data_by_id( $checkout_id, $ob_id ) { $order_bumps = get_post_meta( $checkout_id, 'wcf-order-bumps', true ); $required_ob_data = array(); if ( is_array( $order_bumps ) && ! empty( $order_bumps ) ) { foreach ( $order_bumps as $index => $ob_data ) { if ( $ob_id === $ob_data['id'] ) { $required_ob_data = $ob_data; break; } } } return $required_ob_data; } }