/** * Used to get facebook user data * * @access public * @return void */ function facebook_connect_get_fbdata() { elgg_load_library('facebook'); $fbData = array(); $facebook = facebookservice_api(); $helper = $facebook->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); } catch (Facebook\Exceptions\FacebookResponseException $e) { // When Graph returns an error echo '2. Graph returned an error: ' . $e->getMessage(); exit; } catch (Facebook\Exceptions\FacebookSDKException $e) { // When validation fails or other local issues echo '2. Facebook SDK returned an error: ' . $e->getMessage(); exit; } if (!isset($accessToken)) { if ($helper->getError()) { header('HTTP/1.0 401 Unauthorized'); echo "Error: " . $helper->getError() . "\n"; echo "Error Code: " . $helper->getErrorCode() . "\n"; echo "Error Reason: " . $helper->getErrorReason() . "\n"; echo "Error Description: " . $helper->getErrorDescription() . "\n"; } else { header('HTTP/1.0 400 Bad Request'); echo 'Bad request'; } exit; } $fbData['user_profile']['accessToken'] = (string) $accessToken; try { // Returns a `Facebook\FacebookResponse` object $response = $facebook->get('/me?fields=id,name,email', $accessToken); } catch (Facebook\Exceptions\FacebookResponseException $e) { echo '1. Graph returned an error: ' . $e->getMessage(); exit; } catch (Facebook\Exceptions\FacebookSDKException $e) { echo '1. Facebook SDK returned an error: ' . $e->getMessage(); exit; } $user = $response->getGraphUser(); $fbData['user_profile']['id'] = $user['id']; $fbData['user_profile']['name'] = $user['name']; $fbData['user_profile']['email'] = $user->getProperty("email"); $u = explode("@", $fbData['user_profile']['email']); $fbData['user_profile']['username'] = $u[0]; if ($user) { $fbData['loginUrl'] = ''; } else { $permissions = ['public_profile', 'email']; if (facebook_connect_allow_post_on_facebook()) { $permissions = ['public_profile', 'email', 'publish_actions']; } $fbData['loginUrl'] = $helper->getLoginUrl(elgg_get_site_url() . 'facebook_connect/login/', $permissions); } return $fbData; }
/** * Used to create user with facebook data * * @access public * @param array $fbData facebook data of user * @return void */ function facebook_connect_create_update_user($fbData) { elgg_load_library('facebook'); // need facebook account credentials // backward compatibility for stalled-development FBConnect plugin $user = FALSE; $facebook_users = elgg_get_entities_from_metadata(array('type' => 'user', 'metadata_name_value_pairs' => array('name' => 'facebook_uid', 'value' => $fbData['user_profile']['id']))); if (is_array($facebook_users) && count($facebook_users) == 1) { // convert existing account $user = $facebook_users[0]; // remove unused metadata remove_metadata($user->getGUID(), 'facebook_uid'); remove_metadata($user->getGUID(), 'facebook_controlled_profile'); } // create new user if (!$user) { // check new registration allowed if (!facebook_connect_allow_new_users_with_facebook()) { register_error(elgg_echo('registerdisabled')); forward(); } $email = $fbData['user_profile']['email']; $users = get_user_by_email($email); if (!$users) { // Elgg-ify facebook credentials if (!empty($fbData['user_profile']['username'])) { $username = $fbData['user_profile']['username']; } else { $username = str_replace(' ', '', strtolower($fbData['user_profile']['name'])); } $usernameTmp = $username; while (get_user_by_username($username)) { $username = $usernameTmp . '_' . rand(1000, 9999); } $password = generate_random_cleartext_password(); $name = $fbData['user_profile']['name']; $user = new ElggUser(); $user->username = $username; $user->name = $name; $user->email = $email; $user->access_id = ACCESS_PUBLIC; $user->salt = generate_random_cleartext_password(); $user->password = generate_user_password($user, $password); $user->owner_guid = 0; $user->container_guid = 0; $user->last_action = date("Y-m-d"); $user->last_login = date("Y-m-d"); $user->validated = 1; $user->validated_method = 'facebook'; $user->language = 'en'; if (!$user->save()) { register_error(elgg_echo('registerbad')); forward(); } else { // send mail to user send_user_password_mail($email, $name, $username, $password); // post status on facebook if (facebook_connect_allow_post_on_facebook()) { facebook_connect_post_status($fbData); } // pull in facebook icon $url = 'https://graph.facebook.com/' . $fbData['user_profile']['id'] . '/picture?type=large'; facebook_connect_update_user_avatar($user, $url); } } else { $user = $users[0]; } } // set facebook services tokens elgg_set_plugin_user_setting('uid', $fbData['user_profile']['id'], $user->guid); elgg_set_plugin_user_setting('access_token', $fbData['user_profile']['accessToken'], $user->guid); return $user; }
/** * Used to post synched status on facebook. * * @access public * @param array $fbData facebook data of user * @return void */ function facebook_connect_post_status($fbData) { if (facebook_connect_allow_post_on_facebook()) { elgg_load_library('facebook'); $facebook = facebookservice_api(); $site = elgg_get_site_entity(); $uid = $fbData['user_profile']['id']; $permissions = $facebook->api('/' . $uid . '/permissions'); if (array_key_exists('publish_stream', $permissions['data'][0])) { $message = $user->name . ' just synched his/her facebook account with ' . $site->name; $params = array('link' => elgg_get_site_url(), 'message' => $message, 'picture' => elgg_get_site_url() . '_graphics/elgg_logo.png', 'description' => $site->name . ' is the social network for connecting people.'); try { $status = $facebook->api('/' . $uid . '/feed/', 'POST', $params); } catch (FacebookApiException $e) { } } } }
<?php elgg_load_library('facebook'); $fbData = array(); $facebook = facebookservice_api(); $helper = $facebook->getRedirectLoginHelper(); $permissions = ['public_profile', 'email']; if (facebook_connect_allow_post_on_facebook()) { $permissions = ['public_profile', 'email', 'publish_actions']; } $callback = elgg_get_site_url() . 'facebook_connect/login'; $url = $helper->getLoginUrl($callback, $permissions); $img_url = elgg_get_site_url() . 'mod/facebook_connect/graphics/facebook_login.png'; $login = <<<__HTML <div id="login_with_facebook"> \t<a href="{$url}" target="_self"><img src="{$img_url}" alt="Facebook" /></a> </div> __HTML; echo $login;