function socialsLogin() { $allowed_providers = array('facebook'); $provider = strtolower($this->request('provider')); if ($provider and in_array($provider, $allowed_providers)) { $hybridauth = new Hybrid_Auth($this->_config); $service = $hybridauth->authenticate($provider); if ($service->isUserConnected()) { $user_profile = $service->getUserProfile(); if ($user_profile->identifier) { $modelUsers = rad_instances::get('model_core_users'); $modelUsers->setState('u_' . $provider . '_id', $user_profile->identifier); $user = $modelUsers->getItem(); if (!$user) { if ($user_profile->email) { $modelUsers->clearState(); $modelUsers->setState('u_email', $user_profile->email); $user = $modelUsers->getItem(); if ($user) { //add social identifier to user switch ($provider) { case 'facebook': $user->u_facebook_id = $user_profile->identifier; break; case 'twitter': $user->u_twitter_id = $user_profile->identifier; break; } $modelUsers->updateItem($user); } } if (!$user) { // create new user $user = new struct_core_users(); $user->u_login = $user_profile->displayName ? $user_profile->displayName : ''; $user->u_email = $user_profile->email ? $user_profile->email : ''; $user->u_group = $this->_treestart; $user->u_email_confirmed = 1; $user->u_fio = $user_profile->firstName ? $user_profile->firstName : ''; $user->u_fio = $user_profile->lastName ? $user->u_fio . ' ' . $user_profile->lastName : $user->u_fio; $user->u_address = $user_profile->country ? $user_profile->country : ''; $user->u_address = $user_profile->region ? $user->u_address . ', ' . $user_profile->region : $user->u_address; $user->u_address = $user_profile->city ? $user->u_address . ', ' . $user_profile->city : $user->u_address; $user->u_address = $user_profile->address ? $user->u_address . ', ' . $user_profile->address : $user->u_address; $user->u_phone = $user_profile->phone ? $user_profile->phone : ''; $user->u_subscribe_active = 0; switch ($provider) { case 'facebook': $user->u_facebook_id = $user_profile->identifier; break; case 'twitter': $user->u_twitter_id = $user_profile->identifier; break; } $modelUsers->insertItem($user); $user->u_id = $modelUsers->inserted_id(); } } if (rad_session::social_login($user_profile->identifier, $provider)) { $this->setVar('user', $this->getCurrentUser()); $this->redirect($this->makeURL('action=soc_refresh')); } else { //login incorrect $this->setVar('message_error', $this->lang('error.session.message')); $this->setVar('req', $this->getAllRequest()); } } } else { throw new Exception("Can not connect to the service!"); } } else { $this->securityHoleAlert(__FILE__, __LINE__, $this->getClassName()); } }