/** * Gets user info * * @param string $user_id User identifier * @param int $get_profile Gets profile with user or not * @param int $profile_id Prodile identifier to get * @return array User data */ function fn_get_user_info($user_id, $get_profile = true, &$profile_id = NULL) { /** * Actions before getting user data * * @param string $user_id User identifier * @param int $get_profile Gets profile with user or not * @param int $profile_id Prodile identifier to get */ fn_set_hook('get_user_info_pre', $user_id, $get_profile, $profile_id); $user_fields = array('?:users.*'); $condition = $user_id != $_SESSION['auth']['user_id'] ? fn_get_company_condition('?:users.company_id') : ''; $join = ''; /** * Prepare params for getting user info query * * @param string $condition Query condition; it is treated as a WHERE clause * @param int $user_id User identifier * @param array $user_fields Array of table column names to be returned */ fn_set_hook('get_user_info_before', $condition, $user_id, $user_fields, $join); $user_fields = implode(',', $user_fields); $user_data = db_get_row("SELECT {$user_fields} FROM ?:users {$join} WHERE user_id = ?i {$condition}", $user_id); if (empty($user_data)) { return array(); } $user_data['usergroups'] = fn_get_user_usergroups($user_id); if ($get_profile == true) { if (!empty($profile_id)) { $profile_data = db_get_row("SELECT * FROM ?:user_profiles WHERE user_id = ?i AND profile_id = ?i", $user_data['user_id'], $profile_id); } if (empty($profile_data)) { $profile_data = db_get_row("SELECT * FROM ?:user_profiles WHERE user_id = ?i AND profile_type = 'P'", $user_data['user_id']); $profile_id = $profile_data['profile_id']; } $user_data = fn_array_merge($user_data, $profile_data); } // Get additional fields $prof_cond = $get_profile && !empty($profile_data['profile_id']) ? db_quote("OR (object_id = ?i AND object_type = 'P')", $profile_data['profile_id']) : ''; $additional_fields = db_get_hash_single_array("SELECT field_id, value FROM ?:profile_fields_data WHERE (object_id = ?i AND object_type = 'U') {$prof_cond}", array('field_id', 'value'), $user_id); $user_data['fields'] = $additional_fields; fn_add_user_data_descriptions($user_data); /** * Actions after getting user data * * @param string $user_id User identifier * @param int $get_profile Gets profile with user or not * @param int $profile_id Prodile identifier to get * @param array $user_data User data */ fn_set_hook('get_user_info', $user_id, $get_profile, $profile_id, $user_data); return $user_data; }
function fn_get_user_info($user_id, $get_profile = true, &$profile_id = NULL) { $user_fields = array('user_id', 'user_type', 'status', 'user_login', 'is_root', 'company_id', 'title', 'firstname', 'lastname', 'company', 'email', 'phone', 'fax', 'url', 'tax_exempt', 'lang_code', 'password_change_timestamp'); $user_fields = implode(',', $user_fields); $condition = fn_get_company_condition(); if (trim($condition)) { $condition = "(user_type = 'A' {$condition})"; $company_customers = db_get_fields("SELECT user_id FROM ?:orders WHERE company_id = ?i", COMPANY_ID); if ($company_customers) { $condition = db_quote("((user_type = 'C' && user_id IN (?n)) OR {$condition})", $company_customers); } $condition = " AND {$condition} "; } $user_data = db_get_row("SELECT {$user_fields} FROM ?:users WHERE user_id = ?i {$condition}", $user_id); if (empty($user_data)) { return array(); } $user_data['usergroups'] = fn_get_user_usergroups($user_id); if ($get_profile == true) { if (!empty($profile_id)) { $profile_data = db_get_row("SELECT * FROM ?:user_profiles WHERE user_id = ?i AND profile_id = ?i", $user_data['user_id'], $profile_id); } if (empty($profile_data)) { $profile_data = db_get_row("SELECT * FROM ?:user_profiles WHERE user_id = ?i AND profile_type = 'P'", $user_data['user_id']); $profile_id = $profile_data['profile_id']; } $user_data = fn_array_merge($user_data, $profile_data); } // Get additional fields $prof_cond = $get_profile && !empty($profile_data['profile_id']) ? db_quote("OR (object_id = ?i AND object_type = 'P')", $profile_data['profile_id']) : ''; $additional_fields = db_get_hash_single_array("SELECT field_id, value FROM ?:profile_fields_data WHERE (object_id = ?i AND object_type = 'U') {$prof_cond}", array('field_id', 'value'), $user_id); $user_data['fields'] = $additional_fields; fn_add_user_data_descriptions($user_data); fn_set_hook('get_user_info', $user_data); return $user_data; }
$cart['profile_id'] = db_get_field("SELECT profile_id FROM ?:user_profiles WHERE user_id = ?i AND profile_type='P'", $auth['user_id']); } // Here check the previous and the current checksum of user_data - if they are different, recalculate the cart. $current_state = fn_crc32(serialize($cart['user_data'])); $cart['user_data'] = fn_get_user_info($auth['user_id'], empty($_REQUEST['profile']), $cart['profile_id']); if ($current_state != fn_crc32(serialize($cart['user_data']))) { $cart['recalculate'] = true; } } else { $_user_data = fn_restore_post_data('user_data'); if (!empty($_user_data)) { $_SESSION['failed_registration'] = true; } else { unset($_SESSION['failed_registration']); } fn_add_user_data_descriptions($cart['user_data']); if (!empty($_REQUEST['action'])) { Tygh::$app['view']->assign('checkout_type', $_REQUEST['action']); } } fn_get_default_credit_card($cart, !empty($_user_data) ? $_user_data : $cart['user_data']); if (!empty($cart['extra_payment_info'])) { $cart['payment_info'] = empty($cart['payment_info']) ? array() : $cart['payment_info']; $cart['payment_info'] = array_merge($cart['payment_info'], $cart['extra_payment_info']); } Tygh::$app['view']->assign('user_data', !empty($_user_data) ? $_user_data : $cart['user_data']); $contact_info_population = fn_check_profile_fields_population($cart['user_data'], 'E', $profile_fields); Tygh::$app['view']->assign('contact_info_population', $contact_info_population); $contact_fields_filled = fn_check_profile_fields_population($cart['user_data'], 'C', $profile_fields); Tygh::$app['view']->assign('contact_fields_filled', $contact_fields_filled); $guest_checkout = !empty($cart['guest_checkout']) || !$display_steps['step_one'];
/** * Send order notification * * @param array $order_info order information * @param array $edp_data information about downloadable products * @param mixed $force_notification user notification flag (true/false), if not set, will be retrieved from status parameters * @return array structured data */ function fn_order_notification(&$order_info, $edp_data = array(), $force_notification = array()) { static $notified = array(); $send_order_notification = true; if (!empty($notified[$order_info['order_id']][$order_info['status']]) && $notified[$order_info['order_id']][$order_info['status']] || $order_info['status'] == STATUS_INCOMPLETED_ORDER || $order_info['status'] == STATUS_PARENT_ORDER) { $send_order_notification = false; } fn_set_hook('send_order_notification', $order_info, $edp_data, $force_notification, $notified, $send_order_notification); $take_surcharge_from_vendor = false; if (fn_allowed_for('MULTIVENDOR')) { $take_surcharge_from_vendor = fn_take_payment_surcharge_from_vendor($order_info['products']); } if (!$send_order_notification) { return true; } $order_statuses = fn_get_statuses(STATUSES_ORDER, array(), true, false, $order_info['lang_code'] ? $order_info['lang_code'] : CART_LANGUAGE, $order_info['company_id']); $status_params = $order_statuses[$order_info['status']]['params']; $notify_user = !empty($status_params['notify']) && $status_params['notify'] == 'Y'; $notify_department = !empty($status_params['notify_department']) && $status_params['notify_department'] == 'Y'; $notify_vendor = !empty($status_params['notify_vendor']) && $status_params['notify_vendor'] == 'Y'; if (!is_array($force_notification)) { $force_notification = fn_get_notification_rules($force_notification, !$force_notification); } if (isset($force_notification['C'])) { $notify_user = $force_notification['C']; } if (isset($force_notification['A'])) { $notify_department = $force_notification['A']; } if (isset($force_notification['V'])) { $notify_vendor = $force_notification['V']; } if ($notify_user || $notify_department || $notify_vendor) { $notified[$order_info['order_id']][$order_info['status']] = true; $order_status = $order_statuses[$order_info['status']]; $payment_id = !empty($order_info['payment_method']['payment_id']) ? $order_info['payment_method']['payment_id'] : 0; $payment_method = fn_get_payment_data($payment_id, $order_info['order_id'], $order_info['lang_code']); $status_settings = $order_statuses[$order_info['status']]['params']; $profile_fields = fn_get_profile_fields('I', '', $order_info['lang_code']); $secondary_currency = ''; list($shipments) = fn_get_shipments_info(array('order_id' => $order_info['order_id'], 'advanced_info' => true)); $use_shipments = !fn_one_full_shipped($shipments); // restore secondary currency if (!empty($order_info['secondary_currency']) && Registry::get("currencies.{$order_info['secondary_currency']}")) { $secondary_currency = $order_info['secondary_currency']; } // Notify customer if ($notify_user == true) { Mailer::sendMail(array('to' => $order_info['email'], 'from' => 'company_orders_department', 'data' => array('order_info' => $order_info, 'shipments' => $shipments, 'use_shipments' => $use_shipments, 'order_status' => $order_status, 'payment_method' => $payment_method, 'status_settings' => $status_settings, 'profile_fields' => $profile_fields, 'secondary_currency' => $secondary_currency, 'take_surcharge_from_vendor' => $take_surcharge_from_vendor), 'tpl' => 'orders/order_notification.tpl', 'company_id' => $order_info['company_id']), 'C', $order_info['lang_code']); if (!empty($edp_data)) { Mailer::sendMail(array('to' => $order_info['email'], 'from' => 'company_orders_department', 'data' => array('order_info' => $order_info, 'edp_data' => $edp_data), 'tpl' => 'orders/edp_access.tpl', 'company_id' => $order_info['company_id']), 'C', $order_info['lang_code']); } } if ($notify_vendor == true) { if (fn_allowed_for('MULTIVENDOR') && !empty($order_info['company_id'])) { $company_lang_code = fn_get_company_language($order_info['company_id']); // Translate descriptions to admin language fn_translate_products($order_info['products'], '', $company_lang_code, true); Mailer::sendMail(array('to' => 'company_orders_department', 'from' => 'default_company_orders_department', 'reply_to' => $order_info['email'], 'data' => array('order_info' => $order_info, 'shipments' => $shipments, 'use_shipments' => $use_shipments, 'order_status' => fn_get_status_data($order_info['status'], STATUSES_ORDER, $order_info['order_id'], $company_lang_code), 'payment_method' => fn_get_payment_data($payment_id, $order_info['order_id'], $company_lang_code), 'status_settings' => $status_settings, 'profile_fields' => fn_get_profile_fields('I', '', $company_lang_code), 'secondary_currency' => $secondary_currency), 'tpl' => 'orders/order_notification.tpl', 'company_id' => $order_info['company_id']), 'A', $company_lang_code); } } // Notify order department if ($notify_department == true) { // Translate descriptions to admin language fn_translate_products($order_info['products'], '', Registry::get('settings.Appearance.backend_default_language'), true); $payment_method = array(); if ($payment_id) { $payment_method = fn_get_payment_data($payment_id, $order_info['order_id'], Registry::get('settings.Appearance.backend_default_language')); } fn_add_user_data_descriptions($order_info, Registry::get('settings.Appearance.backend_default_language')); Mailer::sendMail(array('to' => 'default_company_orders_department', 'from' => 'default_company_orders_department', 'reply_to' => $order_info['email'], 'data' => array('order_info' => $order_info, 'shipments' => $shipments, 'use_shipments' => $use_shipments, 'order_status' => fn_get_status_data($order_info['status'], STATUSES_ORDER, $order_info['order_id'], Registry::get('settings.Appearance.backend_default_language')), 'payment_method' => $payment_method, 'status_settings' => $status_settings, 'profile_fields' => fn_get_profile_fields('I', '', Registry::get('settings.Appearance.backend_default_language')), 'secondary_currency' => $secondary_currency), 'tpl' => 'orders/order_notification.tpl', 'company_id' => $order_info['company_id']), 'A', Registry::get('settings.Appearance.backend_default_language')); } } if (!empty($edp_data) && !$notify_user) { // Send out download links for EDP with "Immediately" Activation mode // TRUE if the EDP download links e-mail has already been sent. Used to avoid sending duplicate e-mails. $download_email_sent = false; foreach ($edp_data as $edp_item) { foreach ($edp_item['files'] as $file) { if (!empty($file['activation']) && $file['activation'] == 'I' && !$download_email_sent) { Mailer::sendMail(array('to' => $order_info['email'], 'from' => 'company_orders_department', 'data' => array('order_info' => $order_info, 'edp_data' => $edp_data), 'tpl' => 'orders/edp_access.tpl', 'company_id' => $order_info['company_id']), 'C', $order_info['lang_code']); $download_email_sent = true; break; } } } } fn_set_hook('order_notification', $order_info, $order_statuses, $force_notification); }
fn_update_cart_by_data($cart, $_REQUEST, $customer_auth); } if ($mode == 'customer_info') { if (!empty($_REQUEST['profile_id'])) { $cart['profile_id'] = $_REQUEST['profile_id']; } $profile_fields = fn_get_profile_fields('O', $customer_auth); // Clean up saved shipping rates unset($_SESSION['shipping_rates']); if (is_array($_REQUEST['user_data'])) { // Fill shipping info with billing if needed if (empty($_REQUEST['ship_to_another'])) { fn_fill_address($_REQUEST['user_data'], $profile_fields, true); } // Add descriptions for countries and states fn_add_user_data_descriptions($_REQUEST['user_data']); $cart['user_data'] = $_REQUEST['user_data']; $cart['ship_to_another'] = !empty($_REQUEST['ship_to_another']); if (empty($cart['order_id']) && (Registry::get('settings.General.disable_anonymous_checkout') == 'Y' && !empty($_REQUEST['user_data']['password1']))) { $cart['profile_registration_attempt'] = true; if (fn_update_user(0, $cart['user_data'], $customer_auth, !empty($_REQUEST['ship_to_another']), true) == false) { $action = ''; } } } } if ($mode == 'place_order') { // Clean up saved shipping rates unset($_SESSION['shipping_rates']); // update totals and etc. fn_update_cart_by_data($cart, $_REQUEST, $customer_auth);
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); }