/**
 * 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;
}
Example #3
0
/**
 * 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;