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']);
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; } } } }
$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'])) {
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]; } } } } }
/** * 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; } }
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']);
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]); } }
/** * 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; }
} } 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);
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"];
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; } } } }