function new_fb_login_action()
{
    global $wp, $wpdb, $new_fb_settings;
    if (isset($_GET['action']) && $_GET['action'] == 'unlink') {
        $user_info = wp_get_current_user();
        if ($user_info->ID) {
            $wpdb->query($wpdb->prepare('DELETE FROM ' . $wpdb->prefix . 'social_users
          WHERE ID = %d
          AND type = \'fb\'', $user_info->ID));
            set_site_transient($user_info->ID . '_new_fb_admin_notice', __('Your Facebook profile is successfully unlinked from your account.', 'nextend-facebook-connect'), 3600);
        }
        new_fb_redirect();
    }
    require_once dirname(__FILE__) . '/sdk/init.php';
    $user = $facebook->getUser();
    if ($user && is_user_logged_in() && new_fb_is_user_connected()) {
        new_fb_redirect();
    } elseif ($user) {
        // Register or Login
        try {
            // Proceed knowing you have a logged in user who's authenticated.
            $user_profile = $facebook->api('/me', 'GET', array('fields' => 'id,name,email,first_name,last_name'));
            $ID = $wpdb->get_var($wpdb->prepare('
        SELECT ID FROM ' . $wpdb->prefix . 'social_users WHERE type = "fb" AND identifier = "%d"
      ', $user_profile['id']));
            if (!get_user_by('id', $ID)) {
                $wpdb->query($wpdb->prepare('
          DELETE FROM ' . $wpdb->prefix . 'social_users WHERE ID = "%d"
        ', $ID));
                $ID = null;
            }
            if (!is_user_logged_in()) {
                if ($ID == NULL) {
                    // Register
                    if (!isset($user_profile['email'])) {
                        $user_profile['email'] = $user_profile['id'] . '@facebook.com';
                    }
                    $ID = email_exists($user_profile['email']);
                    if ($ID == false) {
                        // Real register
                        require_once ABSPATH . WPINC . '/registration.php';
                        $random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
                        if (!isset($new_fb_settings['fb_user_prefix'])) {
                            $new_fb_settings['fb_user_prefix'] = 'facebook-';
                        }
                        $username = strtolower($user_profile['first_name'] . $user_profile['last_name']);
                        $sanitized_user_login = sanitize_user($new_fb_settings['fb_user_prefix'] . $username);
                        if (!validate_username($sanitized_user_login)) {
                            $sanitized_user_login = sanitize_user('facebook' . $user_profile['id']);
                        }
                        $defaul_user_name = $sanitized_user_login;
                        $i = 1;
                        while (username_exists($sanitized_user_login)) {
                            $sanitized_user_login = $defaul_user_name . $i;
                            $i++;
                        }
                        //            $ID = wp_create_user($sanitized_user_login, $random_password, $user_profile['email']);
                        //            $ID = wp_create_user($user_profile['email'], $random_password, $user_profile['email']);
                        $wpdb->insert($wpdb->users, array('user_login' => $user_profile['email'], 'user_pass' => wp_hash_password($random_password), 'user_email' => $user_profile['email'], 'user_registered' => current_time('mysql')), array('%s', '%s', '%s', '%s'));
                        $ID = $wpdb->insert_id;
                        if (!is_wp_error($ID)) {
                            //              wp_new_user_notification($ID, $random_password);
                            $to = $user_profile['email'];
                            $subject = 'Tài khoản của bạn đã được xác thực';
                            $body = 'Chào ' . $user_profile['name'] . '<br/>
              Việc đăng ký trên Myclass.vn đã được xác thực. Sau đây là thông tin tài khoản của bạn: <br /><br />
              Tên đăng nhập: ' . $user_profile['email'] . ' <br/>
              Mật khẩu: ' . $random_password . '<br/><br />
              Bạn hãy đăng nhập vào itclass.vn để tham gia các khóa học Lập Trình tốt nhất, mang tính thực tiễn cao của chúng tôi. <br />
              Thân mến <br />
              <a href="http://itclass.vn">Myclass.vn</a>';
                            $headers = array('Content-Type: text/html; charset=UTF-8');
                            wp_mail($to, $subject, $body, $headers);
                            $user_info = get_userdata($ID);
                            wp_update_user(array('ID' => $ID, 'display_name' => $user_profile['name'], 'user_nicename' => $sanitized_user_login, 'first_name' => $user_profile['first_name'], 'last_name' => $user_profile['last_name']));
                            //update_user_meta( $ID, 'new_fb_default_password', $user_info->user_pass);
                            do_action('nextend_fb_user_registered', $ID, $user_profile, $facebook);
                        } else {
                            return;
                        }
                    }
                    if ($ID) {
                        $wpdb->insert($wpdb->prefix . 'social_users', array('ID' => $ID, 'type' => 'fb', 'identifier' => $user_profile['id']), array('%d', '%s', '%s'));
                    }
                    if (isset($new_fb_settings['fb_redirect_reg']) && $new_fb_settings['fb_redirect_reg'] != '' && $new_fb_settings['fb_redirect_reg'] != 'auto') {
                        set_site_transient(nextend_uniqid() . '_fb_r', $new_fb_settings['fb_redirect_reg'], 3600);
                    }
                }
                if ($ID) {
                    // Login
                    $secure_cookie = is_ssl();
                    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, array());
                    global $auth_secure_cookie;
                    // XXX ugly hack to pass this to wp_authenticate_cookie
                    $auth_secure_cookie = $secure_cookie;
                    wp_set_auth_cookie($ID, true, $secure_cookie);
                    $user_info = get_userdata($ID);
                    update_user_meta($ID, 'fb_profile_picture', 'https://graph.facebook.com/' . $user_profile['id'] . '/picture?type=large');
                    do_action('wp_login', $user_info->user_login, $user_info);
                    update_user_meta($ID, 'fb_user_access_token', $facebook->getAccessToken());
                    do_action('nextend_fb_user_logged_in', $ID, $user_profile, $facebook);
                }
            } else {
                $current_user = wp_get_current_user();
                if ($current_user->ID == $ID) {
                    // It was a simple login
                } elseif ($ID === NULL) {
                    // Let's connect the accout to the current user!
                    $wpdb->insert($wpdb->prefix . 'social_users', array('ID' => $current_user->ID, 'type' => 'fb', 'identifier' => $user_profile['id']), array('%d', '%s', '%s'));
                    update_user_meta($current_user->ID, 'fb_user_access_token', $facebook->getAccessToken());
                    do_action('nextend_fb_user_account_linked', $ID, $user_profile, $facebook);
                    $user_info = wp_get_current_user();
                    set_site_transient($user_info->ID . '_new_fb_admin_notice', __('Your Facebook profile is successfully linked with your account. Now you can sign in with Facebook easily.', 'nextend-facebook-connect'), 3600);
                } else {
                    $user_info = wp_get_current_user();
                    set_site_transient($user_info->ID . '_new_fb_admin_notice', __('This Facebook profile is already linked with other account. Linking process failed!', 'nextend-facebook-connect'), 3600);
                }
            }
            new_fb_redirect();
        } catch (FacebookApiException $e) {
            echo 'Caught exception: ', $e->getMessage(), "\n";
            //echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
            $user = null;
        }
        exit;
    } else {
        if (!isset($_GET['code'])) {
            $scope = apply_filters('nextend_fb_scope', 'email');
            $loginUrl = $facebook->getLoginUrl(array('scope' => $scope));
            if (isset($new_fb_settings['fb_redirect']) && $new_fb_settings['fb_redirect'] != '' && $new_fb_settings['fb_redirect'] != 'auto') {
                $_GET['redirect'] = $new_fb_settings['fb_redirect'];
            }
            if (isset($_GET['redirect'])) {
                set_site_transient(nextend_uniqid() . '_fb_r', $_GET['redirect'], 3600);
            }
            $redirect = get_site_transient(nextend_uniqid() . '_fb_r');
            if ($redirect == '' || $redirect == new_fb_login_url()) {
                set_site_transient(nextend_uniqid() . '_fb_r', site_url(), 3600);
            }
            header('Location: ' . $loginUrl);
            exit;
        } else {
            echo "Login error!";
            exit;
        }
    }
}
function new_fb_login_action()
{
    global $wp, $wpdb, $new_fb_settings;
    if (isset($_GET['action']) && $_GET['action'] == 'unlink') {
        $user_info = wp_get_current_user();
        if ($user_info->ID) {
            $wpdb->query($wpdb->prepare('DELETE FROM ' . $wpdb->prefix . 'social_users
          WHERE ID = %d
          AND type = \'fb\'', $user_info->ID));
            set_site_transient($user_info->ID . '_new_fb_admin_notice', __('Your Facebook profile is successfully unlinked from your account.', 'nextend-facebook-connect'), 3600);
        }
        new_fb_redirect();
    }
    require_once dirname(__FILE__) . '/sdk/init.php';
    $user = $facebook->getUser();
    if ($user && is_user_logged_in() && new_fb_is_user_connected()) {
        new_fb_redirect();
    } elseif ($user) {
        // Register or Login
        try {
            // Proceed knowing you have a logged in user who's authenticated.
            $user_profile = $facebook->api('/me');
            $ID = $wpdb->get_var($wpdb->prepare('
        SELECT ID FROM ' . $wpdb->prefix . 'social_users WHERE type = "fb" AND identifier = "%d"
      ', $user_profile['id']));
            if (!get_user_by('id', $ID)) {
                $wpdb->query($wpdb->prepare('
          DELETE FROM ' . $wpdb->prefix . 'social_users WHERE ID = "%d"
        ', $ID));
                $ID = null;
            }
            if (!is_user_logged_in()) {
                if ($ID == NULL) {
                    // Register
                    if (!isset($user_profile['email'])) {
                        $user_profile['email'] = $user_profile['username'] . '@facebook.com';
                    }
                    $ID = email_exists($user_profile['email']);
                    if ($ID == false) {
                        // Real register
                        require_once ABSPATH . WPINC . '/registration.php';
                        $random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
                        if (!isset($new_fb_settings['fb_user_prefix'])) {
                            $new_fb_settings['fb_user_prefix'] = 'facebook-';
                        }
                        $sanitized_user_login = sanitize_user($new_fb_settings['fb_user_prefix'] . $user_profile['username']);
                        if (!validate_username($sanitized_user_login)) {
                            $sanitized_user_login = sanitize_user('facebook' . $user_profile['id']);
                        }
                        $defaul_user_name = $sanitized_user_login;
                        $i = 1;
                        while (username_exists($sanitized_user_login)) {
                            $sanitized_user_login = $defaul_user_name . $i;
                            $i++;
                        }
                        $ID = wp_create_user($sanitized_user_login, $random_password, $user_profile['email']);
                        if (!is_wp_error($ID)) {
                            wp_new_user_notification($ID, $random_password);
                            $user_info = get_userdata($ID);
                            wp_update_user(array('ID' => $ID, 'display_name' => $user_profile['name'], 'first_name' => $user_profile['first_name'], 'last_name' => $user_profile['last_name']));
                            //update_user_meta( $ID, 'new_fb_default_password', $user_info->user_pass);
                            do_action('nextend_fb_user_registered', $ID, $user_profile, $facebook);
                        } else {
                            return;
                        }
                    }
                    if ($ID) {
                        $wpdb->insert($wpdb->prefix . 'social_users', array('ID' => $ID, 'type' => 'fb', 'identifier' => $user_profile['id']), array('%d', '%s', '%s'));
                    }
                    if (isset($new_fb_settings['fb_redirect_reg']) && $new_fb_settings['fb_redirect_reg'] != '' && $new_fb_settings['fb_redirect_reg'] != 'auto') {
                        set_site_transient(nextend_uniqid() . '_fb_r', $new_twitter_settings['twitter_redirect_reg'], 3600);
                    }
                }
                if ($ID) {
                    // Login
                    $secure_cookie = is_ssl();
                    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, array());
                    global $auth_secure_cookie;
                    // XXX ugly hack to pass this to wp_authenticate_cookie
                    $auth_secure_cookie = $secure_cookie;
                    wp_set_auth_cookie($ID, true, $secure_cookie);
                    $user_info = get_userdata($ID);
                    update_user_meta($ID, 'fb_profile_picture', 'https://graph.facebook.com/' . $user_profile['id'] . '/picture?type=large');
                    do_action('wp_login', $user_info->user_login, $user_info);
                    update_user_meta($ID, 'fb_user_access_token', $facebook->getAccessToken());
                    do_action('nextend_fb_user_logged_in', $ID, $user_profile, $facebook);
                }
            } else {
                $current_user = wp_get_current_user();
                if ($current_user->ID == $ID) {
                    // It was a simple login
                } elseif ($ID === NULL) {
                    // Let's connect the accout to the current user!
                    $wpdb->insert($wpdb->prefix . 'social_users', array('ID' => $current_user->ID, 'type' => 'fb', 'identifier' => $user_profile['id']), array('%d', '%s', '%s'));
                    update_user_meta($current_user->ID, 'fb_user_access_token', $facebook->getAccessToken());
                    do_action('nextend_fb_user_account_linked', $ID, $user_profile, $facebook);
                    $user_info = wp_get_current_user();
                    set_site_transient($user_info->ID . '_new_fb_admin_notice', __('Your Facebook profile is successfully linked with your account. Now you can sign in with Facebook easily.', 'nextend-facebook-connect'), 3600);
                } else {
                    $user_info = wp_get_current_user();
                    set_site_transient($user_info->ID . '_new_fb_admin_notice', __('This Facebook profile is already linked with other account. Linking process failed!', 'nextend-facebook-connect'), 3600);
                }
            }
            new_fb_redirect();
        } catch (FacebookApiException $e) {
            echo 'Caught exception: ', $e->getMessage(), "\n";
            //echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
            $user = null;
        }
        exit;
    } else {
        if (!isset($_GET['code'])) {
            $scope = apply_filters('nextend_fb_scope', 'email');
            $loginUrl = $facebook->getLoginUrl(array('scope' => $scope));
            if (isset($new_fb_settings['fb_redirect']) && $new_fb_settings['fb_redirect'] != '' && $new_fb_settings['fb_redirect'] != 'auto') {
                $_GET['redirect'] = $new_fb_settings['fb_redirect'];
            }
            if (isset($_GET['redirect'])) {
                set_site_transient(nextend_uniqid() . '_fb_r', $_GET['redirect'], 3600);
            }
            $redirect = get_site_transient(nextend_uniqid() . '_fb_r');
            if ($redirect == '' || $redirect == new_fb_login_url()) {
                set_site_transient(nextend_uniqid() . '_fb_r', site_url(), 3600);
            }
            header('Location: ' . $loginUrl);
            exit;
        } else {
            echo "Login error!";
            exit;
        }
    }
}