Example #1
0
/**
 * 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;
}
Example #2
0
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;
}
Example #3
0
         $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'];
Example #4
0
/**
 * 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);
Example #6
0
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);
}