notify('NOTIFY_HEADER_START_CHECKOUT');
require_once(DIR_WS_CLASSES . 'http_client.php');
require(DIR_WS_CLASSES . 'order.php');
$order = new order();
$total_weight = $_SESSION['cart']->show_weight();
$total_count = $_SESSION['cart']->count_contents();
if (FEC_ONE_PAGE == 'true') {
$checkout_confirmation = FILENAME_FEC_CONFIRMATION;
} else {
$checkout_confirmation = FILENAME_CHECKOUT_CONFIRMATION;
}
// set template style
if (FEC_SPLIT_CHECKOUT == 'true' and $credit_covers == false) {
$checkoutStyle = 'split';
}
// test for weight or quantity errors due to redirects
if (isset($_SESSION['total_weight']) || isset($_SESSION['total_count'])) {
if ((round((float)$_SESSION['total_weight'], 2) != round((float)$total_weight, 2)) || (round((float)$_SESSION['total_count'], 2) != round((float)$total_count, 2))) {
if (isset($_SESSION['shipping'])) {
// shipping is inccorect, therefore unset
unset($_SESSION['shipping']);
}
}
}
// set the sessions for total weight and total count to be used during redirects
$_SESSION['total_weight'] = $total_weight;
$_SESSION['total_count'] = $total_count;
//if there is nothing in the customers cart, redirect them to the shopping cart page
if ($_SESSION['cart']->count_contents() <= 0) {
zen_redirect(zen_href_link(FILENAME_TIME_OUT));
}
if ($_SESSION['free_virtual']) {
// check if cart is free + virtual
if ($_SESSION['cart']->get_content_type() != 'virtual' || $_SESSION['cart']->in_cart_check('product_is_free','1') != $_SESSION['cart']->count_contents()) {
// unset session to force regular registration
unset($_SESSION['customer_id']);
unset($_SESSION['free_virtual']);
}
}
// if the customer is not logged on, redirect them to the login page
if (!$_SESSION['customer_id']) {
$_SESSION['navigation']->set_snapshot();
zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
} else {
// validate customer
if (zen_get_customer_validate_session($_SESSION['customer_id']) == false) {
$_SESSION['navigation']->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT));
zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
}
}
// Validate Cart for checkout
$_SESSION['valid_to_checkout'] = true;
$_SESSION['cart']->get_products(true);
if ($_SESSION['valid_to_checkout'] == false) {
$messageStack->add('header', ERROR_CART_UPDATE, 'error');
zen_redirect(zen_href_link(FILENAME_SHOPPING_CART));
}
// Stock Check
if ( (STOCK_CHECK == 'true') && (STOCK_ALLOW_CHECKOUT != 'true') ) {
$products = $_SESSION['cart']->get_products();
for ($i=0, $n=sizeof($products); $i<$n; $i++) {
// Added to allow individual stock of different attributes
unset($attributes);
if(is_array($products[$i]['attributes'])) {
$attributes = $products[$i]['attributes'];
} else {
$attributes = '';
}
// End change
if (zen_check_stock($products[$i]['id'], $products[$i]['quantity'], $attributes)) {
zen_redirect(zen_href_link(FILENAME_SHOPPING_CART));
break;
}
}
}
// register a random ID in the session to check throughout the checkout procedure
// against alterations in the shopping cart contents
$_SESSION['cartID'] = $_SESSION['cart']->cartID;
// load all enabled shipping modules
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping();
// if no shipping destination address was selected, use the customers own address as default
if (!$_SESSION['sendto']) {
$_SESSION['sendto'] = $_SESSION['customer_default_address_id'];
} else {
// verify the selected shipping address
$check_address_query = "SELECT count(*) AS total
FROM " . TABLE_ADDRESS_BOOK . "
WHERE customers_id = :customersID
AND address_book_id = :addressBookID";
$check_address_query = $db->bindVars($check_address_query, ':customersID', $_SESSION['customer_id'], 'integer');
$check_address_query = $db->bindVars($check_address_query, ':addressBookID', $_SESSION['sendto'], 'integer');
$check_address = $db->Execute($check_address_query);
if ($check_address->fields['total'] != '1') {
$_SESSION['sendto'] = $_SESSION['customer_default_address_id'];
$_SESSION['shipping'] = '';
}
}
// if no billing destination address was selected, use the customers own address as default
if (!$_SESSION['billto']) {
$_SESSION['billto'] = $_SESSION['customer_default_address_id'];
} else {
// verify the selected billing address
$check_address_query = "SELECT count(*) AS total FROM " . TABLE_ADDRESS_BOOK . "
WHERE customers_id = :customersID
AND address_book_id = :addressBookID";
$check_address_query = $db->bindVars($check_address_query, ':customersID', $_SESSION['customer_id'], 'integer');
$check_address_query = $db->bindVars($check_address_query, ':addressBookID', $_SESSION['billto'], 'integer');
$check_address = $db->Execute($check_address_query);
if ($check_address->fields['total'] != '1') {
$_SESSION['billto'] = $_SESSION['customer_default_address_id'];
$_SESSION['payment'] = '';
}
}
// get all available shipping quotes
$quotes = $shipping_modules->quote();
//print_r($quotes);
// if the order contains only virtual products, hide shipping input information
// a shipping address is not needed
if ($order->content_type == 'virtual') {
if ($_SESSION['shipping'] != 'free_free') {
$_SESSION['shipping'] = 'free_free';
$_SESSION['shipping']['title'] = 'free_free';
$_SESSION['sendto'] = false;
if (!($messageStack->size('checkout_payment') > 0) && !($messageStack->size('checkout_shipping') > 0) && !($messageStack->size('redemptions') > 0) ) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT, 'fecaction=null', 'SSL'));
}
}
}
// support for cart containing only ALWAYS FREE SHIPPING items
//if ($_SESSION['cart']->count_contents() == $_SESSION['cart']->free_shipping_items()) {
//$_SESSION['shipping'] = 'free_free';
//$_SESSION['shipping']['title'] = 'free_free';
//}
// load all enabled payment modules
require(DIR_WS_CLASSES . 'payment.php');
// BEGIN REWARDS POINTS
// if credit does not cover order total or isn't selected
if ($_SESSION['credit_covers'] != true) {
// check that a gift voucher isn't being used that is larger than the order
if ($_SESSION['cot_gv'] < $order->info['total']) {
$credit_covers = false;
}
} else {
$credit_covers = true;
}
// END REWARDS POINTS
$payment_modules = new payment;
if (isset($_GET['payment_error']) && is_object(${$_GET['payment_error']}) && ($error = ${$_GET['payment_error']}->get_error())) {
$messageStack->add('checkout_payment', $error['error'], 'error');
unset($_SESSION['payment']);
}
// redirect to calculate shipping on initial load
if ( !$_SESSION['shipping'] || ( $_SESSION['shipping'] && ($_SESSION['shipping'] == false) && (zen_count_shipping_modules() > 1) ) ) {
$_SESSION['shipping'] = $shipping_modules->cheapest();
if (!($messageStack->size('checkout_payment') > 0) && !($messageStack->size('checkout_shipping') > 0) && !($messageStack->size('redemptions') > 0) && $_SESSION['shipping']) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT, zen_get_all_get_params(), 'SSL'));
}
}
require(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total();
$order_total_modules->collect_posts();
$order_total_modules->pre_confirmation_check();
if ($credit_covers) {
unset($_SESSION['payment']);
}
// get coupon code
if ($_SESSION['cc_id']) {
$discount_coupon_query = "SELECT coupon_code
FROM " . TABLE_COUPONS . "
WHERE coupon_id = :couponID";
$discount_coupon_query = $db->bindVars($discount_coupon_query, ':couponID', $_SESSION['cc_id'], 'integer');
$discount_coupon = $db->Execute($discount_coupon_query);
}
// load all enabled shipping modules
if ( defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && (MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true') ) {
$pass = false;
switch (MODULE_ORDER_TOTAL_SHIPPING_DESTINATION) {
case 'national':
if ($order->delivery['country_id'] == STORE_COUNTRY) {
$pass = true;
}
break;
case 'international':
if ($order->delivery['country_id'] != STORE_COUNTRY) {
$pass = true;
}
break;
case 'both':
$pass = true;
break;
}
$free_shipping = false;
if ( ($pass == true) && ($_SESSION['cart']->show_total() >= MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) ) {
$free_shipping = true;
}
} else {
$free_shipping = false;
}
// Should address-edit button be offered?
$displayAddressEdit = (MAX_ADDRESS_BOOK_ENTRIES >= 2);
// if shipping-edit button should be overridden, do so
$editShippingButtonLink = zen_href_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL');
if (isset($_SESSION['payment']) && method_exists($$_SESSION['payment'], 'alterShippingEditButton')) {
$theLink = $$_SESSION['payment']->alterShippingEditButton();
if ($theLink) {
$editShippingButtonLink = $theLink;
$displayAddressEdit = true;
}
}
$comments = $_SESSION['comments'];
$flagOnSubmit = sizeof($payment_modules->selection());
require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));
if (isset($_POST['payment'])) $_SESSION['payment'] = $_POST['payment'];
if (isset($_POST['comments'])) $_SESSION['comments'] = zen_db_prepare_input($_POST['comments']);
// update customers_referral with $_SESSION['gv_id']
if ($_SESSION['cc_id']) {
$discount_coupon_query = "SELECT coupon_code
FROM " . TABLE_COUPONS . "
WHERE coupon_id = :couponID";
$discount_coupon_query = $db->bindVars($discount_coupon_query, ':couponID', $_SESSION['cc_id'], 'integer');
$discount_coupon = $db->Execute($discount_coupon_query);
$customers_referral_query = "SELECT customers_referral
FROM " . TABLE_CUSTOMERS . "
WHERE customers_id = :customersID";
$customers_referral_query = $db->bindVars($customers_referral_query, ':customersID', $_SESSION['customer_id'], 'integer');
$customers_referral = $db->Execute($customers_referral_query);
// only use discount coupon if set by coupon
if ($customers_referral->fields['customers_referral'] == '' and CUSTOMERS_REFERRAL_STATUS == 1) {
$sql = "UPDATE " . TABLE_CUSTOMERS . "
SET customers_referral = :customersReferral
WHERE customers_id = :customersID";
$sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
$sql = $db->bindVars($sql, ':customersReferral', $discount_coupon->fields['coupon_code'], 'string');
$db->Execute($sql);
} else {
// do not update referral was added before
}
}
// initialize modules
$qc_init_dir_full = DIR_FS_CATALOG . DIR_WS_MODULES . 'quick_checkout_init/';
$qc_init_dir = DIR_WS_MODULES . 'quick_checkout_init/';
if ($dir = @dir($qc_init_dir_full)) {
while ($file = $dir->read()) {
if (!is_dir($qc_init_dir_full . $file)) {
if (preg_match('/\.php$/', $file) > 0) {
//include init file
include($qc_init_dir . $file);
}
}
}
$dir->close();
}
switch ($_GET['fecaction']) {
case 'update':
$bool = true; //tell a freand
$form_action_url = zen_href_link(FILENAME_CHECKOUT, '', 'SSL');
if (zen_not_null($_POST['comments'])) {
$_SESSION['comments'] = zen_db_prepare_input($_POST['comments']);
}
$comments = $_SESSION['comments'];
// process modules
$qc_process_dir_full = DIR_FS_CATALOG . DIR_WS_MODULES . 'quick_checkout_process/';
$qc_process_dir = DIR_WS_MODULES . 'quick_checkout_process/';
if ($dir = @dir($qc_process_dir_full)) {
while ($file = $dir->read()) {
if (!is_dir($qc_process_dir_full . $file)) {
if (preg_match('/\.php$/', $file) > 0) {
//include init file
include($qc_process_dir . $file);
}
}
}
$dir->close();
}
if ( (zen_count_shipping_modules() > 0) || ($free_shipping == true) ) {
if ( (isset($_POST['shipping'])) && (strpos($_POST['shipping'], '_')) ) {
$_SESSION['shipping'] = $_POST['shipping']; // process shipping
list($module, $method) = explode('_', $_SESSION['shipping']);
if ( is_object($$module) || ($_SESSION['shipping'] == 'free_free') ) {
if ($_SESSION['shipping'] == 'free_free') {
$quote[0]['methods'][0]['title'] = FREE_SHIPPING_TITLE;
$quote[0]['methods'][0]['cost'] = '0';
} else if ($_SESSION['shipping'] == 'tellafriend_tellafriend') { //bof tell a frend
foreach($_POST["tell_a_friend_email"] as $key => $email) {
$_POST["tell_a_friend_email"][$key] = trim(strtolower($email));
$_POST["tell_a_friend_email_f_name"][$key] = trim($_POST["tell_a_friend_email_f_name"][$key]);
$_POST["tell_a_friend_email_l_name"][$key] = trim($_POST["tell_a_friend_email_l_name"][$key]);
}
$tell_a_friend_email = $_POST["tell_a_friend_email"];
$tell_a_friend_email = array_unique($tell_a_friend_email);
$un_bool = true;
foreach($tell_a_friend_email as $key => $email) {
if(trim($email) == "") {
$tell_a_friend_email_error .= "Please fill all of the email fields before selecting this shipping method.
";
$bool = false;
} else if(!preg_match("/^[a-z0-9]+[a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,6}$/i", trim($email))) {
$tell_a_friend_email_error .= "$email is not properly formed.
";
$bool = false;
} else if (is_object($captcha) && !$captcha->validateCaptchaCode()) { //add if for CAPTCHA check
$tell_a_friend_email_error .= ERROR_CAPTCHA;
$bool = false;
} else {
$query = "select * from " . TABLE_FREE_SHIPPING_REFERRALS . " where referral_to_address = '$email'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{
//$tell_a_friend_email_error .= "$email is already in database.
";
if($un_bool)
{
$tell_a_friend_email_error .= "Please make each email address unique.
";
$un_bool = false;
}
$tell_a_friend_email_error .= "$email, is already in use.
";
$tell_a_friend_email[$key] = "";
$bool = false;
}
}
}
$_SESSION["tell_a_friend_email"] = "";
$_SESSION["tell_a_friend_email"] = $tell_a_friend_email;
$_SESSION["tell_a_friend_email_f_name"] = $_POST["tell_a_friend_email_f_name"];
$_SESSION["tell_a_friend_email_l_name"] = $_POST["tell_a_friend_email_l_name"];
if(count($tell_a_friend_email) < zen_get_configuration_key_value("MODULE_SHIPPING_TELL_A_FRIEND_NO_OF_EMAILS"))
{
$tell_a_friend_email_error .= "Please fill all the email fields.
";
$bool = false;
}
if ($tell_a_friend_email_error != '') {
$messageStack->add_session('checkout_shipping', $tell_a_friend_email_error, 'error');
$_SESSION['shipping'] = $shipping_modules->cheapest();
zen_redirect(zen_href_link(FILENAME_CHECKOUT, '', 'SSL'));
}
if($bool)
{
$quote = $shipping_modules->quote($method, $module);
}
//eof tell a freand
} else {
// avoid incorrect calculations during redirect
$shipping_modules = new shipping();
$quote = $shipping_modules->quote($method, $module);
}
if (isset($quote['error'])) {
$_SESSION['shipping'] = '';
} else {
if ( (isset($quote[0]['methods'][0]['title'])) && (isset($quote[0]['methods'][0]['cost'])) ) {
$_SESSION['shipping'] = array('id' => $_SESSION['shipping'],
'title' => (($free_shipping == true) ? $quote[0]['methods'][0]['title'] : $quote[0]['module'] . ' (' . $quote[0]['methods'][0]['title'] . ')'),
'cost' => $quote[0]['methods'][0]['cost']);
zen_redirect(zen_href_link(FILENAME_CHECKOUT, 'fecaction=null', 'SSL'));
}
}
} else {
$_SESSION['shipping'] = false;
}
}
} else {
$_SESSION['shipping'] = false;
zen_redirect(zen_href_link(FILENAME_CHECKOUT, '', 'SSL'));
}
break;
case 'submit':
if (isset($$_SESSION['payment']->form_action_url)) {
$form_action_url = $$_SESSION['payment']->form_action_url;
} else {
$form_action_url = zen_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
}
// process comments
if (zen_not_null($_POST['comments'])) {
$_SESSION['comments'] = zen_db_prepare_input($_POST['comments']);
}
$comments = $_SESSION['comments'];
// BEGIN FEC v1.24a DROP DOWN
if (FEC_DROP_DOWN == 'true') {
if (zen_not_null($_POST['dropdown'])) {
$_SESSION['dropdown'] = zen_db_prepare_input($_POST['dropdown']);
}
$dropdown = $_SESSION['dropdown'];
}
if (FEC_GIFT_MESSAGE == 'true') {
if (zen_not_null($_POST['gift-message'])) {
$_SESSION['gift-message'] = zen_db_prepare_input($_POST['gift-message']);
}
$gift_message = $_SESSION['gift-message'];
}
// END DROP DOWN
// BEGIN OPTIONAL CHECKBOX
if (FEC_CHECKBOX == 'true') {
if (zen_not_null($_POST['fec_checkbox'])) {
$_SESSION['fec_checkbox'] = $_POST['fec_checkbox'];
} else {
unset($_SESSION['fec_checkbox']);
}
}
// process shipping
if ( (zen_count_shipping_modules() > 0) || ($free_shipping == true) ) {
if ( (isset($_POST['shipping'])) && (strpos($_POST['shipping'], '_')) ) {
$_SESSION['shipping'] = $_POST['shipping']; // process shipping
list($module, $method) = explode('_', $_SESSION['shipping']);
if ( is_object($$module) || ($_SESSION['shipping'] == 'free_free') ) {
if ($_SESSION['shipping'] == 'free_free') {
$quote[0]['methods'][0]['title'] = FREE_SHIPPING_TITLE;
$quote[0]['methods'][0]['cost'] = '0';
} else {
$quote = $shipping_modules->quote($method, $module);
}
if (isset($quote['error'])) {
$_SESSION['shipping'] = '';
} else {
if ( (isset($quote[0]['methods'][0]['title'])) && (isset($quote[0]['methods'][0]['cost'])) ) {
$_SESSION['shipping'] = array('id' => $_SESSION['shipping'],
'title' => (($free_shipping == true) ? $quote[0]['methods'][0]['title'] : $quote[0]['module'] . ' (' . $quote[0]['methods'][0]['title'] . ')'),
'cost' => $quote[0]['methods'][0]['cost']);
if (isset($$_SESSION['payment']->form_action_url)) {
zen_redirect($$_SESSION['payment']->form_action_url);
} else {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PROCESS, 'ajax=off', 'SSL'));
}
}
}
} else {
$_SESSION['shipping'] = false;
}
}
} else {
$_SESSION['shipping'] = false;
if (isset($$_SESSION['payment']->form_action_url)) {
zen_redirect($$_SESSION['payment']->form_action_url);
} else {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL'));
}
}
break;
case 'null':
$form_action_url = zen_href_link($checkout_confirmation, 'fecaction=process', 'SSL');
break;
default:
$form_action_url = zen_href_link(FILENAME_CHECKOUT, 'fecaction=null', 'SSL');
if (!($messageStack->size('checkout_payment') > 0) && !($messageStack->size('checkout_shipping') > 0) && !($messageStack->size('redemptions') > 0) ) {
zen_redirect($form_action_url);
}
$form_action_url = zen_href_link($checkout_confirmation, 'fecaction=process', 'SSL');
break;
}
$breadcrumb->add(NAVBAR_TITLE_1, zen_href_link(FILENAME_CHECKOUT, '', 'SSL'));
// last line of script
$zco_notifier->notify('NOTIFY_HEADER_END_CHECKOUT');
?>