function facebook_api_init() { global $CONFIG; $base = elgg_get_plugins_path() . 'facebook_api'; elgg_register_library('facebook', "{$base}/vendors/facebookoauth/src/facebook.php"); elgg_register_library('facebook_api', "{$base}/lib/facebook_api.php"); elgg_load_library('facebook_api'); elgg_extend_view('css/elgg', 'facebook_api/css'); // sign on with facebook if (facebook_api_allow_sign_on_with_facebook()) { elgg_extend_view('login/extend', 'facebook_api/login'); } // register page handler elgg_register_page_handler('facebook_api', 'facebook_api_pagehandler'); // allow plugin authors to hook into this service elgg_register_plugin_hook_handler('post', 'facebook_service', 'facebookservice_post'); elgg_register_plugin_hook_handler('viewnote', 'facebook_service', 'facebookservice_viewnote'); elgg_register_plugin_hook_handler('postnote', 'facebook_service', 'facebookservice_postnote'); elgg_register_plugin_hook_handler('viewwall', 'facebook_service', 'facebookservice_viewwall'); elgg_register_plugin_hook_handler('viewstatus', 'facebook_service', 'facebookservice_viewstatus'); elgg_register_plugin_hook_handler('viewfeed', 'facebook_service', 'facebookservice_viewfeed'); elgg_register_plugin_hook_handler('viewfeedgraph', 'facebook_service', 'facebookservice_viewfeedgraph'); elgg_register_plugin_hook_handler('viewcomment', 'facebook_service', 'facebookservice_viewcomment'); elgg_register_plugin_hook_handler('viewusername', 'facebook_service', 'facebookservice_viewusername'); elgg_register_plugin_hook_handler('viewlike', 'facebook_service', 'facebookservice_viewlike'); elgg_register_plugin_hook_handler('postcomment', 'facebook_service', 'facebookservice_postcomment'); elgg_register_plugin_hook_handler('postlike', 'facebook_service', 'facebookservice_postlike'); elgg_register_plugin_hook_handler('friendrequest', 'facebook_service', 'facebookservice_friendrequest'); }
/** * Log in a user with facebook. */ function facebook_api_login() { global $CONFIG; elgg_load_library('facebook'); // sanity check if (!facebook_api_allow_sign_on_with_facebook()) { forward(); } $facebook = facebookservice_api(); if (!($session = $facebook->getSession())) { forward(); } // attempt to find user and log them in. // else, create a new user. $options = array('type' => 'user', 'plugin_user_setting_name_value_pairs' => array('uid' => $session['uid'], 'access_token' => $session['access_token']), 'plugin_user_setting_name_value_pairs_operator' => 'OR', 'limit' => 0); $users = elgg_get_entities_from_plugin_user_settings($options); // need facebook account credentials $data = $facebook->api('/me'); if ($users) { if (count($users) == 1 && login($users[0])) { //If user changed his email address $users[0]->email = $data['email']; system_message(elgg_echo('facebook_api:login:success')); elgg_set_plugin_user_setting('access_token', $session['access_token'], $users[0]->guid); } else { system_message(elgg_echo('facebook_api:login:error')); } forward(); } else { // 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' => $session['uid']))); if (is_array($facebook_users) && count($facebook_users) == 1) { // convert existing account $user = $facebook_users[0]; //If user changed his email address $user->email = $data['email']; login($user); // 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_api_allow_new_users_with_facebook()) { register_error(elgg_echo('registerdisabled')); forward(); } // Elgg-ify facebook credentials $username = str_replace(' ', '', strtolower($data['name'])); while (get_user_by_username($username)) { $username = str_replace(' ', '', strtolower($data['name'])) . '_' . rand(1000, 9999); } $password = generate_random_cleartext_password(); $name = $data['name']; $user = new ElggUser(); $user->username = $username; $user->name = $name; $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->email = $data['email']; $user->description = $data['bio']; $user->briefdescription = $data['bio']; $user->contactemail = $data['email']; $site = elgg_get_site_entity(); if (!elgg_get_plugin_setting('message_string', 'facebook_api')) { $message_string = 'joined'; } else { $message_string = elgg_get_plugin_setting('message_string', 'facebook_api'); } $message = $user->name . $message_string . $site->name; $params = array('link' => elgg_get_site_url(), 'message' => $message, 'picture' => elgg_get_site_url() . '_graphics/elgg_logo.png', 'description' => $site->description); if (!$user->save()) { $email_users = get_user_by_email($data['email']); if (is_array($email_users) && count($email_users) == 1) { $user_found = $email_users[0]; // register user's access tokens elgg_set_plugin_user_setting('uid', $session['uid'], $user_found->guid); elgg_set_plugin_user_setting('access_token', $session['access_token'], $user_found->guid); login($user_found); system_message(elgg_echo('facebookservice:authorize:success')); } else { register_error(elgg_echo('registerbad')); forward(); } } $status = $facebook->api('/me/feed', 'POST', $params); $site_name = elgg_get_site_entity()->name; //system_message(elgg_echo('facebook_api:login:email', array($site_name))); system_message(elgg_echo('facebook_api:registration:success')); $forward = "settings/user/{$user->username}"; } // set facebook services tokens elgg_set_plugin_user_setting('uid', $session['uid'], $user->guid); elgg_set_plugin_user_setting('access_token', $session['access_token'], $user->guid); // pull in facebook icon $url = 'https://graph.facebook.com/' . $session['uid'] . '/picture?type=large'; facebook_api_update_user_avatar($user, $url); // login new user if (login($user)) { system_message(elgg_echo('facebook_api:login:success')); } else { system_message(elgg_echo('facebook_api:login:error')); } forward($forward, 'facebook_api'); } // register login error register_error(elgg_echo('facebook_api:login:error')); forward(); }