Пример #1
0
        if (!empty($cart['failed_order_id'])) {
            $_msg = !empty($_payment_info['reason_text']) ? $_payment_info['reason_text'] : '';
            $_msg .= empty($_msg) ? __('text_order_placed_error') : '';
            fn_set_notification('O', '', $_msg);
            $cart['processed_order_id'] = $cart['failed_order_id'];
            unset($cart['failed_order_id']);
        }
        unset($_payment_info['card_number'], $_payment_info['cvv2']);
        $cart['payment_info'] = $_payment_info;
        if (!empty($cart['extra_payment_info'])) {
            $cart['payment_info'] = array_merge($cart['payment_info'], $cart['extra_payment_info']);
        }
    }
    // Delete product from the cart
} elseif ($mode == 'delete' && isset($_REQUEST['cart_id'])) {
    fn_delete_cart_product($cart, $_REQUEST['cart_id']);
    if (fn_cart_is_empty($cart) == true) {
        fn_clear_cart($cart);
    }
    fn_save_cart_content($cart, $auth['user_id']);
    $cart['recalculate'] = true;
    fn_calculate_cart_content($cart, $auth, 'A', true, 'F', true);
    if (defined('AJAX_REQUEST')) {
        fn_set_notification('N', __('notice'), __('text_product_has_been_deleted'));
    }
    $redirect_mode = empty($_REQUEST['redirect_mode']) ? 'cart' : $_REQUEST['redirect_mode'];
    return array(CONTROLLER_STATUS_REDIRECT, 'checkout.' . $redirect_mode);
} elseif ($mode == 'get_custom_file' && isset($_REQUEST['cart_id']) && isset($_REQUEST['option_id']) && isset($_REQUEST['file'])) {
    if (isset($cart['products'][$_REQUEST['cart_id']]['extra']['custom_files'][$_REQUEST['option_id']][$_REQUEST['file']])) {
        $file = $cart['products'][$_REQUEST['cart_id']]['extra']['custom_files'][$_REQUEST['option_id']][$_REQUEST['file']];
        Storage::instance('custom_files')->get($file['path'], $file['name']);
Пример #2
0
function fn_product_configurator_pre_add_to_cart(&$product_data, &$cart, &$auth, $update)
{
    if ($update == true) {
        foreach ($product_data as $key => $value) {
            if (!empty($cart['products'][$key]['extra']['configuration'])) {
                $product_data[$key]['extra']['configuration'] = $cart['products'][$key]['extra']['configuration'];
                if (!empty($value['product_options'])) {
                    $product_data[$key]['extra']['product_options'] = $value['product_options'];
                }
                $cart_id = fn_generate_cart_id($value['product_id'], $product_data[$key]['extra'], false);
                foreach ($cart['products'] as $k => $v) {
                    if (isset($v['extra']['parent']['configuration']) && $v['extra']['parent']['configuration'] == $key) {
                        $product_data[$k] = array('product_id' => $v['product_id'], 'amount' => $value['amount'], 'extra' => array('parent' => array('configuration' => $cart_id)));
                    }
                }
            }
        }
    } else {
        foreach ($product_data as $key => $value) {
            if (!empty($value['cart_id'])) {
                // if we're editing the configuration, just delete it and add new
                fn_delete_cart_product($cart, $value['cart_id']);
            }
            if (!empty($value['configuration'])) {
                $product_data[$key]['extra']['configuration'] = $value['configuration'];
                if (!empty($value['product_options'])) {
                    $product_data[$key]['extra']['product_options'] = $value['product_options'];
                }
                $cart_id = fn_generate_cart_id($key, $product_data[$key]['extra'], false);
                foreach ($value['configuration'] as $group_id => $_product_id) {
                    if (is_array($_product_id)) {
                        foreach ($_product_id as $_id) {
                            if (!isset($product_data[$_id])) {
                                $product_data[$_id] = array();
                                $product_data[$_id]['product_id'] = $_id;
                                $product_data[$_id]['amount'] = $value['amount'];
                                $product_data[$_id]['extra']['parent']['configuration'] = $cart_id;
                            } elseif (isset($product_data[$_id]['extra']['parent']['configuration']) && $product_data[$_id]['extra']['parent']['configuration'] == $cart_id) {
                                $product_data[$_id]['amount'] += $value['amount'];
                            }
                        }
                    } else {
                        if (!isset($product_data[$_product_id])) {
                            $product_data[$_product_id] = array();
                            $product_data[$_product_id]['product_id'] = $_product_id;
                            $product_data[$_product_id]['amount'] = $value['amount'];
                            $product_data[$_product_id]['extra']['parent']['configuration'] = $cart_id;
                        } elseif (isset($product_data[$_product_id]['extra']['parent']['configuration']) && $product_data[$_product_id]['extra']['parent']['configuration'] == $cart_id) {
                            $product_data[$_product_id]['amount'] += $value['amount'];
                        }
                    }
                }
                $product_data[$key]['extra']['configuration_id'] = $cart_id;
            }
        }
    }
}
Пример #3
0
                        $cart['products'][$key_cart_product]['amount'] = $cart_product['amount'] - $_REQUEST['cart_amount'];
                    } else {
                        fn_delete_cart_product($cart, $key_cart_product);
                    }
                }
            }
        }
        fn_save_cart_content($cart, $auth['user_id']);
        //die();
    }
    $cart_user_id = $_SESSION['auth']['user_id'];
    if (!$cart_user_id) {
        $cart_user_id = fn_get_session_data('cu_id');
    }
    db_query("DELETE FROM ?:user_session_products WHERE session_id = ?s AND type = ?s AND user_id = ?s AND item_id=?s", Session::getId(), 'C', $cart_user_id, $_REQUEST['cart_id']);
    fn_delete_cart_product($cart, $_REQUEST['cart_id'], true, true);
    if (fn_cart_is_empty($cart) == true) {
        fn_clear_cart($cart);
    }
    //fn_save_cart_content($cart, $auth['user_id']);
    if ($auth['user_id']) {
        db_query("UPDATE ?:user_session_products SET user_id = ?s WHERE session_id = ?s AND type = ?s AND user_type = ?s", $auth['user_id'], Session::getId(), 'C', 'U');
    }
    $cart['recalculate'] = true;
    fn_calculate_cart_content($cart, $auth, 'A', true, 'F', true);
    if (defined('AJAX_REQUEST')) {
        fn_set_notification('N', __('notice'), __('text_product_has_been_deleted'));
    }
    $redirect_mode = empty($_REQUEST['redirect_mode']) ? 'cart' : $_REQUEST['redirect_mode'];
    return array(CONTROLLER_STATUS_REDIRECT, "checkout." . $redirect_mode);
} elseif ($mode == 'get_custom_file' && isset($_REQUEST['cart_id']) && isset($_REQUEST['option_id']) && isset($_REQUEST['file'])) {
Пример #4
0
function fn_gift_certificates_extract_cart(&$cart, &$user_id, &$type, &$user_type)
{
    if (!empty($user_id)) {
        $_cart_gift_cert = db_get_hash_array("SELECT * FROM ?:user_session_products WHERE user_id = ?i AND type = ?s AND item_type = 'G' AND user_type = ?s", 'item_id', $user_id, $type, $user_type);
        if (!empty($cart['gift_certificates']) && fn_allowed_for('MULTIVENDOR')) {
            foreach ($cart['products'] as $cart_id => $product) {
                if (empty($product['extra']['parent']['certificate'])) {
                    fn_delete_cart_product($cart, $cart_id);
                    fn_set_notification('W', 'Warning', __('gift_cert_with_products'));
                }
            }
        }
        if (!empty($_cart_gift_cert) && is_array($_cart_gift_cert)) {
            $other_products = false;
            foreach ($cart['products'] as $product) {
                if (empty($product['extra']['parent']['certificate'])) {
                    $other_products = true;
                    break;
                }
            }
            if (fn_allowed_for('MULTIVENDOR') && $other_products) {
                fn_set_notification('W', 'Warning', __('gift_cert_with_products'));
                foreach ($_cart_gift_cert as $_item_id => $_gift_cert) {
                    fn_delete_cart_gift_certificate($cart, $_item_id);
                }
            } else {
                $cart['gift_certificates'] = empty($cart['gift_certificates']) ? array() : $cart['gift_certificates'];
                foreach ($_cart_gift_cert as $_item_id => $_gift_cert) {
                    $_gift_cert_extra = unserialize($_gift_cert['extra']);
                    unset($_gift_cert['extra']);
                    $cart['gift_certificates'][$_item_id] = empty($cart['gift_certificates'][$_item_id]) ? fn_array_merge($_gift_cert, $_gift_cert_extra, true) : $cart['gift_certificates'][$_item_id];
                }
            }
        }
    }
}
Пример #5
0
/**
 * Place order handler
 *
 * @param  array $cart   Cart
 * @param  array $auth   Auth
 * @param  array $params Params
 * @return str
 */
function fn_checkout_place_order(&$cart, &$auth, $params)
{
    // Prevent unauthorized access
    if (empty($cart['user_data']['email'])) {
        return PLACE_ORDER_STATUS_DENIED;
    }
    // Prevent using disabled payment method by challenging HTTP data
    if (!empty($params['payment_id'])) {
        $cart['payment_id'] = $params['payment_id'];
    }
    if (isset($cart['payment_id'])) {
        $payment_method_data = fn_get_payment_method_data($cart['payment_id']);
        if (!empty($payment_method_data['status']) && $payment_method_data['status'] != 'A') {
            return PLACE_ORDER_STATUS_DENIED;
        }
    }
    // Remove previous failed order
    if (!empty($cart['failed_order_id']) || !empty($cart['processed_order_id'])) {
        $_order_ids = !empty($cart['failed_order_id']) ? $cart['failed_order_id'] : $cart['processed_order_id'];
        foreach ($_order_ids as $_order_id) {
            fn_delete_order($_order_id);
        }
        $cart['rewrite_order_id'] = $_order_ids;
        unset($cart['failed_order_id'], $cart['processed_order_id']);
    }
    if (!empty($params['payment_info'])) {
        $cart['payment_info'] = $params['payment_info'];
    } else {
        $cart['payment_info'] = array();
    }
    if (empty($params['payment_info']) && !empty($cart['extra_payment_info'])) {
        $cart['payment_info'] = empty($cart['payment_info']) ? array() : $cart['payment_info'];
        $cart['payment_info'] = array_merge($cart['extra_payment_info'], $cart['payment_info']);
    }
    unset($cart['payment_info']['secure_card_number']);
    if (!empty($cart['products'])) {
        foreach ($cart['products'] as $cart_id => $product) {
            $_is_edp = db_get_field("SELECT is_edp FROM ?:products WHERE product_id = ?i", $product['product_id']);
            if (fn_check_amount_in_stock($product['product_id'], $product['amount'], empty($product['product_options']) ? array() : $product['product_options'], $cart_id, $_is_edp, 0, $cart) == false) {
                fn_delete_cart_product($cart, $cart_id);
                return PLACE_ORDER_STATUS_TO_CART;
            }
            if (!fn_allowed_for('ULTIMATE:FREE')) {
                $exceptions = fn_get_product_exceptions($product['product_id'], true);
                if (!isset($product['options_type']) || !isset($product['exceptions_type'])) {
                    $product = array_merge($product, db_get_row('SELECT options_type, exceptions_type FROM ?:products WHERE product_id = ?i', $product['product_id']));
                }
                if (!fn_is_allowed_options_exceptions($exceptions, $product['product_options'], $product['options_type'], $product['exceptions_type'])) {
                    fn_set_notification('E', __('notice'), __('product_options_forbidden_combination', array('[product]' => $product['product'])));
                    fn_delete_cart_product($cart, $cart_id);
                    return PLACE_ORDER_STATUS_TO_CART;
                }
                if (!fn_is_allowed_options($product)) {
                    fn_set_notification('E', __('notice'), __('product_disabled_options', array('[product]' => $product['product'])));
                    fn_delete_cart_product($cart, $cart_id);
                    return PLACE_ORDER_STATUS_TO_CART;
                }
            }
        }
    }
    list($order_id, $process_payment) = fn_place_order($cart, $auth);
    // Clean up saved shipping rates
    unset($_SESSION['product_groups']);
    if (!empty($order_id)) {
        if (empty($params['skip_payment']) && $process_payment == true || !empty($params['skip_payment']) && empty($auth['act_as_user'])) {
            // administrator, logged in as customer can skip payment
            $payment_info = !empty($cart['payment_info']) ? $cart['payment_info'] : array();
            fn_start_payment($order_id, array(), $payment_info);
        }
        fn_order_placement_routines('route', $order_id);
        return PLACE_ORDER_STATUS_OK;
    } else {
        return PLACE_ORDER_STATUS_TO_CART;
    }
}
Пример #6
0
     Registry::set('runtime.controller', 'checkout', true);
     fn_calculate_cart_content($cart, $auth, 'S', true, 'F', true);
     Registry::set('runtime.controller', 'twigmo');
     $result = fn_twg_api_get_session_cart($cart, $lang_code);
     $response->setData($result);
 } elseif ($meta['action'] == 'update_cart_amount') {
     $cart =& $_SESSION['cart'];
     $auth =& $_SESSION['auth'];
     $cart_id = $_REQUEST['cart_id'] . '';
     if (empty($cart['products'][$cart_id])) {
         return;
     }
     $products = $cart['products'];
     foreach ($products as $_key => $_data) {
         if (empty($_data['amount']) && !isset($cart['products'][$_key]['extra']['parent'])) {
             fn_delete_cart_product($cart, $_key);
         }
     }
     $products[$cart_id]['amount'] = $_REQUEST['amount'];
     fn_add_product_to_cart($products, $cart, $auth, true);
     fn_save_cart_content($cart, $auth['user_id']);
     $cart['recalculate'] = true;
     Registry::set('runtime.controller', 'checkout', true);
     fn_calculate_cart_content($cart, $auth, 'S', true, 'F', true);
     Registry::set('runtime.controller', 'twigmo');
     $result = fn_twg_api_get_session_cart($cart, $lang_code);
     $response->setData($result);
 } elseif ($meta['action'] == 'logout') {
     fn_twg_api_customer_logout();
 } elseif ($meta['action'] == 'send_form') {
     fn_send_form($_REQUEST['page_id'], empty($_REQUEST['form_values']) ? array() : $_REQUEST['form_values']);
Пример #7
0
function fn_delete_gift_certificate_in_use($gift_cert_code, &$cart)
{
    if (!empty($gift_cert_code)) {
        foreach ((array) $cart['products'] as $k => $v) {
            if (isset($v['extra']['in_use_certificate'][$gift_cert_code])) {
                unset($cart['products'][$k]['extra']['in_use_certificate'][$gift_cert_code]);
                if (empty($cart['products'][$k]['extra']['in_use_certificate'])) {
                    fn_delete_cart_product($cart, $k);
                } else {
                    $cart['products'][$k]['amount'] -= $v['extra']['in_use_certificate'][$gift_cert_code];
                }
            }
        }
        if (!empty($cart['deleted_exclude_products'][GIFT_CERTIFICATE_EXCLUDE_PRODUCTS])) {
            foreach ($cart['deleted_exclude_products'][GIFT_CERTIFICATE_EXCLUDE_PRODUCTS] as $cart_id => $v) {
                if (isset($v['in_use_certificate'][$gift_cert_code])) {
                    unset($cart['deleted_exclude_products'][GIFT_CERTIFICATE_EXCLUDE_PRODUCTS][$cart_id]);
                }
            }
        }
        if (!empty($cart['use_gift_certificates'][$gift_cert_code]['products'])) {
            unset($_SESSION['shipping_rates']);
        }
        $cart['reset_use_gift_certificates'][] = $cart['use_gift_certificates'][$gift_cert_code]['gift_cert_id'];
        unset($cart['use_gift_certificates'][$gift_cert_code]);
    }
}
Пример #8
0
/**
 * Update cart products from passed products data
 *
 * @param array $cart Array of cart content and user information necessary for purchase
 * @param array $product_data Array of new products data
 * @param array $auth Array of user authentication data (e.g. uid, usergroup_ids, etc.)
 * @return boolean Always true
 */
function fn_update_cart_products(&$cart, $product_data, $auth)
{
    /**
     * Actions before updating cart products
     *
     * @param array $cart         Array of cart content and user information necessary for purchase
     * @param array $product_data Array of new products data
     * @param array $auth         Array of user authentication data (e.g. uid, usergroup_ids, etc.)
     */
    fn_set_hook('update_cart_products_pre', $cart, $product_data, $auth);
    if (is_array($cart['products']) && !empty($product_data)) {
        list($product_data, $cart) = fn_add_product_options_files($product_data, $cart, $auth, true);
        unset($product_data['custom_files']);
        foreach ($product_data as $k => $v) {
            if (!isset($cart['products'][$k]['extra']['exclude_from_calculate'])) {
                if (empty($v['extra'])) {
                    $v['extra'] = array();
                }
                if ($v['price'] < 0) {
                    $v['price'] = 0;
                }
                unset($v['object_id']);
                $amount = fn_normalize_amount($v['amount']);
                $price = fn_get_product_price($v['product_id'], $amount, $auth);
                $v['extra'] = empty($cart['products'][$k]['extra']) ? array() : $cart['products'][$k]['extra'];
                $v['extra']['product_options'] = empty($v['product_options']) ? array() : $v['product_options'];
                $_id = fn_generate_cart_id($v['product_id'], $v['extra']);
                if (!isset($cart['products'][$_id])) {
                    //if combination doesn't exist in the cart
                    $cart['products'][$_id] = $v;
                    $cart['products'][$_id]['company_id'] = !empty($cart['products'][$k]['company_id']) ? $cart['products'][$k]['company_id'] : 0;
                    $_product = $cart['products'][$k];
                    fn_define_original_amount($v['product_id'], $_id, $cart['products'][$_id], $_product);
                    fn_delete_cart_product($cart, $k);
                } elseif ($k != $_id) {
                    // if the combination is exist but differs from the current
                    $amount += $cart['products'][$_id]['amount'];
                    fn_delete_cart_product($cart, $k);
                }
                if (empty($amount)) {
                    fn_delete_cart_product($cart, $_id);
                    continue;
                } else {
                    $_product_options = !empty($v['product_options']) ? $v['product_options'] : array();
                    $cart['products'][$_id]['amount'] = fn_check_amount_in_stock($v['product_id'], $amount, $_product_options, $_id, !empty($cart['products'][$_id]['is_edp']) && $cart['products'][$_id]['is_edp'] == 'Y' ? 'Y' : 'N', !empty($cart['products'][$_id]['original_amount']) ? $cart['products'][$_id]['original_amount'] : 0, $cart);
                    if ($cart['products'][$_id]['amount'] == false && !empty($_product)) {
                        $cart['products'][$_id] = $_product;
                        unset($_product);
                    }
                }
                if ($k != $_id) {
                    $cart['products'][$_id]['prev_cart_id'] = $k;
                    // save stored taxes for products
                    fn_update_stored_cart_taxes($cart, $k, $_id, true);
                } elseif (isset($cart['products'][$_id]['prev_cart_id'])) {
                    unset($cart['products'][$_id]['prev_cart_id']);
                }
                $cart['products'][$_id]['stored_price'] = !empty($v['stored_price']) ? $v['stored_price'] : 'N';
                if ($cart['products'][$_id]['stored_price'] == 'Y') {
                    $cart['products'][$_id]['price'] = $v['price'];
                }
                $cart['products'][$_id]['stored_discount'] = !empty($v['stored_discount']) ? $v['stored_discount'] : 'N';
                if ($cart['products'][$_id]['stored_discount'] == 'Y') {
                    $cart['products'][$_id]['discount'] = $v['discount'];
                }
            }
        }
    }
    /**
     * Additional cart products updates from passed params
     *
     * @param array $cart         Array of cart content and user information necessary for purchase
     * @param array $product_data Array of new products data
     * @param array $auth         Array of user authentication data (e.g. uid, usergroup_ids, etc.)
     */
    fn_set_hook('update_cart_products_post', $cart, $product_data, $auth);
    return true;
}
Пример #9
0
         }
     }
     fn_add_product_to_cart($_REQUEST['product_data'], $_SESSION['cart'], $customer_auth);
     foreach ($cart['products'] as $id => $product) {
         if (!empty($product['extra']['promotions'])) {
             unset($cart['products'][$id]['extra']['promotions']);
         }
     }
     $cart['recalculate_catalog_promotions'] = true;
     fn_calculate_cart_content($cart, $customer_auth);
 }
 // Delete products from the cart
 if ($mode == 'delete') {
     if (!empty($_REQUEST['cart_ids'])) {
         foreach ($_REQUEST['cart_ids'] as $cart_id) {
             fn_delete_cart_product($cart, $cart_id);
         }
     }
 }
 // Select customer
 if ($mode == 'select_customer') {
     if (!empty($_REQUEST['selected_user_id'])) {
         $cart['user_id'] = $_REQUEST['selected_user_id'];
         $u_data = db_get_row("SELECT user_id, tax_exempt, user_type FROM ?:users WHERE user_id = ?i", $cart['user_id']);
         $customer_auth = fn_fill_auth($u_data, array(), false, 'C');
         $cart['user_data'] = array();
     }
 }
 // update products quantity and etc.
 if ($mode == 'update_totals') {
     fn_update_cart_by_data($cart, $_REQUEST, $customer_auth);
Пример #10
0
                            Registry::get('view')->assign('hide_amount', true);
                        }
        
                        $title = __('product_added_to_wl');
                        $msg = Registry::get('view')->fetch('addons/wishlist/views/wishlist/components/product_notification.tpl');
                        fn_set_notification('I', $title, $msg, 'I');
                    } else {
                        if ($product_ids) {
                            fn_set_notification('W', __('notice'), __('product_in_wishlist'));
                        }
                    }
                    
                    $product_ids = fn_add_product_to_wishlist($_REQUEST['product_data'], $wishlist, $auth);
                    fn_save_cart_content($wishlist, $auth['user_id'], 'W'); */
        //delete the cart product
        fn_delete_cart_product($cart, $_REQUEST['ls_cart_combination_hash']);
        if (fn_cart_is_empty($cart) == true) {
            fn_clear_cart($cart);
        }
        fn_save_cart_content($cart, $_SESSION['settings']['cu_id']['value']);
        $cart['recalculate'] = true;
        fn_calculate_cart_content($cart, $auth, 'A', true, 'F', true);
    } else {
        //   echo 'bad request';
    }
    exit;
} elseif ($mode == 'ls_generate_wishlist_markup') {
    $base_url = fn_ls_get_base_url();
    //changed parameters correction
    $_REQUEST['ls_productId'] = reset(array_keys($_REQUEST['product_data']));
    $_REQUEST['current_url'] = $_REQUEST["redirect_url"];
Пример #11
0
function fn_recurring_billing_pre_add_to_cart(&$product_data, &$cart, $auth, $update = false)
{
    foreach ($product_data as $k => $v) {
        if (!empty($v['cart_id'])) {
            // if we're editing the subscription, just delete product and add new
            fn_delete_cart_product($cart, $v['cart_id']);
        }
        if (!empty($product_data[$k]['extra']['recurring_plan_id']) || isset($v['recurring_plan_id']) && $v['recurring_plan_id'] == 0) {
            //FIXME: Recurring billing should work correctly with the product configurator!
            continue;
        } elseif (!empty($v['recurring_plan_id'])) {
            $plan_data = fn_get_recurring_plan_data($v['recurring_plan_id']);
            if (!empty($plan_data) && $plan_data['status'] == 'A') {
                $product_data[$k]['extra']['recurring_plan_id'] = $v['recurring_plan_id'];
                if (isset($v['recurring_duration']) && $plan_data['allow_change_duration'] == 'Y') {
                    $duration = intval($v['recurring_duration']);
                    if ($duration > 0) {
                        $product_data[$k]['extra']['recurring_duration'] = $duration;
                    } else {
                        fn_set_notification('E', fn_get_lang_var('error'), fn_get_lang_var('rb_duration_did_not_null'));
                        unset($product_data[$k]);
                    }
                } else {
                    $product_data[$k]['extra']['recurring_duration'] = $plan_data['duration'];
                }
            }
            $product_data[$k]['extra']['recurring_plan'] = $plan_data;
        } elseif (isset($cart['products'][$k]['extra']['recurring_plan_id'])) {
            $product_data[$k]['extra']['recurring_plan_id'] = $cart['products'][$k]['extra']['recurring_plan_id'];
            $product_data[$k]['extra']['recurring_duration'] = $cart['products'][$k]['extra']['recurring_duration'];
            $product_data[$k]['extra']['recurring_plan'] = $cart['products'][$k]['extra']['recurring_plan'];
        } else {
            $plans = db_get_array("SELECT plan_id, allow_free_buy FROM ?:recurring_plans WHERE status = 'A' AND FIND_IN_SET(?i, product_ids)", empty($v['product_id']) ? $k : $v['product_id']);
            if (!empty($plans)) {
                $allow_free_buy = false;
                foreach ($plans as $plan) {
                    if ($plan['allow_free_buy'] == 'Y') {
                        $allow_free_buy = true;
                    }
                }
                if (AREA == 'A' || isset($product_data[$k]['extra']['exclude_from_calculate']) || $allow_free_buy) {
                    continue;
                }
                $plan = reset($plans);
                $plan_data = fn_get_recurring_plan_data($plan['plan_id']);
                $product_data[$k]['extra']['recurring_plan_id'] = $plan['plan_id'];
                $product_data[$k]['extra']['recurring_duration'] = $plan_data['duration'];
                $product_data[$k]['extra']['recurring_plan'] = $plan_data;
            }
        }
    }
}