prefix . "social_users"; $sql = "CREATE TABLE $table_name ( `ID` int(11) NOT NULL, `type` varchar(20) NOT NULL, `identifier` varchar(100) NOT NULL, KEY `ID` (`ID`,`type`) );"; require_once (ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'new_google_connect_install'); /* Adding query vars for the WP parser */ function new_google_add_query_var() { global $wp; $wp->add_query_var('editProfileRedirect'); $wp->add_query_var('loginGoogle'); } add_filter('init', 'new_google_add_query_var'); /* ----------------------------------------------------------------------------- Main function to handle the Sign in/Register/Linking process ----------------------------------------------------------------------------- */ /* Compatibility for older versions */ add_action('parse_request', 'new_google_login_compat'); function new_google_login_compat() { global $wp; if ($wp->request == 'loginGoogle' || isset($wp->query_vars['loginGoogle'])) { new_google_login_action(); } } /* For login page */ add_action('login_init', 'new_google_login'); function new_google_login() { if (isset($_REQUEST['loginGoogle']) && $_REQUEST['loginGoogle'] == '1') { new_google_login_action(); } } function new_google_login_action() { global $wp, $wpdb, $new_google_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 = \'google\'', $user_info->ID)); set_site_transient($user_info->ID.'_new_google_admin_notice',__('Your Google profile is successfully unlinked from your account.', 'nextend-google-connect'), 3600); } new_google_redirect(); } include (dirname(__FILE__) . '/sdk/init.php'); if (isset($_GET['code'])) { if (isset($new_google_settings['google_redirect']) && $new_google_settings['google_redirect'] != '' && $new_google_settings['google_redirect'] != 'auto') { $_GET['redirect'] = $new_google_settings['google_redirect']; } set_site_transient( nextend_uniqid().'_google_r', $_GET['redirect'], 3600); $client->authenticate(); $access_token = $client->getAccessToken(); set_site_transient( nextend_uniqid().'_google_at', $access_token, 3600); header('Location: ' . filter_var(new_google_login_url() , FILTER_SANITIZE_URL)); exit; } $access_token = get_site_transient( nextend_uniqid().'_google_at'); if ($access_token !== false) { $client->setAccessToken($access_token); } if (isset($_REQUEST['logout'])) { delete_site_transient( nextend_uniqid().'_google_at'); $client->revokeToken(); } if ($client->getAccessToken()) { $u = $oauth2->userinfo->get(); // The access token may have been updated lazily. set_site_transient( nextend_uniqid().'_google_at', $client->getAccessToken(), 3600); // These fields are currently filtered through the PHP sanitize filters. // See http://www.php.net/manual/en/filter.filters.sanitize.php $email = filter_var($u['email'], FILTER_SANITIZE_EMAIL); $ID = $wpdb->get_var($wpdb->prepare(' SELECT ID FROM ' . $wpdb->prefix . 'social_users WHERE type = "google" AND identifier = "%s" ', $u['id'])); if (!get_user_by('id', $ID)) { $wpdb->query($wpdb->prepare(' DELETE FROM ' . $wpdb->prefix . 'social_users WHERE ID = "%s" ', $ID)); $ID = null; } if (!is_user_logged_in()) { if ($ID == NULL) { // Register $ID = email_exists($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_google_settings['google_user_prefix'])) $new_google_settings['google_user_prefix'] = 'Google - '; $sanitized_user_login = sanitize_user($new_google_settings['google_user_prefix'] . $u['name']); if (!validate_username($sanitized_user_login)) { $sanitized_user_login = sanitize_user('google' . $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, $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' => $u['name'], 'first_name' => $u['given_name'], 'last_name' => $u['family_name'], 'googleplus' => $u['link'] )); update_user_meta($ID, 'new_google_default_password', $user_info->user_pass); do_action('nextend_google_user_registered', $ID, $u, $oauth2); } else { return; } } if ($ID) { $wpdb->insert($wpdb->prefix . 'social_users', array( 'ID' => $ID, 'type' => 'google', 'identifier' => $u['id'] ) , array( '%d', '%s', '%s' )); } if (isset($new_google_settings['google_redirect_reg']) && $new_google_settings['google_redirect_reg'] != '' && $new_google_settings['google_redirect_reg'] != 'auto') { set_site_transient( nextend_uniqid().'_google_r', $new_google_settings['google_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); do_action('wp_login', $user_info->user_login, $user_info); do_action('nextend_google_user_logged_in', $ID, $u, $oauth2); // @Jamie Bainbridge fix for Google Avatars $userJSON = @file_get_contents('http://picasaweb.google.com/data/entry/api/user/' . $u['id'] .'?alt=json'); if($userJSON){ $userArray = json_decode($userJSON, true); if($userArray && isset($userArray["entry"]) && isset($userArray["entry"]["gphoto\$thumbnail"]) && isset($userArray["entry"]["gphoto\$thumbnail"]["\$t"])){ update_user_meta($ID, 'google_profile_picture', $userArray["entry"]["gphoto\$thumbnail"]["\$t"]); } } } } else { if (new_google_is_user_connected()) { // It was a simple login } elseif ($ID === NULL) { // Let's connect the account to the current user! $current_user = wp_get_current_user(); $wpdb->insert($wpdb->prefix . 'social_users', array( 'ID' => $current_user->ID, 'type' => 'google', 'identifier' => $u['id'] ) , array( '%d', '%s', '%s' )); do_action('nextend_google_user_account_linked', $ID, $u, $oauth2); $user_info = wp_get_current_user(); set_site_transient($user_info->ID.'_new_google_admin_notice',__('Your Google profile is successfully linked with your account. Now you can sign in with Google easily.', 'nextend-google-connect'), 3600); } else { $user_info = wp_get_current_user(); set_site_transient($user_info->ID.'_new_google_admin_notice',__('This Google profile is already linked with other account. Linking process failed!', 'nextend-google-connect'), 3600); } } } else { if (isset($new_google_settings['google_redirect']) && $new_google_settings['google_redirect'] != '' && $new_google_settings['google_redirect'] != 'auto') { $_GET['redirect'] = $new_google_settings['google_redirect']; } if (isset($_GET['redirect'])) { set_site_transient( nextend_uniqid().'_google_r', $_GET['redirect'], 3600); } $redirect = get_site_transient( nextend_uniqid().'_google_r'); if ($redirect || $redirect == new_google_login_url()) { $redirect = site_url(); set_site_transient( nextend_uniqid().'_google_r', $redirect, 3600); } header('LOCATION: ' . $client->createAuthUrl()); exit; } new_google_redirect(); } /* Is the current user connected the Google profile? */ function new_google_is_user_connected() { global $wpdb; $current_user = wp_get_current_user(); $ID = $wpdb->get_var($wpdb->prepare(' SELECT identifier FROM ' . $wpdb->prefix . 'social_users WHERE type = "google" AND ID = "%d" ', $current_user->ID)); if ($ID === NULL) return false; return $ID; } /* Connect Field in the Profile page */ function new_add_google_connect_field() { global $new_is_social_header; if ($new_is_social_header === NULL) { ?>
' . $notice . '