} else { $forward_url = "?{$query}"; } } if ($session_handle && $session_handle != \Elgg\HybridAuth\Session::DEFAULT_HANDLE) { forward($forward_url); } // Does this user profile exist? $options = array('type' => 'user', 'plugin_id' => 'elgg_hybridauth', 'plugin_user_setting_name_value_pairs' => array('name' => $ha_session->getAuthRecordName($provider), 'value' => $profile->identifier), 'limit' => 0); $users = elgg_get_entities_from_plugin_user_settings($options); if (elgg_is_logged_in()) { $logged_in = elgg_get_logged_in_user_entity(); if (!$users || $users[0]->guid == $logged_in->guid) { // User already has an account // Linking provider profile to an existing account $ha_session->addAuthRecord($provider, $profile); system_message(elgg_echo('hybridauth:link:provider', array($provider->getName()))); forward($forward_url); } else { // Another user has already linked this profile $ha_session->deauthenticate($provider, false); echo elgg_view('resources/hybridauth/error', array('provider' => $provider->getName(), 'error' => elgg_echo('hybridauth:link:provider:error', array($provider->getName())), 'retry' => false)); return; } } if (!$users) { // try one more time to match a user with plugin setting $testusers = get_user_by_email($profile->email); foreach ($testusers as $t) { $users = array(); if ($profile->identifier == elgg_get_plugin_user_setting($ha_session->getAuthRecordName($provider), $t->guid, 'elgg_hybridauth')) {
/** * Add an additional provider to the list of providers the user is authenticated with * * @param string $event "login" * @param string $type "user" * @param ElggUser $user User entity * @return boolean */ function elgg_hybridauth_aux_provider($event, $type, $user) { $aux_provider = get_input('aux_provider'); $aux_provider_uid = get_input('aux_provider_uid'); if ($aux_provider && $aux_provider_uid) { $ha_session = new \Elgg\HybridAuth\Session($user); $provider = $ha_session->getProvider($aux_provider); if ($provider) { $ha_session->addAuthRecord($provider, $aux_provider_uid); system_message(elgg_echo('hybridauth:link:provider', array($provider->getName()))); } } return true; }