Пример #1
0
 /**
  * Регистрация на сайте и в таблице uLogin
  *
  * @param Array $u_user - данные о пользователе, полученные от uLogin
  * @param int $in_db - при значении 1 необходимо переписать данные в таблице uLogin
  *
  * @return bool|int|Error
  */
 public static function RegistrationUser($u_user, $in_db = 0, $arParams)
 {
     global $APPLICATION;
     if (!isset($u_user['email'])) {
         ShowMessage(array("TYPE" => "ERROR", "MESSAGE" => 'Через данную форму выполнить регистрацию невозможно. Сообщите администратору сайта о следующей ошибке:
         Необходимо указать "email" в возвращаемых полях uLogin'));
         die('<br/><a href="' . $_POST['backurl'] . '">Назад</a>');
     }
     global $USER;
     global $DB;
     $rsUsers = CUser::GetList($by = "id", $order = "desc", array("EMAIL" => $u_user['email']));
     $arUser = $rsUsers->GetNext();
     if ($in_db == 1) {
         $result = $DB->Query('DELETE FROM ulogin_users WHERE identity = "' . urlencode($u_user['identity']) . '"');
     }
     //		// $check_m_user == true -> есть пользователь с таким email
     $check_m_user = $arUser['ID'] > 0 ? true : false;
     $current_user = $USER->GetID();
     if ($check_m_user == false) {
         $u_user['first_name'] = isset($u_user['first_name']) ? $APPLICATION->ConvertCharset($u_user['first_name'], "UTF-8", SITE_CHARSET) : "";
         $u_user['last_name'] = isset($u_user['last_name']) ? $APPLICATION->ConvertCharset($u_user['last_name'], "UTF-8", SITE_CHARSET) : "";
         $u_user['nickname'] = isset($u_user['nickname']) ? $APPLICATION->ConvertCharset($u_user['nickname'], "UTF-8", SITE_CHARSET) : "";
         $u_user['b_date'] = isset($u_user['b_date']) ? $u_user['b_date'] : "";
         // регистрируем пользователя
         list($d, $m, $y) = explode('.', $u_user['bdate']);
         //можно просто представить в другом формате стандартной функцией php
         $longLogin = uLogin::ulogin_generateNickname($u_user['first_name'], $u_user['last_name']);
         $arResult['USER'] = array('EMAIL' => $u_user['email'], 'PERSONAL_GENDER' => $u_user['sex'] == 2 ? 'M' : 'F', 'PERSONAL_CITY' => isset($u_user['city']) ? $u_user['city'] : '', 'PERSONAL_BIRTHDAY' => $d . '.' . $m . '.' . $y, 'EXTERNAL_AUTH_ID' => $u_user['identity'], 'PHOTO' => $u_user['photo'], 'PHOTO_BIG' => $u_user['photo_big'], 'NETWORK' => $u_user['network']);
         $GroupID = "5";
         $passw = RandString();
         if (is_array($arParams["GROUP_ID"])) {
             $GroupID = $arParams["GROUP_ID"];
         }
         if (!is_array($GroupID)) {
             $GroupID = array($GroupID);
         }
         $arIMAGE = '';
         if (isset($u_user['photo'])) {
             $imageContent = file_get_contents($u_user['photo']);
             $ext = strtolower(substr($u_user['photo'], -3));
             if (!in_array($ext, array('jpg', 'jpeg', 'png', 'gif', 'bmp'))) {
                 $ext = 'jpg';
             }
             $tmpName = $tmpName = md5(rand()) . '.' . $ext;
             $tmpName = $_SERVER["DOCUMENT_ROOT"] . "/images/" . $tmpName;
             file_put_contents($tmpName, $imageContent);
             $arIMAGE = CFile::MakeFileArray($tmpName);
             $arIMAGE["MODULE_ID"] = "main";
         }
         $user = new CUser();
         $arFields = array("NAME" => $u_user['first_name'], "LAST_NAME" => $u_user['last_name'], "EMAIL" => $u_user['email'], "LOGIN" => $longLogin, "ACTIVE" => "Y", "GROUP_ID" => array(5), "PASSWORD" => $passw, "CONFIRM_PASSWORD" => $passw, "PERSONAL_PHOTO" => $arIMAGE);
         $UserID = $user->Add($arFields);
         if ($UserID > 0) {
             $result = $DB->Query('INSERT INTO ulogin_users (id, userid, identity, network) VALUES (NULL,"' . $UserID . '","' . urlencode($u_user['identity']) . '","' . $u_user['network'] . '")');
         } else {
             ShowMessage(array("TYPE" => "ERROR", "MESSAGE" => 'Ошибка регистрации: Не удалось зарегистрировать пользователя.'));
             die('<br/><a href="' . $_POST['backurl'] . '">Назад</a>');
         }
         if ($UserID && $arParams['SEND_EMAIL'] == 'Y') {
             $arEventFields = array('USER_ID' => $UserID, 'LOGIN' => $arFields['LOGIN'], 'EMAIL' => $arFields['EMAIL'], 'NAME' => $arFields['NAME'], 'LAST_NAME' => $arFields['LAST_NAME'], 'USER_IP' => '', 'USER_HOST' => '');
             $event = new CEvent();
             $msg = $event->SendImmediate("NEW_USER", SITE_ID, $arEventFields);
             ShowMessage($msg);
         }
         unlink($tmpName);
         return $UserID;
     } else {
         if (!isset($u_user["verified_email"]) || intval($u_user["verified_email"]) != 1) {
             die('<script src="//ulogin.ru/js/ulogin.js"  type="text/javascript"></script><script type="text/javascript">uLogin.mergeAccounts("' . $_POST['token'] . '")</script>' . 'Электронный адрес данного аккаунта совпадает с электронным адресом существующего пользователя. Требуется подтверждение на владение указанным email.' . '<br/><a href="' . $_POST['backurl'] . '">Назад</a>');
         }
         if (intval($u_user["verified_email"]) == 1) {
             $user_id = $arUser['ID'];
             $other_u = $DB->Query('SELECT identity,network FROM ulogin_users WHERE userid = "' . $user_id . '"');
             $other = array();
             while ($row = $other_u->Fetch()) {
                 $ident = $row['identity'];
                 $key = $row['network'];
                 $other[$key] = $ident;
             }
             if ($other) {
                 if (!isset($u_user['merge_account'])) {
                     die('<script src="//ulogin.ru/js/ulogin.js"  type="text/javascript"></script><script type="text/javascript">uLogin.mergeAccounts("' . $_POST['token'] . '","' . $other[$key] . '")</script>' . 'С данным аккаунтом уже связаны данные из другой социальной сети. Требуется привязка новой учётной записи социальной сети к этому аккаунту' . '<br/><a href="' . $_POST['backurl'] . '">Назад</a>');
                 }
             }
         }
         $result = $DB->Query('INSERT INTO ulogin_users (id, userid, identity, network) VALUES (NULL,"' . $arUser['ID'] . '","' . urlencode($u_user['identity']) . '","' . $u_user['network'] . '")');
         $result = $result->GetNext();
         return $arUser['ID'];
     }
 }