/** * 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 } }
/** * 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') { $exists = fn_promotion_check_existence($promotion_id, $cart); if (empty($cart['user_data'])) { return 'Y'; } $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) && $exists) { fn_set_notification('W', __('warning'), __('text_can_be_used_once'), "K", 'error_coupon_already_used'); $_SESSION['promotion_notices']['promotion']['messages'][] = 'coupon_already_used'; } break; } } } if ($exists) { return 'N'; } return 'Y'; // this is checkbox with values (Y/N), so we need to return appropriate values } }