function socialConnectLogin($uid = false, $network_code = false) { require_once _base_ . '/lib/lib.usermanager.php'; $res = ''; $lang = DoceboLanguage::createInstance('login'); $user_manager = new UserManager(); if (!empty($uid) && !empty($network_code)) { session_regenerate_id(); $_SESSION['connect_social']['uid'] = $uid; $_SESSION['connect_social']['network_code'] = $network_code; } $can_connect = false; if (isset($_SESSION['connect_social']) && isset($_SESSION['connect_social']['uid']) && !empty($_SESSION['connect_social']['uid'])) { // read data from session, in case we are on the second step (login attempt) $uid = $_SESSION['connect_social']['uid']; $network_code = $_SESSION['connect_social']['network_code']; $can_connect = true; } // check form submission: if (isset($_POST['undo'])) { // go back to index Util::jump_to('index.php'); } else { if (isset($_POST['login']) && !$can_connect) { // we don't have the social uid to be connected with user account.. Util::jump_to('index.php?modname=login&op=social_connect_login&err=2'); } else { if (isset($_POST['login'])) { // login and connect account $user = DoceboUser::createDoceboUserFromLogin(Get::pReq('login_userid', DOTY_STRING), Get::pReq('login_pwd', DOTY_STRING), 'public_area'); if ($user) { DoceboUser::setupUser($user); $social = new Social(); $social->connectAccount($network_code, $uid); unset($_SESSION['connect_social']); Util::jump_to('index.php?r=lms/elearning/show'); } else { Util::jump_to('index.php?modname=login&op=social_connect_login&err=1'); } } } } switch (Get::gReq('err', DOTY_INT, 0)) { case 1: $res .= UIFeedback::error(Lang::t('_NOACCESS', 'login'), true); break; case 2: $res .= UIFeedback::error(Lang::t('_NO_SOCIAL_ACCOUNT_TO_CONNECT', 'login') . ' <a href="index.php">' . Lang::t('_TRY_AGAIN', 'login') . '</a>', true); break; } $GLOBALS['page']->add(getTitleArea($lang->def('_LOGIN'), 'login') . '<div class="std_block">' . getBackUi('index.php', $lang->def('_BACK')), 'content'); if ($can_connect) { $res .= Get::img('social/' . $network_code . '-24.png') . ' '; $res .= str_replace('[network_code]', Lang::t($network_code, 'social'), Lang::t('_YOU_ARE_CONNECTING_SOCIAL_ACCOUNT', 'social')) . " <b>" . $uid . "</b>"; } $res .= Form::openForm('scl_form', 'index.php?modname=login&op=social_connect_login') . Form::openElementSpace() . Form::getTextfield(Lang::t('_USERNAME', 'login'), 'login_userid', 'login_userid', 255) . Form::getPassword(Lang::t('_PASSWORD', 'login'), 'login_pwd', 'login_pwd', 255) . Form::closeElementSpace() . Form::openButtonSpace() . Form::getButton('login', 'login', Lang::t('_LOGIN', 'login')) . Form::getButton('undo', 'undo', Lang::t('_UNDO', 'login')) . Form::closeButtonSpace() . Form::closeForm(); $GLOBALS['page']->add($res, 'content'); // std_block $GLOBALS['page']->add('</div>', 'content'); // std_block }
$user_data = $social->getGoogleUserInfo(); if (!empty($user_data['email'])) { if (Docebo::user()->isAnonymous()) { // sign in the user $user = DoceboUser::createDoceboUserFromField('google_id', $user_data['email'], 'public_area'); if ($user) { DoceboUser::setupUser($user); Util::jump_to('index.php?r=lms/elearning/show'); } else { //Util::jump_to('index.php?access_fail=2'); socialConnectLogin($user_data['email'], 'google'); return; } } else { // user is already logged in, so connect the account with user $social->connectAccount('google', $user_data['email']); Util::jump_to('index.php?r=lms/elearning/show'); die; } print_r($user_data); } else { Util::jump_to('index.php?access_fail=2'); } } else { Util::jump_to('index.php?access_fail=3'); } die; } } catch (ErrorException $e) { echo $e->getMessage(); }
Util::jump_to(Get::rel_path('base') . '/index.php?modname=login&op=register'); die; } if (Docebo::user()->isAnonymous()) { // sign in the user $user = DoceboUser::createDoceboUserFromField('facebook_id', $objUserInfo["id"], 'public_area'); if ($user) { DoceboUser::setupUser($user); Util::jump_to('index.php?r=lms/elearning/show'); } else { socialConnectLogin($objUserInfo["id"], 'facebook'); return; } } else { // user is already logged in, so connect the account with user $res = $social->connectAccount('facebook', $objUserInfo["id"]); if ($res == true) { Util::jump_to(_folder_lms_ . '/index.php?' . 'feedback_code=_SOCIALCONNECTOK&feedback_type=inf&feedback_extra=' . $objUserInfo["id"]); } else { Util::jump_to(_folder_lms_ . '/index.php?' . 'feedback_code=_SOCIALCONNECTKO&feedback_type=err&feedback_extra=' . $objUserInfo["id"]); } } } else { // no mail in fields Util::jump_to('index.php?access_fail=4'); } break; // 3. $_REQUEST['error'] -> RETURN CANCEL FROM FACEBOOK AUTH // 3. $_REQUEST['error'] -> RETURN CANCEL FROM FACEBOOK AUTH case isset($_REQUEST['error_code']) && $_REQUEST['error_code'] == '4201': // error_message contiene la risposta User canceled the Dialog flow
function _opt_in($options, $platform, $opt_link) { $social = new Social(); $lang =& DoceboLanguage::createInstance('register', $platform); // Check for error $out = ''; $error = $this->_checkField($_POST, $options, $platform, true); if ($error['error']) { $this->error = true; return '<div class="reg_err_data">' . $error['msg'] . '</div>'; } // Insert temporary $random_code = md5($_POST['register']['userid'] . mt_rand() . mt_rand() . mt_rand()); // register as temporary user and send mail $acl_man =& Docebo::user()->getAclManager(); $iduser = $acl_man->registerTempUser($_POST['register']['userid'], $_POST['register']['firstname'], $_POST['register']['lastname'], $_POST['register']['pwd'], $_POST['register']['email'], $random_code); if ($iduser === false) { $out .= '<div class="reg_err_data">' . $lang->def('_OPERATION_FAILURE') . '</div>'; $this->error = true; return $out; } // facebook register: if ($social->isActive('facebook')) { if (isset($_SESSION['fb_info']) && is_array($_SESSION['fb_info'])) { $social = new Social(); $social->connectAccount('facebook', $_SESSION['fb_info']['id'], $iduser, true); unset($_SESSION['fb_info']); } } // ---- // add base inscription policy $enrollrules = new EnrollrulesAlms(); $enrollrules->newRules('_NEW_USER', array($iduser), Lang::get()); // subscribe to groups ----------------------------------------- if (isset($_POST['group_sel_implode'])) { $groups = explode(',', $_POST['group_sel_implode']); while (list(, $idst) = each($groups)) { $acl_man->addToGroup($idst, $iduser); // FORMA: added the inscription policy $enrollrules = new EnrollrulesAlms(); $enrollrules->applyRulesMultiLang('_LOG_USERS_TO_GROUP', array((string) $iduser), false, (int) $idst, true); // END FORMA } } //if the user had enter a code we must check if there are folder related to it and add the folder's field $registration_code_type = Get::sett('registration_code_type', '0'); $code_is_mandatory = Get::sett('mandatory_code', 'off') == 'on'; $reg_code = Get::req('reg_code', DOTY_MIXED, ''); if ($registration_code_type === 'custom') { $reg_code = 'change_by_custom_operation'; } $array_folder = false; $uma = new UsermanagementAdm(); $reg_code_res = $this->processRegistrationCode($acl_man, $uma, $iduser, $reg_code, $registration_code_type); if ($reg_code_res['success'] == false) { $acl_man->deleteTempUser($iduser); $this->error = true; return '<div class="reg_err_data">' . $reg_code_res['msg'] . '</div>'; } // save language selected require_once _base_ . '/lib/lib.preference.php'; $preference = new UserPreferences($iduser); $preference->setPreference('ui.language', Lang::get()); // Save fields $extra_field = new FieldList(); $extra_field->setFieldEntryTable($GLOBALS['prefix_fw'] . '_field_userentry'); $extra_field->storeFieldsForUser($iduser); // Send mail $admin_mail = $options['mail_sender']; // FIX BUG 399 //$link = str_replace('&', '&', $opt_link.( strpos($opt_link, '?') === false ? '?' : '&' ).'random_code='.$random_code); $link = Get::sett('url', '') . 'index.php?modname=login&op=register_opt&random_code=' . $random_code; // END FIX BUG 399 $text = $lang->def('_REG_MAIL_TEXT'); $text = str_replace('[userid]', $_POST['register']['userid'], $text); $text = str_replace('[firstname]', $_POST['register']['firstname'], $text); $text = str_replace('[lastname]', $_POST['register']['lastname'], $text); $text = str_replace('[password]', $_POST['register']['pwd'], $text); $text = str_replace('[link]', '' . $link . '', $text); $text = str_replace('[hour]', $options['hour_request_limit'], $text); $text = stripslashes($text); //check register_type != self (include all previous cases except the new one "self without opt-in") if (strcmp($options['register_type'], 'self') != 0) { require_once _base_ . '/lib/lib.mailer.php'; $mailer = DoceboMailer::getInstance(); if (!$mailer->SendMail($admin_mail, $_POST['register']['email'], Lang::t('_MAIL_OBJECT', 'register'), $text, false, array(MAIL_REPLYTO => $admin_mail, MAIL_SENDER_ACLNAME => false))) { if ($registration_code_type == 'code_module') { // ok, the registration has failed, let's remove the user association form the code $code_manager = new CodeManager(); $code_manager->resetUserAssociation($code, $iduser); } $acl_man->deleteTempUser($iduser); $this->error = true; $out .= '<div class="reg_err_data">' . $lang->def('_OPERATION_FAILURE') . '</div>'; } else { $out .= '<div class="reg_success">' . $lang->def('_REG_SUCCESS') . '</div>'; } } //end $_GET['random_code'] = $random_code; $_GET['idst'] = $iduser; //check register_type = self if (strcmp($options['register_type'], 'self') == 0) { $text_self = $lang->def('_REG_MAIL_TEXT_SELF'); $text_self = str_replace('[userid]', $_POST['register']['userid'], $text_self); $text_self = str_replace('[firstname]', $_POST['register']['firstname'], $text_self); $text_self = str_replace('[lastname]', $_POST['register']['lastname'], $text_self); $text_self = str_replace('[password]', $_POST['register']['pwd'], $text_self); require_once _base_ . '/lib/lib.mailer.php'; $mailer = DoceboMailer::getInstance(); if (!$mailer->SendMail($admin_mail, $_POST['register']['email'], Lang::t('_MAIL_OBJECT_SELF', 'register'), $text_self, false, false)) { $out .= '<div class="reg_err_data">' . $lang->def('_OPERATION_FAILURE') . '</div>'; } else { $this->confirmRegister($this->_platform, $options); $out .= '<div class="reg_success">' . $lang->def('_REG_SUCCESS_SELF') . '</div>'; } } //end return $out; }
$token = $googleService->requestAccessToken($_GET['code']); $objUserInfo = json_decode($googleService->request('https://www.googleapis.com/oauth2/v1/userinfo'), true); if (!empty($objUserInfo["email"])) { if (Docebo::user()->isAnonymous()) { // sign in the user $user = DoceboUser::createDoceboUserFromField('google_id', $objUserInfo["email"], 'public_area'); if ($user) { DoceboUser::setupUser($user); Util::jump_to('index.php?r=lms/elearning/show'); } else { socialConnectLogin($objUserInfo["email"], 'google'); return; } } else { // user is already logged in, so connect the account with user $res = $social->connectAccount('google', $objUserInfo["email"]); if ($res == true) { Util::jump_to(_folder_lms_ . '/index.php?' . 'feedback_code=_SOCIALCONNECTOK&feedback_type=inf&feedback_extra=' . $objUserInfo["email"]); } else { Util::jump_to(_folder_lms_ . '/index.php?' . 'feedback_code=_SOCIALCONNECTKO&feedback_type=err&feedback_extra=' . $objUserInfo["email"]); } } } else { // no mail in fields Util::jump_to('index.php?access_fail=4'); } break; // 3. $_REQUEST['error'] -> RETURN CANCEL FROM GOOGLE AUTH // 3. $_REQUEST['error'] -> RETURN CANCEL FROM GOOGLE AUTH case isset($_REQUEST['error']) && $_REQUEST['error'] == 'access_denied': Util::jump_to('index.php?access_fail=6');