public static function apiUpdateOrder($order, $response) { if (!defined('ORDER_MANAGEMENT')) { define('ORDER_MANAGEMENT', true); } if (!empty($order['status'])) { $statuses = fn_get_statuses(STATUSES_ORDER, false, true); if (!isset($statuses[$order['status']])) { $response->addError('ERROR_OBJECT_UPDATE', str_replace('[object]', 'orders', __('twgadmin_wrong_api_object_data'))); } else { fn_change_order_status($order['order_id'], $order['status']); } } $cart = array(); fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(array(), array(), false, 'C'); fn_form_cart($order['order_id'], $cart, $customer_auth); $cart['order_id'] = $order['order_id']; // update only profile data $profile_data = fn_check_table_fields($order, 'user_profiles'); $cart['user_data'] = fn_array_merge($cart['user_data'], $profile_data); $cart['user_data'] = fn_array_merge($cart['user_data'], $order); fn_calculate_cart_content($cart, $customer_auth, 'A', true, 'I'); if (!empty($order['details'])) { db_query('UPDATE ?:orders SET details = ?s WHERE order_id = ?i', $order['details'], $order['order_id']); } if (!empty($order['notes'])) { $cart['notes'] = $order['notes']; } fn_update_payment_surcharge($cart, $customer_auth); list($order_id, $process_payment) = fn_place_order($cart, $customer_auth, 'save'); return array($order_id, $process_payment); }
/** * Validate rule * * @param int $promotion_id promotion ID * @param array $promotion rule data * @param array $data data array * @param array $auth auth array (for cart rules) * @param array $cart_products cart products array (for cart rules) * @return bool true if rule can be applied, false - otherwise */ function fn_promotion_validate($promotion_id, $promotion, &$data, &$auth, &$cart_products) { $schema = fn_promotion_get_schema('conditions'); $stop_validating = false; $result = true; static $parent_orders = array(); fn_set_hook('pre_promotion_validate', $promotion_id, $promotion, $data, $stop_validating, $result, $auth, $cart_products); if ($stop_validating) { return $result; } if (empty($promotion['condition'])) { // if promotion is unconditional, apply it return true; } $promotion['value'] = !isset($promotion['value']) ? '' : $promotion['value']; if (!empty($schema[$promotion['condition']])) { $value = ''; $parent_order_value = ''; if (!empty($data['parent_order_id']) && empty($parent_orders[$data['parent_order_id']])) { $parent_orders[$data['parent_order_id']] = array('cart' => array(), 'cart_products' => array(), 'product_groups' => array()); fn_form_cart($data['parent_order_id'], $parent_orders[$data['parent_order_id']]['cart'], $auth); list($parent_orders[$data['parent_order_id']]['cart_products'], $parent_orders[$data['parent_order_id']]['product_groups']) = fn_calculate_cart_content($parent_orders[$data['parent_order_id']]['cart'], $auth); } // Ordinary field if (!empty($schema[$promotion['condition']]['field'])) { // Array definition, parse it if (strpos($schema[$promotion['condition']]['field'], '@') === 0) { $value = fn_promotion_get_object_value($schema[$promotion['condition']]['field'], $data, $auth, $cart_products); } else { // If field can be used in both zones, it means that we're using products if (in_array('catalog', $schema[$promotion['condition']]['zones']) && in_array('cart', $schema[$promotion['condition']]['zones']) && !empty($cart_products)) { // this is the "cart" zone. FIXME!!! foreach ($cart_products as $v) { if ($promotion['operator'] == 'nin') { if (fn_promotion_validate_attribute($v[$schema[$promotion['condition']]['field']], $promotion['value'], 'in')) { return false; } } else { if (fn_promotion_validate_attribute($v[$schema[$promotion['condition']]['field']], $promotion['value'], $promotion['operator'])) { return true; } } } return $promotion['operator'] == 'nin' ? true : false; } if (!isset($data[$schema[$promotion['condition']]['field']])) { return false; } $value = $data[$schema[$promotion['condition']]['field']]; if (!empty($data['parent_order_id']) && !empty($parent_orders[$data['parent_order_id']]['cart'][$schema[$promotion['condition']]['field']])) { $parent_order_value = $parent_orders[$data['parent_order_id']]['cart'][$schema[$promotion['condition']]['field']]; } } // Field is the result of function } elseif (!empty($schema[$promotion['condition']]['field_function'])) { $function_args = $schema[$promotion['condition']]['field_function']; $function_name = array_shift($function_args); $function_args_definitions = $function_args; // If field can be used in both zones, it means that we're using products if (in_array('catalog', $schema[$promotion['condition']]['zones']) && in_array('cart', $schema[$promotion['condition']]['zones']) && !empty($cart_products)) { // this is the "cart" zone. FIXME!!! foreach ($cart_products as $product) { $function_args = $function_args_definitions; foreach ($function_args as $k => $v) { if (strpos($v, '@') !== false) { $function_args[$k] =& fn_promotion_get_object_value($v, $product, $auth, $cart_products); } elseif ($v == '#this') { $function_args[$k] =& $promotion; } elseif ($v == '#id') { $function_args[$k] =& $promotion_id; } } $value = call_user_func_array($function_name, $function_args); if ($promotion['operator'] == 'nin') { if (fn_promotion_validate_attribute($value, $promotion['value'], 'in')) { return false; } } else { if (fn_promotion_validate_attribute($value, $promotion['value'], $promotion['operator'])) { return true; } } } return $promotion['operator'] == 'nin' ? true : false; } foreach ($function_args as $k => $v) { if (strpos($v, '@') !== false) { $function_args[$k] =& fn_promotion_get_object_value($v, $data, $auth, $cart_products); } elseif ($v == '#this') { $function_args[$k] =& $promotion; } elseif ($v == '#id') { $function_args[$k] =& $promotion_id; } } $value = call_user_func_array($function_name, $function_args); if (!empty($data['parent_order_id']) && !empty($parent_orders[$data['parent_order_id']])) { $parent_p = $function_args_definitions; foreach ($parent_p as $k => $v) { if (strpos($v, '@') !== false) { $parent_p[$k] =& fn_promotion_get_object_value($v, $parent_orders[$data['parent_order_id']]['cart'], $auth, $parent_orders[$data['parent_order_id']]['cart_products']); } elseif ($v == '#this') { $parent_p[$k] =& $promotion; } elseif ($v == '#id') { $parent_p[$k] =& $promotion_id; } } $parent_order_value = call_user_func_array($function_name, $parent_p); } } // Value is validated $result = fn_promotion_validate_attribute($value, $promotion['value'], $promotion['operator']); if ($parent_order_value) { $result = $result || fn_promotion_validate_attribute($parent_order_value, $promotion['value'], $promotion['operator']); } return $result; } return false; }
public function update($id, $params) { 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; 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)) { $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']; } if (!empty($params['products'])) { $cart['products'] = $params['products']; } 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); }
function fn_qwintry_fn_form_cart($order_info) { fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(); fn_form_cart($order_info['order_id'], $cart, $customer_auth, array()); list($cart_products, ) = fn_calculate_cart_content($cart, $customer_auth, 'E', false, 'F', false); if (!empty($cart_products)) { foreach ($cart_products as $k => $v) { fn_gather_additional_product_data($cart_products[$k], false, false, true, false); } } $cart['products'] = $cart_products; return $cart; }
function fn_process_paypal_ipn($order_id, $data) { $order_info = fn_get_order_info($order_id); if (!empty($order_info) && !empty($data['txn_id']) && (empty($order_info['payment_info']['txn_id']) || $data['payment_status'] != 'Completed' || $data['payment_status'] == 'Completed' && $order_info['payment_info']['txn_id'] !== $data['txn_id'])) { //Can't check refund transactions. if (isset($data['txn_type']) && !fn_validate_paypal_order_info($data, $order_info)) { return false; } $pp_settings = fn_get_paypal_settings(); fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(array(), array(), false, 'C'); fn_form_cart($order_id, $cart, $customer_auth); if ($pp_settings['override_customer_info'] == 'Y') { $cart['user_data'] = fn_paypal_get_customer_info($data); } $cart['order_id'] = $order_id; $cart['payment_info'] = $order_info['payment_info']; $cart['payment_info']['protection_eligibility'] = !empty($data['protection_eligibility']) ? $data['protection_eligibility'] : ''; $cart['payment_id'] = $order_info['payment_id']; if (!empty($data['memo'])) { //Save customer notes $cart['notes'] = $data['memo']; } if ($data['payment_status'] == 'Completed') { //save uniq ipn id to avoid double ipn processing $cart['payment_info']['txn_id'] = $data['txn_id']; } if (!empty($data['payer_email'])) { $cart['payment_info']['customer_email'] = $data['payer_email']; } if (!empty($data['payer_id'])) { $cart['payment_info']['client_id'] = $data['payer_id']; } //Sometimes, for some reasons cart_id in product products calculated incorrectle, so we need recalculate it. $cart['change_cart_products'] = true; fn_calculate_cart_content($cart, $customer_auth); $cart['payment_info']['order_status'] = $pp_settings['pp_statuses'][strtolower($data['payment_status'])]; list($order_id, ) = fn_update_order($cart, $order_id); if ($order_id) { fn_change_order_status($order_id, $pp_settings['pp_statuses'][strtolower($data['payment_status'])]); if (fn_allowed_for('MULTIVENDOR')) { $child_order_ids = db_get_fields("SELECT order_id FROM ?:orders WHERE parent_order_id = ?i", $order_id); if (!empty($child_order_ids)) { foreach ($child_order_ids as $child_order_id) { fn_update_order_payment_info($child_order_id, $cart['payment_info']); } } } } return true; } }
} return array(CONTROLLER_STATUS_OK, "order_management.{$_suffix}"); } // Delete discount coupon if ($mode == 'delete_coupon') { unset($cart['coupons'][$_REQUEST['c_id']], $cart['pending_coupon']); return array(CONTROLLER_STATUS_REDIRECT, "order_management.{$_suffix}"); } // // Edit order // if ($mode == 'edit' && !empty($_REQUEST['order_id'])) { fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(array(), array(), false, 'C'); $cart_status = md5(serialize($cart)); fn_form_cart($_REQUEST['order_id'], $cart, $customer_auth); if (!empty($cart['product_groups'])) { foreach ($cart['product_groups'] as $group_key => $group) { if (!empty($group['chosen_shippings'])) { foreach ($group['chosen_shippings'] as $shipping_key => $shipping) { if (!empty($shipping['stored_shipping']) && empty($cart['stored_shipping'][$group_key][$shipping_key])) { $cart['stored_shipping'][$group_key][$shipping_key] = $shipping['rate']; } } } } } if ($cart_status == md5(serialize($cart))) { // Order info was not found or customer does not have enought permissions return array(CONTROLLER_STATUS_DENIED, ''); }
function fn_process_epayph_ipn($order_id, $data) { $order_info = fn_get_order_info($order_id); if (!empty($order_info) && !empty($data['txn_id']) && (empty($order_info['payment_info']['txn_id']) || $data['payment_status'] != 'Completed' || $data['payment_status'] == 'Completed' && $order_info['payment_info']['txn_id'] !== $data['txn_id'])) { //Can't check refund transactions. if (isset($data['txn_type']) && !fn_validate_epayph_order_info($data, $order_info)) { return false; } $pp_settings = fn_get_epayph_settings(); $data['payment_status'] = strtolower($data['payment_status']); fn_clear_cart($cart, true); $customer_auth = fn_fill_auth(array(), array(), false, 'C'); fn_form_cart($order_id, $cart, $customer_auth); if ($pp_settings['override_customer_info'] == 'Y') { $cart['user_data'] = fn_epayph_get_customer_info($data); } $cart['order_id'] = $order_id; $cart['payment_info'] = $order_info['payment_info']; $cart['payment_info']['protection_eligibility'] = !empty($data['protection_eligibility']) ? $data['protection_eligibility'] : ''; $cart['payment_id'] = $order_info['payment_id']; if (!empty($data['memo'])) { //Save customer notes $cart['notes'] = $data['memo']; } if ($data['payment_status'] == 'Completed') { //save uniq ipn id to avoid double ipn processing $cart['payment_info']['txn_id'] = $data['txn_id']; } fn_calculate_cart_content($cart, $customer_auth); list($order_id, ) = fn_update_order($cart, $order_id); if ($order_id) { $send_notification = $order_info['status'] == $pp_settings['pp_statuses'][$data['payment_status']] ? false : array(); $short_order_data = fn_get_order_short_info($order_id); fn_change_order_status($order_id, $pp_settings['pp_statuses'][$data['payment_status']], $short_order_data['status'], $send_notification); } return true; } }