Example #1
0
 public function create($params)
 {
     $data = array();
     $valid_params = true;
     $status = Response::STATUS_BAD_REQUEST;
     fn_clear_cart($cart, true);
     if (!empty($params['user_id'])) {
         $cart['user_data'] = fn_get_user_info($params['user_id']);
     } elseif (!empty($params['user_data'])) {
         $cart['user_data'] = $params['user_data'];
     }
     $cart['user_data'] = array_merge($cart['user_data'], $params);
     if (empty($params['user_id']) && empty($params['user_data'])) {
         $data['message'] = __('api_required_field', array('[field]' => 'user_id/user_data'));
         $valid_params = false;
     } elseif (empty($params['payment_id'])) {
         $data['message'] = __('api_required_field', array('[field]' => 'payment_id'));
         $valid_params = false;
     }
     if ($valid_params) {
         $cart['payment_id'] = $params['payment_id'];
         $customer_auth = fn_fill_auth($cart['user_data']);
         fn_add_product_to_cart($params['products'], $cart, $customer_auth);
         fn_calculate_cart_content($cart, $customer_auth);
         if (!empty($cart['product_groups']) && !empty($params['shipping_ids'])) {
             foreach ($cart['product_groups'] as $key => $group) {
                 foreach ($group['shippings'] as $shipping_id => $shipping) {
                     if ($params['shipping_ids'] == $shipping['shipping_id']) {
                         $cart['chosen_shipping'][$key] = $shipping_id;
                         break;
                     }
                 }
             }
         }
         $cart['calculate_shipping'] = true;
         fn_calculate_cart_content($cart, $customer_auth);
         if (empty($cart['shipping_failed']) || empty($params['shipping_ids'])) {
             fn_update_payment_surcharge($cart, $customer_auth);
             list($order_id, ) = fn_place_order($cart, $customer_auth, 'save', $this->auth['user_id']);
             if (!empty($order_id)) {
                 $status = Response::STATUS_CREATED;
                 $data = array('order_id' => $order_id);
             }
         }
     }
     return array('status' => $status, 'data' => $data);
 }
        } elseif (empty($payment_methods) && !fn_notification_exists('extra', 'no_payment_notification')) {
            fn_set_notification('W', __('notice'), __('cannot_proccess_checkout_without_payment_methods'));
        }
    }
    $ls_shipping_estimation_day = date("d", $ls_shipping_estimation);
    $ls_shipping_estimation_month = date("n", $ls_shipping_estimation);
    $ls_shipping_estimation_year = date("Y", $ls_shipping_estimation);
    $ls_shipping_estimation = date("l F jS, Y", $ls_shipping_estimation);
    $view->assign('ls_shipping_estimation_day', $ls_shipping_estimation_day);
    $view->assign('ls_shipping_estimation_month', $ls_shipping_estimation_month);
    $view->assign('ls_shipping_estimation_year', $ls_shipping_estimation_year);
    $view->assign('ls_shipping_estimation', $ls_shipping_estimation);
    // Step 1/2: Customer information
} elseif ($mode == "add_test") {
    $prev_cart_products = empty($cart['products']) ? array() : $cart['products'];
    fn_add_product_to_cart($_REQUEST['product_data'], $cart, $auth);
    fn_save_cart_content($cart, $auth['user_id']);
    $previous_state = md5(serialize($cart['products']));
    $cart['change_cart_products'] = true;
    fn_calculate_cart_content($cart, $auth, 'S', true, 'F', true);
    if (md5(serialize($cart['products'])) != $previous_state && empty($cart['skip_notification'])) {
        $product_cnt = 0;
        $added_products = array();
        foreach ($cart['products'] as $key => $data) {
            if (empty($prev_cart_products[$key]) || !empty($prev_cart_products[$key]) && $prev_cart_products[$key]['amount'] != $data['amount']) {
                $added_products[$key] = $data;
                $added_products[$key]['product_option_data'] = fn_get_selected_product_options_info($data['product_options']);
                if (!empty($prev_cart_products[$key])) {
                    $added_products[$key]['amount'] = $data['amount'] - $prev_cart_products[$key]['amount'];
                }
                $product_cnt += $added_products[$key]['amount'];
Example #3
0
function fn_twg_api_add_product_to_cart($products, &$cart)
{
    $products_data = array();
    foreach ($products as $product) {
        $cid = fn_generate_cart_id($product['product_id'], $product);
        if (!empty($products_data[$cid])) {
            $products_data[$cid]['amount'] += $product['amount'];
        }
        // Get product options images
        $product['combination_hash'] = $cid;
        if (!empty($product['combination_hash']) && !empty($product['product_options'])) {
            $image = fn_get_image_pairs($product['combination_hash'], 'product_option', 'M', true, true, CART_LANGUAGE);
            if (!empty($image)) {
                $product['main_pair'] = $image;
            }
        }
        $products_data[$cid] = $product;
    }
    $auth =& $_SESSION['auth'];
    // actions copied from the checkout.php 'add' action
    $ids = fn_add_product_to_cart($products_data, $cart, $auth);
    fn_save_cart_content($cart, $auth['user_id']);
    $cart['change_cart_products'] = true;
    fn_calculate_cart_content($cart, $auth, 'S', true, 'F', true);
    return $ids;
}
Example #4
0
function fn_call_requests_placing_order($params, $product_data, &$cart, &$auth)
{
    // Save cart
    $buffer_cart = $cart;
    $buffer_auth = $auth;
    $cart = array('products' => array(), 'recalculate' => false, 'payment_id' => 0, 'is_call_request' => true);
    $firstname = $params['name'];
    $lastname = '';
    $cart['user_data']['email'] = $params['email'];
    if (!empty($firstname) && strpos($firstname, ' ')) {
        list($firstname, $lastname) = explode(' ', $firstname);
    }
    $cart['user_data']['firstname'] = $firstname;
    $cart['user_data']['b_firstname'] = $firstname;
    $cart['user_data']['s_firstname'] = $firstname;
    $cart['user_data']['lastname'] = $lastname;
    $cart['user_data']['b_lastname'] = $lastname;
    $cart['user_data']['s_lastname'] = $lastname;
    $cart['user_data']['phone'] = $params['phone'];
    $cart['user_data']['b_phone'] = $params['phone'];
    $cart['user_data']['s_phone'] = $params['phone'];
    foreach (array('b_address', 's_address', 'b_city', 's_city', 'b_country', 's_country', 'b_state', 's_state') as $key) {
        if (!isset($cart['user_data'][$key])) {
            $cart['user_data'][$key] = ' ';
        }
    }
    if (empty($product_data[$params['product_id']])) {
        $product_data[$params['product_id']] = array('product_id' => $params['product_id'], 'amount' => 1);
    }
    fn_add_product_to_cart($product_data, $cart, $auth);
    fn_calculate_cart_content($cart, $auth, 'A', true, 'F', true);
    $order_id = 0;
    if ($res = fn_place_order($cart, $auth)) {
        list($order_id) = $res;
    }
    // Restore cart
    $cart = $buffer_cart;
    $auth = $buffer_auth;
    return $order_id;
}
Example #5
0
         }
         $_REQUEST['cart_products'][$bb_150['key']]['amount'] = $bb_150['amount'];
         $_REQUEST['cart_products'][$bb_300['key']]['amount'] = $bb_300['amount'];
         $flag_f = false;
         if ($bb_150['amount'] && !$bb_150['key']) {
             $p_data[$exist_bean_bag_150]['product_id'] = $exist_bean_bag_150;
             $p_data[$exist_bean_bag_150]['amount'] = $bb_150['amount'];
             $flag_f = true;
         }
         if ($bb_300['amount'] && !$bb_300['key']) {
             $p_data[$exist_bean_bag_300]['product_id'] = $exist_bean_bag_300;
             $p_data[$exist_bean_bag_300]['amount'] = $bb_300['amount'];
             $flag_f = true;
         }
         if ($flag_f) {
             fn_add_product_to_cart($p_data, $cart, $customer_auth);
             fn_save_cart_content($cart, $customer_auth['user_id']);
         }
     }
     //fn_set_notification('N', 'before', print_r(array($pr_ids,$_REQUEST),true));
     fn_update_cart_by_data($cart, $_REQUEST, $customer_auth);
     if ($combine) {
         foreach ($cart['products'] as $ci => $cv) {
             if (isset($pr_ids[$cv['product_id']])) {
                 $cart['products'][$ci]['amount'] = $pr_ids[$cv['product_id']]['amount'];
             }
         }
     }
     //fn_set_notification('I', 'after', print_r($cart['products'],true));
 }
 if ($mode == 'customer_info') {
 //                    $product_amount = $product['amount'];
 //                }
 //            }
 //        }
 if ($p_data['bean_bag_filling_150'] == 'Y' && !empty($p_data['bean_bag_quantity_150']) && !empty($exist_bean_bag_150)) {
     $p_data[$exist_bean_bag_150]['product_id'] = $exist_bean_bag_150;
     $p_data[$exist_bean_bag_150]['amount'] = $p_data['bean_bag_quantity_150'] * $pv['amount'];
     //$p_data['bean_bag_quantity_150'];
 }
 if ($p_data['bean_bag_filling_300'] == 'Y' && !empty($p_data['bean_bag_quantity_300']) && !empty($exist_bean_bag_300)) {
     $p_data[$exist_bean_bag_300]['product_id'] = $exist_bean_bag_300;
     $p_data[$exist_bean_bag_300]['amount'] = $p_data['bean_bag_quantity_300'] * $pv['amount'];
     //$product_amount - $bean_bag_300_cart_amount;//$p_data['bean_bag_quantity_300'];
 }
 $prev_cart_products = empty($cart['products']) ? array() : $cart['products'];
 fn_add_product_to_cart($p_data, $cart, $auth);
 fn_save_cart_content($cart, $auth['user_id']);
 $previous_state = md5(serialize($cart['products']));
 $cart['change_cart_products'] = true;
 fn_calculate_cart_content($cart, $auth, 'S', true, 'F', true);
 if (md5(serialize($cart['products'])) != $previous_state && empty($cart['skip_notification'])) {
     $product_cnt = 0;
     //fn_set_notification('N', fn_get_lang_var('notice'), 'different carts');
     $added_products = array();
     foreach ($cart['products'] as $key => $data) {
         if (empty($prev_cart_products[$key]) || !empty($prev_cart_products[$key]) && $prev_cart_products[$key]['amount'] != $data['amount']) {
             $added_products[$key] = $data;
             $added_products[$key]['product_option_data'] = fn_get_selected_product_options_info($data['product_options']);
             if (!empty($prev_cart_products[$key])) {
                 $added_products[$key]['amount'] = $data['amount'] - $prev_cart_products[$key]['amount'];
             }
 protected function _fillShoppingCart($cartContent)
 {
     if (empty($cartContent['Items'])) {
         return true;
     }
     if (!empty($_SESSION['cart'])) {
         fn_clear_cart($_SESSION['cart']);
     }
     $cart_products = array();
     $cartItems = $cartContent['Items'];
     foreach ($cartItems as $cartItem) {
         $product_id = $cartItem['CartItemId'];
         $item['product_id'] = $product_id;
         $item['amount'] = $cartItem['Count'];
         $cart_products[$product_id] = $item;
     }
     if (!empty($cart_products)) {
         fn_add_product_to_cart($cart_products, $_SESSION['cart'], $_SESSION['auth'], false);
     }
 }
Example #8
0
function fn_gift_certificates_exclude_products_from_calculation(&$cart, &$auth, &$pure_subtotal, &$subtotal)
{
    if (isset($cart['gift_certificates']) && !fn_is_empty($cart['gift_certificates'])) {
        foreach ($cart['gift_certificates'] as $k => $v) {
            if (isset($v['extra']['exclude_from_calculate'])) {
                unset($cart['gift_certificates'][$k]);
            } else {
                $subtotal += $v['amount'];
                $pure_subtotal += $v['amount'];
            }
        }
    }
    if (!empty($cart['use_gift_certificates'])) {
        foreach ($cart['use_gift_certificates'] as $code => $value) {
            // This step is performed when editing the existent order only.
            if (is_array($value) && isset($value['log_id'])) {
                // indicates that the order is being edited
                $gift_cert_data = $value;
                // Merge with the current balance.
                $last_log_item = db_get_row("SELECT log_id, debit, debit_products FROM ?:gift_certificates_log WHERE gift_cert_id = ?i ORDER BY log_id DESC", $value['gift_cert_id']);
                $last_log_item['debit_products'] = unserialize($last_log_item['debit_products']);
                $gift_cert_data['amount'] = $gift_cert_data['previous_state']['cost'] + $last_log_item['debit'];
                if (!empty($last_log_item['debit_products'])) {
                    foreach ($last_log_item['debit_products'] as $product_id => $quantity) {
                        if (!isset($gift_cert_data['products'][$product_id])) {
                            $gift_cert_data['products'][$product_id] = $quantity['amount'];
                        } else {
                            $gift_cert_data['products'][$product_id] = (isset($gift_cert_data['previous_state']['products'][$product_id]) ? $gift_cert_data['previous_state']['products'][$product_id] : 0) + $quantity['amount'];
                        }
                    }
                }
                $cart['use_gift_certificates_previous_state'][$code] = $gift_cert_data;
                // This step is performed when editing the existent order only.
            } elseif (defined('ORDER_MANAGEMENT') && !empty($cart['use_gift_certificates_previous_state'][$code])) {
                //
                // If the certificate was deleted when editing, and then it was applied again.
                // It is necessary to set its data (not currect ones) again with the performed changes.
                //
                $gift_cert_data = $cart['use_gift_certificates_previous_state'][$code];
                // This step is performed only on Create order and in the frontend.
            } else {
                $gift_cert_data = db_get_row("SELECT gift_cert_id, amount, products  FROM ?:gift_certificates WHERE gift_cert_code = ?s ?p", $code, fn_get_gift_certificate_company_condition('company_id'));
                if (!$gift_cert_data) {
                    return false;
                }
                $gift_cert_data['products'] = empty($gift_cert_data['products']) ? array() : @unserialize($gift_cert_data['products']);
                $debit_balance = db_get_row("SELECT debit AS amount, debit_products as products FROM ?:gift_certificates_log WHERE gift_cert_id = ?i ORDER BY log_id DESC", $gift_cert_data['gift_cert_id']);
                if (!empty($debit_balance)) {
                    $debit_balance['products'] = @unserialize($debit_balance['products']);
                    $gift_cert_data = fn_array_merge($gift_cert_data, $debit_balance);
                }
            }
            $cart['use_gift_certificates'][$code] = $gift_cert_data;
            if (!empty($gift_cert_data['products']) && AREA == 'C') {
                $product_data = array();
                foreach ((array) $gift_cert_data['products'] as $key => $product_item) {
                    if (!empty($debit_balance) && !isset($debit_balance['products'][$key])) {
                        continue;
                    }
                    $product_data[$product_item['product_id']] = array('product_id' => $product_item['product_id'], 'amount' => $product_item['amount'], 'extra' => array('exclude_from_calculate' => GIFT_CERTIFICATE_EXCLUDE_PRODUCTS, 'in_use_certificate' => array($code => $product_item['amount'])));
                    if (isset($product_item['product_options'])) {
                        $product_data[$product_item['product_id']]['product_options'] = $product_item['product_options'];
                    }
                    // Сhoose the option which the product had before editing.
                    if (!empty($value['log_id']) && !empty($value['product_options'][$product_id])) {
                        $product_data[$product_id]['product_options'] = $value['product_options'][$product_id];
                    }
                }
                fn_add_product_to_cart($product_data, $cart, $auth);
                $cart['recalculate'] = true;
            }
        }
    }
}
Example #9
0
 if (!empty($_REQUEST['bid'])) {
     $banner = fn_get_aff_banner_data($_REQUEST['bid'], CART_LANGUAGE, true);
     $banner_correct = true;
     if (empty($banner) || $banner['status'] == 'D') {
         return array(CONTROLLER_STATUS_REDIRECT, Registry::get('config.http_location') . '/' . Registry::get('config.customer_index'));
     }
     if (!empty($banner['banner_id']) && !empty($_REQUEST['aff_id'])) {
         $_SESSION['partner_data'] = array('banner_id' => $banner['banner_id'], 'partner_id' => $_REQUEST['aff_id'], 'is_payouts' => 'N', 'product_id' => @$_REQUEST['product_id']);
     }
     if (!empty($banner['type']) && $banner['type'] == 'P') {
         if (!empty($_REQUEST['product_id'])) {
             if (!empty($banner['to_cart']) && $banner['to_cart'] == 'Y') {
                 if (empty($_SESSION['cart'])) {
                     fn_clear_cart($_SESSION['cart']);
                 }
                 fn_add_product_to_cart(array($_REQUEST['product_id'] => array('product_id' => $_REQUEST['product_id'], 'amount' => 1)), $_SESSION['cart'], $auth);
                 $redirect_url = "checkout.cart";
             } else {
                 $redirect_url = "products.view?product_id={$_REQUEST['product_id']}";
             }
         } else {
             $banner_correct = false;
             $banner['type'] = 'T';
             $banner['link_to'] = 'U';
             $banner['url'] = Registry::get('config.http_location');
         }
     }
     if (!empty($banner['link_to']) && $banner['type'] != 'P') {
         $link_to = $banner['link_to'];
         $data =& $banner;
         if ($link_to == 'G' && !empty($banner['group_id'])) {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Add product to the cart
    if ($mode == 'add') {
        // Cart is empty, create it
        if (empty($cart)) {
            fn_clear_cart($cart);
        }
        // Remove products with empty amount
        foreach ($_REQUEST['product_data'] as $k => $v) {
            if (empty($v['amount'])) {
                if ($k != 'custom_files') {
                    unset($_REQUEST['product_data'][$k]);
                }
            }
        }
        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);
            }
        }
Example #11
0
function fn_form_cart($order_id, &$cart, &$auth)
{
    $order_info = fn_get_order_info($order_id, false, false);
    // Fill the cart
    foreach ($order_info['items'] as $_id => $item) {
        $_item = array($item['product_id'] => array('amount' => $item['amount'], 'product_options' => @$item['extra']['product_options'], 'price' => $item['original_price'], 'stored_discount' => 'Y', 'stored_price' => 'Y', 'discount' => @$item['extra']['discount'], 'original_amount' => $item['amount'], 'original_product_data' => array('cart_id' => $_id, 'amount' => $item['amount'])));
        if (isset($item['extra'])) {
            $_item[$item['product_id']]['extra'] = $item['extra'];
        }
        fn_add_product_to_cart($_item, $cart, $auth);
    }
    // Restore custom files
    $dir_path = DIR_CUSTOM_FILES . 'order_data/' . $order_id;
    if (is_dir($dir_path)) {
        fn_mkdir(DIR_CUSTOM_FILES . 'sess_data');
        fn_copy($dir_path, DIR_CUSTOM_FILES . 'sess_data');
    }
    $cart['payment_id'] = $order_info['payment_id'];
    $cart['stored_taxes'] = 'Y';
    $cart['stored_discount'] = 'Y';
    $cart['taxes'] = $order_info['taxes'];
    $cart['promotions'] = !empty($order_info['promotions']) ? $order_info['promotions'] : array();
    $cart['shipping'] = !empty($order_info['shipping']) ? $order_info['shipping'] : array();
    $cart['stored_shipping'] = array();
    foreach ($cart['shipping'] as $sh_id => $v) {
        if (!empty($v['rates'])) {
            $cart['stored_shipping'][$sh_id] = array_sum($v['rates']);
        }
    }
    $cart['notes'] = $order_info['notes'];
    $cart['payment_info'] = @$order_info['payment_info'];
    // Add order discount
    if (floatval($order_info['subtotal_discount'])) {
        $cart['stored_subtotal_discount'] = 'Y';
        $cart['subtotal_discount'] = $cart['original_subtotal_discount'] = fn_format_price($order_info['subtotal_discount']);
    }
    // Fill the cart with the coupons
    if (!empty($order_info['coupons'])) {
        $cart['coupons'] = $order_info['coupons'];
    }
    // Set the customer if exists
    $_data = array();
    if (!empty($order_info['user_id'])) {
        $_data = db_get_row("SELECT user_id, user_login as login FROM ?:users WHERE user_id = ?i", $order_info['user_id']);
    }
    $auth = fn_fill_auth($_data, array(), false, 'C');
    $auth['tax_exempt'] = $order_info['tax_exempt'];
    // Fill customer info
    $cart['user_data'] = fn_check_table_fields($order_info, 'user_profiles');
    $cart['user_data'] = fn_array_merge(fn_check_table_fields($order_info, 'users'), $cart['user_data']);
    if (!empty($order_info['fields'])) {
        $cart['user_data']['fields'] = $order_info['fields'];
    }
    fn_add_user_data_descriptions($cart['user_data']);
    fn_set_hook('form_cart', $order_info, $cart);
}
Example #12
0
 protected function addProductsToCart($items, $delivery)
 {
     $products = array();
     foreach ($items as $item) {
         $products[$item['offerId']] = array('product_id' => $item['offerId'], 'amount' => $item['count']);
     }
     fn_add_product_to_cart($products, $this->cart, $this->auth);
     $addr = $this->parseDelivery($delivery);
     $this->cart['user_data'] = array('lastname' => self::FAKE_YM_NAME, 'b_firstname' => self::FAKE_YM_NAME, 's_firstname' => self::FAKE_YM_NAME, 'firstname' => self::FAKE_YM_NAME, 'b_lastname' => self::FAKE_YM_NAME, 's_lasttname' => self::FAKE_YM_NAME, 'b_address' => $addr['address'], 's_address' => $addr['address'], 'b_city' => $addr['city'], 's_city' => $addr['city'], 'b_country' => $addr['country_code'], 's_country' => $addr['country_code'], 'b_state' => $_state = !empty($addr['state_code']) ? $addr['state_code'] : $addr['subject_federation'], 's_state' => $_state, 's_zipcode' => $addr['postcode'], 'b_zipcode' => $addr['postcode']);
     if (!empty($delivery['type']) && !empty($delivery['id'])) {
         fn_checkout_update_shipping($this->cart, array(0 => $delivery['id']));
     }
     $this->cart['calculate_shipping'] = true;
     list($cart_products, $product_groups) = fn_calculate_cart_content($this->cart, $this->auth, 'A', true, 'F', true);
     return array($cart_products, $product_groups, $addr);
 }
Example #13
0
 public function update($id, $params)
 {
     if (isset($params['shipping_ids']) && !isset($params['shipping_id'])) {
         $params['shipping_id'] = $params['shipping_ids'];
     }
     fn_define('ORDER_MANAGEMENT', true);
     $data = array();
     $valid_params = true;
     $status = Response::STATUS_BAD_REQUEST;
     if ($valid_params) {
         fn_clear_cart($cart, true);
         $customer_auth = fn_fill_auth(array(), array(), false, 'C');
         $cart_status = md5(serialize($cart));
         // Order info was not found or customer does not have enought permissions
         if (fn_form_cart($id, $cart, $customer_auth) && $cart_status != md5(serialize($cart))) {
             unset($params['product_groups']);
             if (empty($params['shipping_id'])) {
                 $shipping = reset($cart['shipping']);
                 if (!empty($shipping['shipping_id'])) {
                     $params['shipping_id'] = $shipping['shipping_id'];
                 }
             }
             $cart['order_id'] = $id;
             if (!empty($params['products'])) {
                 $product = reset($params['products']);
                 if (isset($product['product_id'], $product['price'])) {
                     $cart['products'] = $params['products'];
                 } else {
                     $cart['products'] = array();
                     fn_add_product_to_cart($params['products'], $cart, $customer_auth);
                 }
             }
             fn_calculate_cart_content($cart, $customer_auth);
             if (!empty($params['user_id'])) {
                 $cart['user_data'] = fn_get_user_info($params['user_id']);
             } elseif (!empty($params['user_data'])) {
                 $cart['user_data'] = $params['user_data'];
             }
             $cart['user_data'] = array_merge($cart['user_data'], $params);
             if (!empty($cart['product_groups']) && !empty($params['shipping_id'])) {
                 foreach ($cart['product_groups'] as $key => $group) {
                     foreach ($group['shippings'] as $shipping_id => $shipping) {
                         if ($params['shipping_id'] == $shipping['shipping_id']) {
                             $cart['chosen_shipping'][$key] = $shipping_id;
                             break;
                         }
                     }
                 }
             }
             if (!empty($params['payment_id'])) {
                 if (!empty($params['payment_info'])) {
                     $cart['payment_info'] = $params['payment_info'];
                 } elseif ($params['payment_id'] != $cart['payment_id']) {
                     $cart['payment_info'] = array();
                 }
                 $cart['payment_id'] = $params['payment_id'];
             }
             fn_calculate_cart_content($cart, $customer_auth);
             if (!empty($cart) && empty($cart['shipping_failed'])) {
                 $cart['parent_order_id'] = 0;
                 fn_update_payment_surcharge($cart, $customer_auth);
                 list($order_id, $order_status) = fn_update_order($cart, $id);
                 if ($order_id) {
                     if (!empty($params['status']) && fn_check_permissions('orders', 'update_status', 'admin')) {
                         fn_change_order_status($order_id, $params['status'], '', fn_get_notification_rules($params, false));
                     } elseif (!empty($order_status)) {
                         fn_change_order_status($order_id, $order_status, '', fn_get_notification_rules($params, false));
                     }
                     $status = Response::STATUS_OK;
                     $data = array('order_id' => $order_id);
                 }
             }
         }
     }
     return array('status' => $status, 'data' => $data);
 }
Example #14
0
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($mode == 'options') {
        if (!empty($_REQUEST['product_data'])) {
            define('GET_OPTIONS', true);
            // Product data
            unset($_REQUEST['product_data']['custom_files']);
            list($product_id, $_data) = each($_REQUEST['product_data']);
            if (!empty($_data['configuration'])) {
                // Backup cart before changes
                $cart = $_SESSION['cart'];
                $_cart =& $_SESSION['cart'];
                fn_clear_cart($_cart);
                $_data['product_id'] = $product_id;
                $_data['amount'] = isset($_data['amount']) && intval($_data['amount']) <= 0 ? 1 : $_data['amount'];
                fn_add_product_to_cart(array($product_id => $_data), $_cart, $auth);
                list($cart_products) = fn_calculate_cart_content($_cart, $auth, 'S', true, 'F', false);
                if (!empty($_cart['points_info'])) {
                    Registry::set("runtime.product_configurator.points_info.{$product_id}", $_cart['points_info']);
                }
                // Restore cart data
                $_SESSION['cart'] = $cart;
                if (!empty($_REQUEST['appearance'])) {
                    foreach ($_REQUEST['appearance'] as $setting => $value) {
                        $view->assign($setting, $value);
                    }
                    $view->assign('no_images', true);
                }
                $product = reset($cart_products);
                if (!empty($product['amount'])) {
                    $product['selected_amount'] = $product['amount'];
Example #15
0
function fn_form_cart($order_id, &$cart, &$auth)
{
    $order_info = fn_get_order_info($order_id, false, false);
    if (empty($order_info)) {
        fn_set_notification('E', __('error'), __('object_not_found', array('[object]' => __('order'))), '', '404');
        return false;
    }
    // Fill the cart
    foreach ($order_info['products'] as $_id => $item) {
        $_item = array($item['product_id'] => array('amount' => $item['amount'], 'product_options' => !empty($item['extra']['product_options']) ? $item['extra']['product_options'] : array(), 'price' => $item['original_price'], 'stored_discount' => 'Y', 'stored_price' => 'Y', 'discount' => !empty($item['extra']['discount']) ? $item['extra']['discount'] : 0, 'original_amount' => $item['amount'], 'original_product_data' => array('cart_id' => $_id, 'amount' => $item['amount'])));
        if (isset($item['extra'])) {
            $_item[$item['product_id']]['extra'] = $item['extra'];
        }
        fn_add_product_to_cart($_item, $cart, $auth);
    }
    // Workaround for the add-ons that do not add a product to cart unless the parent product is already added.
    if (count($order_info['products']) > count($cart['products'])) {
        foreach ($order_info['products'] as $_id => $item) {
            if (empty($cart['products'][$_id])) {
                $_item = array($item['product_id'] => array('amount' => $item['amount'], 'product_options' => !empty($item['extra']['product_options']) ? $item['extra']['product_options'] : array(), 'price' => $item['original_price'], 'stored_discount' => 'Y', 'stored_price' => 'Y', 'discount' => !empty($item['extra']['discount']) ? $item['extra']['discount'] : 0, 'original_amount' => $item['amount'], 'original_product_data' => array('cart_id' => $_id, 'amount' => $item['amount'])));
                if (isset($item['extra'])) {
                    $_item[$item['product_id']]['extra'] = $item['extra'];
                }
                fn_add_product_to_cart($_item, $cart, $auth);
            }
        }
    }
    // Restore custom files
    $dir_path = 'order_data/' . $order_id;
    if (Storage::instance('custom_files')->isExist($dir_path)) {
        Storage::instance('custom_files')->copy($dir_path, 'sess_data');
    }
    $cart['payment_id'] = $order_info['payment_id'];
    $cart['stored_taxes'] = 'Y';
    $cart['stored_discount'] = 'Y';
    $cart['taxes'] = $order_info['taxes'];
    $cart['promotions'] = !empty($order_info['promotions']) ? $order_info['promotions'] : array();
    $cart['shipping'] = !empty($order_info['shipping']) ? $order_info['shipping'] : array();
    $cart['stored_shipping'] = array();
    foreach ($cart['shipping'] as $sh_id => $v) {
        if (!empty($v['rates'])) {
            $cart['stored_shipping'][$sh_id] = array_sum($v['rates']);
        }
    }
    if (!empty($order_info['product_groups'])) {
        $cart['product_groups'] = $order_info['product_groups'];
        foreach ($order_info['product_groups'] as $group) {
            if (!empty($group['chosen_shippings'])) {
                foreach ($group['chosen_shippings'] as $key => $chosen_shipping) {
                    foreach ($group['shippings'] as $shipping_id => $shipping) {
                        if ($shipping_id == $chosen_shipping['shipping_id']) {
                            $cart['chosen_shipping'][$chosen_shipping['group_key']] = $shipping_id;
                        }
                    }
                }
            }
        }
    } else {
        $cart['product_groups'] = array();
    }
    $cart['order_timestamp'] = $order_info['timestamp'];
    $cart['notes'] = $order_info['notes'];
    $cart['details'] = $order_info['details'];
    $cart['payment_info'] = @$order_info['payment_info'];
    $cart['profile_id'] = $order_info['profile_id'];
    // Add order discount
    if (floatval($order_info['subtotal_discount'])) {
        $cart['stored_subtotal_discount'] = 'Y';
        $cart['subtotal_discount'] = $cart['original_subtotal_discount'] = fn_format_price($order_info['subtotal_discount']);
    }
    // Fill the cart with the coupons
    if (!empty($order_info['coupons'])) {
        $cart['coupons'] = $order_info['coupons'];
    }
    // Set the customer if exists
    $_data = array();
    if (!empty($order_info['user_id'])) {
        $_data = db_get_row("SELECT user_id, user_login as login FROM ?:users WHERE user_id = ?i", $order_info['user_id']);
    }
    $auth = fn_fill_auth($_data, array(), false, 'C');
    $auth['tax_exempt'] = $order_info['tax_exempt'];
    // Fill customer info
    $cart['user_data'] = fn_array_merge(fn_check_table_fields($order_info, 'users'), fn_check_table_fields($order_info, 'user_profiles'));
    if (!empty($order_info['fields'])) {
        $cart['user_data']['fields'] = $order_info['fields'];
    }
    fn_add_user_data_descriptions($cart['user_data']);
    fn_set_hook('form_cart', $order_info, $cart, $auth);
    return true;
}
Example #16
0
/**
 * Apply promotion cart rule
 *
 * @param array $promotion promotion array
 * @param array $cart cart array
 * @param array $auth (optional) - auth array
 * @param array $cart_products (optional) - cart products array (for cart rules)
 * @return bool true if rule can be applied, false - otherwise
 */
function fn_promotion_apply_cart_rule($bonus, &$cart, &$auth, &$cart_products)
{
    // Clean bonuses
    if (!isset($cart['promotions'][$bonus['promotion_id']]['bonuses'])) {
        $cart['promotions'][$bonus['promotion_id']]['bonuses'] = array();
    }
    $bonus_id = count($cart['promotions'][$bonus['promotion_id']]['bonuses']);
    $cart['promotions'][$bonus['promotion_id']]['bonuses'][$bonus_id] = $bonus;
    if ($bonus['bonus'] == 'order_discount') {
        if (floatval($cart['subtotal'])) {
            if (!isset($cart['subtotal_discount'])) {
                $cart['subtotal_discount'] = 0;
            }
            if (fn_allowed_for('MULTIVENDOR')) {
                $discount = fn_promotions_calculate_order_discount($bonus, $bonus_id, $cart);
            } else {
                $discount = fn_promotions_calculate_discount($bonus['discount_bonus'], $cart['subtotal'], $bonus['discount_value']);
            }
            if (floatval($discount)) {
                $cart['use_discount'] = true;
                $cart['subtotal_discount'] += fn_format_price($discount);
            }
        }
    } elseif ($bonus['bonus'] == 'discount_on_products') {
        foreach ($cart_products as $k => $v) {
            if (isset($v['exclude_from_calculate']) || !floatval($v['base_price']) && $v['base_price'] != 0) {
                continue;
            }
            if (fn_promotion_validate_attribute($v['product_id'], $bonus['value'], 'in') && !isset($cart['products'][$k]['extra']['promotions'][$bonus['promotion_id']])) {
                if (fn_promotion_apply_discount($bonus['promotion_id'], $bonus, $cart_products[$k], true, $cart, $cart_products)) {
                    $cart['use_discount'] = true;
                }
            }
        }
    } elseif ($bonus['bonus'] == 'discount_on_categories') {
        foreach ($cart_products as $k => $v) {
            if (isset($v['exclude_from_calculate']) || !floatval($v['base_price']) && $v['base_price'] != 0) {
                continue;
            }
            if (fn_promotion_validate_attribute($v['category_ids'], $bonus['value'], 'in') && !isset($cart['products'][$k]['extra']['promotions'][$bonus['promotion_id']])) {
                if (fn_promotion_apply_discount($bonus['promotion_id'], $bonus, $cart_products[$k], true, $cart, $cart_products)) {
                    $cart['use_discount'] = true;
                }
            }
        }
    } elseif ($bonus['bonus'] == 'give_usergroup') {
        $cart['promotions'][$bonus['promotion_id']]['bonuses'][$bonus_id]['pending'] = true;
    } elseif ($bonus['bonus'] == 'give_coupon') {
        $cart['promotions'][$bonus['promotion_id']]['bonuses'][$bonus_id]['pending'] = true;
        $cart['promotions'][$bonus['promotion_id']]['bonuses'][$bonus_id]['coupon_code'] = fn_generate_code('', COUPON_CODE_LENGTH);
    } elseif ($bonus['bonus'] == 'free_shipping') {
        $cart['free_shipping'][] = $bonus['value'];
    } elseif ($bonus['bonus'] == 'free_products') {
        foreach ($bonus['value'] as $p_data) {
            $product_data = array($p_data['product_id'] => array('amount' => $p_data['amount'], 'product_id' => $p_data['product_id'], 'extra' => array('exclude_from_calculate' => true, 'aoc' => empty($p_data['product_options']), 'saved_options_key' => $bonus['promotion_id'] . '_' . $p_data['product_id'])));
            if (!empty($cart['saved_product_options'][$bonus['promotion_id'] . '_' . $p_data['product_id']])) {
                $product_data[$p_data['product_id']]['product_options'] = $cart['saved_product_options'][$bonus['promotion_id'] . '_' . $p_data['product_id']];
            } elseif (!empty($p_data['product_options'])) {
                $product_data[$p_data['product_id']]['product_options'] = $p_data['product_options'];
            }
            // Restore object_id if needed
            if (!empty($cart['saved_object_ids'][$bonus['promotion_id'] . '_' . $p_data['product_id']])) {
                $product_data[$p_data['product_id']]['saved_object_id'] = $cart['saved_object_ids'][$bonus['promotion_id'] . '_' . $p_data['product_id']];
            }
            $existing_products = array_keys($cart['products']);
            if (!fn_allowed_for('ULTIMATE') || fn_allowed_for('ULTIMATE') && Registry::get('runtime.company_id') && (fn_check_company_id('products', 'product_id', $p_data['product_id'], Registry::get('runtime.company_id')) || fn_ult_is_shared_product($p_data['product_id'], Registry::get('runtime.company_id')) == 'Y')) {
                if ($ids = fn_add_product_to_cart($product_data, $cart, $auth)) {
                    $new_products = array_diff(array_keys($cart['products']), $existing_products);
                    if (!empty($new_products)) {
                        $hash = array_pop($new_products);
                    } else {
                        $hash = key($ids);
                    }
                    $_cproduct = fn_get_cart_product_data($hash, $cart['products'][$hash], true, $cart, $auth, !empty($new_products) ? 0 : $p_data['amount']);
                    if (!empty($_cproduct)) {
                        $cart_products[$hash] = $_cproduct;
                    }
                }
            }
        }
    }
    return true;
}
Example #17
0
     $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']);
 } elseif ($meta['action'] == 'apply_coupon') {
     if (function_exists('fn_enable_checkout_mode')) {
         fn_enable_checkout_mode();
     } else {
Example #18
0
         }
         unset($_REQUEST['redirect_url']);
     }
     return array(CONTROLLER_STATUS_OK, 'checkout.cart');
 }
 //
 // Update products quantity in the cart
 //
 if ($mode == 'update') {
     if (!empty($_REQUEST['cart_products'])) {
         foreach ($_REQUEST['cart_products'] as $_key => $_data) {
             if (empty($_data['amount']) && !isset($cart['products'][$_key]['extra']['parent'])) {
                 fn_delete_cart_product($cart, $_key);
             }
         }
         fn_add_product_to_cart($_REQUEST['cart_products'], $cart, $auth, true);
         fn_save_cart_content($cart, $auth['user_id']);
     }
     unset($cart['product_groups']);
     fn_set_notification('N', __('notice'), __('text_products_updated_successfully'));
     // Recalculate cart when updating the products
     if (!empty($cart['chosen_shipping'])) {
         $cart['calculate_shipping'] = true;
     }
     $cart['recalculate'] = true;
     return array(CONTROLLER_STATUS_OK, 'checkout.' . $_REQUEST['redirect_mode']);
 }
 //
 // Estimate shipping cost
 //
 if ($mode == 'shipping_estimation') {
Example #19
0
function fn_charge_subscription($subscription_id)
{
    $_SESSION['cart'] = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();
    $cart =& $_SESSION['cart'];
    $_SESSION['customer_auth'] = isset($_SESSION['customer_auth']) ? $_SESSION['customer_auth'] : array();
    $customer_auth =& $_SESSION['customer_auth'];
    fn_clear_cart($cart, true);
    $customer_auth = fn_fill_auth();
    $subscription = fn_get_recurring_subscription_info($subscription_id);
    if ($subscription['status'] != 'A') {
        fn_set_notification('E', fn_get_lang_var('error'), fn_get_lang_var('rb_subscription_inactive'));
    } else {
        $product_data = array();
        foreach ($subscription['order_info']['items'] as $k => $item) {
            if (!empty($subscription['order_info']['items'][$k]['extra']['recurring_plan_id']) && $subscription['order_info']['items'][$k]['extra']['recurring_plan_id'] == $subscription['plan_id'] && $subscription['order_info']['items'][$k]['extra']['recurring_duration'] == $subscription['orig_duration']) {
                $product_data[$subscription['order_info']['items'][$k]['product_id']] = array('amount' => $subscription['order_info']['items'][$k]['amount'], 'extra' => array('recurring_plan_id' => $subscription['plan_id'], 'recurring_force_calculate' => true, 'recurring_subscription_id' => $subscription['subscription_id'], 'recurring_plan' => $subscription['order_info']['items'][$k]['extra']['recurring_plan'], 'recurring_duration' => $subscription['order_info']['items'][$k]['extra']['recurring_duration']));
                if (!empty($subscription['order_info']['items'][$k]['extra']['product_options'])) {
                    $product_data[$subscription['order_info']['items'][$k]['product_id']]['product_options'] = $subscription['order_info']['items'][$k]['extra']['product_options'];
                }
            }
        }
        $cart['user_id'] = $subscription['user_id'];
        $u_data = db_get_row("SELECT user_id, user_type, tax_exempt FROM ?:users WHERE user_id = ?i", $cart['user_id']);
        $customer_auth = fn_fill_auth($u_data);
        $cart['user_data'] = array();
        fn_add_product_to_cart($product_data, $cart, $customer_auth);
        $cart['profile_id'] = 0;
        $cart['user_data'] = fn_get_user_info($customer_auth['user_id'], true, $cart['profile_id']);
        if (!empty($cart['user_data'])) {
            $profile_fields = fn_get_profile_fields('O', $customer_auth);
            $cart['ship_to_another'] = fn_check_shipping_billing($cart['user_data'], $profile_fields);
        }
        fn_calculate_cart_content($cart, $customer_auth, 'A', true, 'I');
        $cart['payment_id'] = $subscription['order_info']['payment_id'];
        $cart['payment_info'] = $subscription['order_info']['payment_info'];
        $cart['recurring_subscription_id'] = $subscription_id;
        list($order_id, $process_payment) = fn_place_order($cart, $customer_auth);
        if (!empty($order_id)) {
            $order_info = fn_get_order_info($order_id, true);
            $evt_data = array('subscription_id' => $subscription_id, 'timestamp' => $order_info['timestamp'], 'event_type' => 'C');
            db_query("INSERT INTO ?:recurring_events ?e", $evt_data);
            if ($process_payment == true) {
                fn_start_payment($order_id);
            }
            $edp_data = fn_generate_ekeys_for_edp(array(), $order_info);
            fn_order_notification($order_info, $edp_data);
        }
    }
}