$status = fn_checkout_place_order($cart, $auth, $_REQUEST); if ($status == PLACE_ORDER_STATUS_TO_CART) { return array(CONTROLLER_STATUS_REDIRECT, 'checkout.cart'); } elseif ($status == PLACE_ORDER_STATUS_DENIED) { return array(CONTROLLER_STATUS_DENIED); } } if ($mode == 'update_steps') { $redirect_params = fn_checkout_update_steps($cart, $auth, $_REQUEST); return array(CONTROLLER_STATUS_REDIRECT, 'checkout.checkout?' . http_build_query($redirect_params)); } if ($mode == 'create_profile') { if (!empty($_REQUEST['order_id']) && !empty($auth['order_ids']) && in_array($_REQUEST['order_id'], $auth['order_ids'])) { $order_info = fn_get_order_info($_REQUEST['order_id']); $user_data = $_REQUEST['user_data']; fn_fill_user_fields($user_data); foreach ($user_data as $k => $v) { if (isset($order_info[$k])) { $user_data[$k] = $order_info[$k]; } } if ($res = fn_update_user(0, $user_data, $auth, true, true)) { list($user_id) = $res; fn_login_user($user_id); return array(CONTROLLER_STATUS_REDIRECT, 'profiles.success_add'); } else { return array(CONTROLLER_STATUS_REDIRECT, 'checkout.complete?order_id=' . $_REQUEST['order_id']); } } else { return array(CONTROLLER_STATUS_DENIED); }
/** * Check if the promotion is already used by customer. * * @param int $promotion_id * @param array $cart * @return int|bool */ function fn_promotion_check_existence($promotion_id, &$cart) { static $statuses = null; if (is_null($statuses)) { $order_statuses = fn_get_statuses(STATUSES_ORDER, array(), true); foreach ($order_statuses as $status) { if ($status['params']['inventory'] == 'D') { // decreasing (positive) status $statuses[] = $status['status']; } } } if (!$statuses) { return false; } $udata = $cart['user_data']; fn_fill_user_fields($udata); if (defined('ORDER_MANAGEMENT') && !empty($cart['order_id'])) { $order_management_condition = db_quote(' order_id != ?i AND ', $cart['order_id']); } else { $order_management_condition = ''; } $exists = db_get_field("SELECT ((firstname = ?s) + (lastname = ?s) + (b_city = ?s) + (b_state = ?s) + (b_country = ?s) + (b_zipcode = ?s) + (email = ?s) * 6) as r FROM ?:orders WHERE ?p FIND_IN_SET(?i, promotion_ids) AND status IN (?a) HAVING r >= ?i LIMIT 1", $udata['firstname'], $udata['lastname'], $udata['b_city'], $udata['b_state'], $udata['b_country'], $udata['b_zipcode'], $udata['email'], $order_management_condition, $promotion_id, $statuses, PROMOTION_MIN_MATCHES); return $exists; }
function fn_add_user_data_descriptions(&$user_data, $lang_code = CART_LANGUAGE) { fn_fill_user_fields($user_data); // Replace country and state values with their descriptions if (!empty($user_data['b_country'])) { $user_data['b_country_descr'] = fn_get_country_name($user_data['b_country'], $lang_code); } if (!empty($user_data['s_country'])) { $user_data['s_country_descr'] = fn_get_country_name($user_data['s_country'], $lang_code); } if (!empty($user_data['b_state'])) { $user_data['b_state_descr'] = fn_get_state_name($user_data['b_state'], $user_data['b_country'], $lang_code); if (empty($user_data['b_state_descr'])) { $user_data['b_state_descr'] = $user_data['b_state']; } } if (!empty($user_data['s_state'])) { $user_data['s_state_descr'] = fn_get_state_name($user_data['s_state'], $user_data['s_country'], $lang_code); if (empty($user_data['s_state_descr'])) { $user_data['s_state_descr'] = $user_data['s_state']; } } }
/** * Get promotion dynamic properties * * @param array $promotion_id promotion ID * @param array $promotion promotion condition * @param array $condition condition * @param array $cart cart * @param array $auth auth information * @return mixed */ function fn_promotion_get_dynamic($promotion_id, $promotion, $condition, &$cart, &$auth = NULL) { if ($condition == 'number_of_usages') { $usages = db_get_field("SELECT number_of_usages FROM ?:promotions WHERE promotion_id = ?i", $promotion_id); return intval($usages) + 1; } elseif ($condition == 'once_per_customer') { fn_define('PROMOTION_MIN_MATCHES', 5); $order_statuses = fn_get_statuses(STATUSES_ORDER, false, true); $_statuses = array(); foreach ($order_statuses as $v) { if ($v['inventory'] == 'D') { // decreasing (positive) status $_statuses[] = $v['status']; } } if (empty($cart['user_data'])) { return 'Y'; } $udata = $cart['user_data']; fn_fill_user_fields($udata); $exists = db_get_field("SELECT ((firstname = ?s) + (lastname = ?s) + (b_city = ?s) + (b_state = ?s) + (b_country = ?s) + (b_zipcode = ?s) + (email = ?s) * 6) as r FROM ?:orders WHERE FIND_IN_SET(promotion_ids, ?i) AND status IN (?a) HAVING r >= ?i LIMIT 1", $udata['firstname'], $udata['lastname'], $udata['b_city'], $udata['b_state'], $udata['b_country'], $udata['b_zipcode'], $udata['email'], $promotion_id, $_statuses, PROMOTION_MIN_MATCHES); $promotion_data = fn_get_promotion_data($promotion_id); $coupon_exist = false; if (!empty($promotion_data['conditions']['conditions'])) { foreach ($promotion_data['conditions']['conditions'] as $val) { if ($val['condition'] == 'coupon_code') { $coupon_exist = fn_promotion_validate_coupon($val, $cart); if (!empty($coupon_exist) && !empty($exists)) { fn_set_notification('E', fn_get_lang_var('error'), fn_get_lang_var('text_can_be_used_once'), false, 'error_coupon_already_used'); } break; } } } if (!empty($exists)) { return 'N'; } return 'Y'; // this is checkbox with values (Y/N), so we need to return appropriate values } }
function fn_add_user_data_descriptions(&$user_data, $lang_code = CART_LANGUAGE) { fn_fill_user_fields($user_data); // Replace titles ids with their descriptions $_titles = fn_get_static_data_section('T', false); $titles = array(); foreach ($_titles as $val) { $titles[$val['param']] = $val; } if (!empty($user_data['title'])) { $user_data['title_descr'] = !empty($titles[$user_data['title']]['descr']) ? $titles[$user_data['title']]['descr'] : $user_data['title']; } if (!empty($user_data['b_title'])) { $user_data['b_title_descr'] = !empty($titles[$user_data['b_title']]['descr']) ? $titles[$user_data['b_title']]['descr'] : $user_data['b_title']; } if (!empty($user_data['s_title'])) { $user_data['s_title_descr'] = !empty($titles[$user_data['s_title']]['descr']) ? $titles[$user_data['s_title']]['descr'] : $user_data['s_title']; } // Replace country and state values with their descriptions if (!empty($user_data['b_country'])) { $user_data['b_country_descr'] = fn_get_country_name($user_data['b_country'], $lang_code); } if (!empty($user_data['s_country'])) { $user_data['s_country_descr'] = fn_get_country_name($user_data['s_country'], $lang_code); } if (!empty($user_data['b_state'])) { $user_data['b_state_descr'] = fn_get_state_name($user_data['b_state'], $user_data['b_country'], $lang_code); if (empty($user_data['b_state_descr'])) { $user_data['b_state_descr'] = $user_data['b_state']; } } if (!empty($user_data['s_state'])) { $user_data['s_state_descr'] = fn_get_state_name($user_data['s_state'], $user_data['s_country'], $lang_code); if (empty($user_data['s_state_descr'])) { $user_data['s_state_descr'] = $user_data['s_state']; } } }