/** * Регистрация на сайте и в таблице 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']; } }