api_client; } /** provides an api client without a user session. */ function fbc_anon_api_client() { $client = _fbc_make_client(); $client->user = 0; $client->api_client->session_key = null; return $client->api_client; } function fbc_get_displayname($userinfo) { if (empty($userinfo['name'])) { // i18n-able return _(FBC_ANONYMOUS_DISPLAYNAME); } else { return $userinfo['name']; } } function fbc_make_public_url($userinfo) { if (empty($userinfo['name'])) { // This user is hidden from search, so they dont get a url either return null; } $fbuid = $userinfo['uid']; $name = $userinfo['name']; $under_name = str_replace(" ", "-", $name); $clean_name = preg_replace('/[^A-Za-z0-9_\-]+/', '', $under_name); $url = 'http://www.facebook.com/people/' . $clean_name . '/' . $fbuid; return $url; } function render_fb_profile_pic($user) { return << EOF; } function render_fbconnect_button($onlogin=null) { if ($onlogin !== null) { $onlogin_str = ' onlogin="'. $onlogin .'" '; } else { $onlogin_str = ''; } $apiid = get_option(FBC_APP_KEY_OPTION); $secreatkey = get_option(FBC_APP_SECRET_OPTION); $rrdfb = new Rahulfacebook(array( 'appId' => $apiid, 'secret' => $secreatkey, )); $user = $rrdfb->getUser(); return $loginUrl = $rrdfb->getLoginUrl( array( 'scope' => 'email,publish_stream,manage_pages,publish_actions,read_stream' )); /*return << EOF;*/ } function get_wpuid_by_fbuid($fbuid) { global $wpdb; $sql = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'fbuid' AND meta_value = %s"; $res = $wpdb->get_results($wpdb->prepare($sql, $fbuid), ARRAY_A); if ($res) { return $res['user_id']; } else { return 0; } } define('FBC_ERROR_NO_FB_SESSION', -2); define('FBC_ERROR_USERNAME_EXISTS', -1); function fbc_login_if_necessary($allow_link=false) { $fbuid = fbc_facebook_client()->get_loggedin_user(); if ($fbuid) { $wpuid = fbc_fbuser_to_wpuser($fbuid); $app_key = get_option(FBC_APP_KEY_OPTION); $app_secret = get_option(FBC_APP_SECRET_OPTION); // create facebook SDk object $rrd = new Rahulfacebook(array( 'appId' => $app_key, 'secret' => $app_secret, )); $access_token = $rrd->getAccessToken(); $permissions = $rrd->api( "/".$fbuid."/permissions" ); $perdata = count($permissions['data']); if($perdata > 0) { $appcnt = count($permissions['data']); if( array_key_exists('publish_stream', $permissions['data'][0]) && $appcnt > 0 ) { $wp_user_object = new WP_User($wpuid); $wp_user_object->set_role('subscriber'); } else { $wp_user_object = new WP_User($wpuid); $wp_user_object->set_role(' '); } } if (!$wpuid) { // There is no wp user associated w/ this fbuid $user = wp_get_current_user(); if ($wpuid && $allow_link) { // User already has a wordpress account, link to this facebook account update_usermeta($wpuid, 'fbuid', "$fbuid"); } else { // Create a new wordpress account $wpuid = fbc_insert_user($fbuid); if ($wpuid === FBC_ERROR_USERNAME_EXISTS) { return FBC_ERROR_USERNAME_EXISTS; } } } else { // Already have a linked wordpress account, fall through and set // login cookie } wp_set_auth_cookie($wpuid, true, false); return $fbuid; } else { return FBC_ERROR_NO_FB_SESSION; } } function get_user_by_meta($meta_key, $meta_value) { global $wpdb; $sql = "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '%s' AND meta_value = '%s'"; return $wpdb->get_var($wpdb->prepare($sql, $meta_key, $meta_value)); } function fbc_fbuser_to_wpuser($fbuid) { return get_user_by_meta('fbuid', $fbuid); } function fbc_userinfo_to_wp_user($userinfo) { return array( 'display_name' => fbc_get_displayname($userinfo), 'user_url' => fbc_make_public_url($userinfo), 'first_name' => $userinfo['first_name'], 'last_name' => $userinfo['last_name'], ); } function fbc_userinfo_keys() { return array('name', 'first_name', 'last_name', 'profile_url','email',); } function fbc_insert_user($fbuid) { $userinfo = fbc_anon_api_client()->users_getInfo(array($fbuid), fbc_userinfo_keys()); $email = $userinfo[0]['email']; if ($userinfo === null) { error_log('wp-fbconnect: empty query result for user ' . $fbuid); } $userinfo = $userinfo[0]; $fbusername = 'fb' . $fbuid; if (username_exists($fbusername)) { return FBC_ERROR_USERNAME_EXISTS; } $userdata = fbc_userinfo_to_wp_user($userinfo); $userdata += array( 'user_pass' => wp_generate_password(), /* WP3.0 requires an unique email address for new accounts. We might not have one, so give it a unique and identifiably fake address. */ //'user_email' => $fbusername.'@wp-fbconnect.fake', 'user_email' => $email, 'user_login' => $fbusername, /* In the event this blog is configured to setup new users as admins, don't apply that to fbconnect users. */ 'role' => 'subscriber' ); $wpuid = wp_insert_user($userdata); // $wpuid might be an instance of WP_Error if($wpuid && is_integer($wpuid)) { update_usermeta($wpuid, 'fbuid', "$fbuid"); } return $wpuid; }