%PDF- %PDF-
Direktori : /home/bitrix/www/local/components/p4/user.registration/ |
Current File : /home/bitrix/www/local/components/p4/user.registration/component.php |
<?php /* @global CMain $APPLICATION */ /* @global CUser $USER */ /* @var array $arParams */ /* @var array $arResult */ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die(); } $arResult[] = array(); $arResult['APP_RESULT'] = array('OK' => true, 'ERROR_MESSAGE' => ''); AddEventHandler('main', 'OnBeforeUserRegister', array('P4UserRegisterHelper', 'OnBeforeUserRegisterHandler')); if ('POST' == $_SERVER['REQUEST_METHOD'] && 'Y' == $arParams['CONFIRM_EMAIL']) { if ($USER->IsAuthorized()) { $rsUser = CUser::GetByID($USER->GetID()); if ($arUser = $rsUser->GetNext()) { if ($_REQUEST['CONFIRM_CODE'] !== $arUser['CONFIRM_CODE']) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('CONFIRM_USER_CODE_INCORRECT'); } else { $obUser = new CUser(); $obUser->Update($arUser['ID'], array( 'CONFIRM_CODE' => '', 'EMAIL' => $arUser['WORK_MAILBOX'], 'PERSONAL_MAILBOX' => $arUser['WORK_MAILBOX'], 'WORK_MAILBOX' => '', )); $arResult['APP_RESULT']['OK'] = true; } } else { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('SEND_CONFIRM_CODE_LOGIN_NOT_FOUND'); } } else { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('USER_NOT_AUTHORIZED'); } } elseif ('POST' == $_SERVER['REQUEST_METHOD'] && !$USER->IsAuthorized()) { if ('Y' === $arParams['REG_BY_PHONE']) { // Проверка наличия данных if (0 == strlen($_REQUEST['PHONE']) || 0 == strlen($_REQUEST['PASSWORD'])) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('REGISTER_FIELD_REQUIRED'); } else { // Проверка уникальности телефона UF_USER_PHONE $res = CUser::GetList($b = '', $o = '', array('=UF_USER_PHONE' => $_REQUEST['PHONE'])); if ($res->Fetch()) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('REGISTER_USER_WITH_PHONE_EXIST'); } else { /* * Профилю будет присвоено временное имя "ID_соль" (например, 13456_cdjkncfkdvb). * И e-mail 'no-reply@port4lio.pro', письмо о регистрации уйдет в на no-reply@port4lio.pro. */ $CUser = new CUser(); $result = $CUser->Register( $_REQUEST['PHONE'], $_REQUEST['PHONE'].'_'.uniqid().'_fake', '', $_REQUEST['PASSWORD'], $_REQUEST['PASSWORD'], $_REQUEST['PHONE'].'-no-reply@port4lio.pro' ); $arResult['APP_RESULT']['OK'] = 'OK' == $result['TYPE']; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= $result['MESSAGE']; $arResult['APP_RESULT']['PHPSESSID'] = session_id(); if ('OK' == $result['TYPE']) { $userID = $result['ID']; $CUser->Update($userID, array( 'ACTIVE' => 'Y', 'UF_USER_PHONE' => $_REQUEST['PHONE'], 'PERSONAL_MOBILE' => $_REQUEST['PHONE'], )); $dbUser = CUser::GetByID($userID); $arUser = $dbUser->Fetch(); $section = isset($_REQUEST['SECTION']) ? $_REQUEST['SECTION'] : 'models'; $USER->Authorize($userID); if (!($profileID = P4UserRegisterHelper::createProfile($arUser, $el, $section))) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] = $el->LAST_ERROR; } $arResult['APP_RESULT']['ID'] = $userID; $arResult['APP_RESULT']['PROFILE']['NAME'] = $arUser['NAME']; $arResult['APP_RESULT']['PROFILE']['LAST_NAME'] = $arUser['LAST_NAME']; $arResult['APP_RESULT']['PROFILE']['AVATAR'] = ''; $arResult['APP_RESULT']['PROFILE']['TYPE'] = 'FREE'; $arResult['APP_RESULT']['PROFILE']['SECTION'] = $section; $arResult['APP_RESULT']['PROFILE']['UF_USER_PHONE'] = $_REQUEST['PHONE']; $arResult['APP_RESULT']['PROFILE']['IS_APPROVED'] = 'N'; // $arResult['APP_RESULT']['PROFILE']['BDATE'] = time(); // более не нужно } } } } elseif ('Y' == $arParams['CONFIRM']) { $rsUser = CUser::GetByLogin(trim($_REQUEST['LOGIN'])); if ($arUser = $rsUser->GetNext()) { if ('Y' === $arUser['ACTIVE']) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('CONFIRM_USER_ALREADY_CONFIRMED'); } elseif ($_REQUEST['CONFIRM_CODE'] !== $arUser['CONFIRM_CODE']) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('CONFIRM_USER_CODE_INCORRECT'); } else { $obUser = new CUser(); $obUser->Update($arUser['ID'], array('ACTIVE' => 'Y', 'CONFIRM_CODE' => '', 'UF_P4_ADM_NEWS' => 1, 'UF_P4_CC_NOTIF' => 1)); $arResult['APP_RESULT']['OK'] = true; $USER->Authorize($arUser['ID']); if (!($profileID = P4UserRegisterHelper::createProfile($arUser, $el))) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] = $el->LAST_ERROR; } else { $arResult['APP_RESULT']['ID'] = $arUser['ID']; $arResult['APP_RESULT']['PROFILE']['NAME'] = $arUser['NAME']; $arResult['APP_RESULT']['PROFILE']['LAST_NAME'] = $arUser['LAST_NAME']; $arResult['APP_RESULT']['PROFILE']['AVATAR'] = ''; $arResult['APP_RESULT']['PROFILE']['PROFILE_ID'] = $profileID; $arResult['APP_RESULT']['PROFILE']['TYPE'] = 'FREE'; } } } else { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('CONFIRM_USER_LOGIN_NOT_FOUND'); } } elseif ('Y' === $arParams['SEND_CONFIRM_CODE']) { $rsUser = CUser::GetByLogin(trim($_REQUEST['LOGIN'])); if ($arUser = $rsUser->GetNext()) { if ('Y' == $arUser['ACTIVE']) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('SEND_CONFIRM_CODE_USER_ALREADY_CONFIRMED'); } else { $confirmCode = generate_confirm_code(5); $obUser = new CUser(); $obUser->Update($arUser['ID'], array('CONFIRM_CODE' => $confirmCode)); $arFields = array( 'USER_ID' => $arUser['ID'], 'LOGIN' => $arUser['LOGIN'], 'EMAIL' => $arUser['EMAIL'], 'NAME' => $arUser['NAME'], 'LAST_NAME' => $arUser['LAST_NAME'], 'CONFIRM_CODE' => $confirmCode, ); $event = new CEvent(); $event->SendImmediate('NEW_USER_APP_CONFIRM', SITE_ID, $arFields); $arResult['APP_RESULT']['OK'] = true; } } else { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('SEND_CONFIRM_CODE_LOGIN_NOT_FOUND'); } } elseif ('Y' === $arParams['SEND_PWD']) { $byPhone = isset($_REQUEST['PHONE']) && strlen($_REQUEST['PHONE']) > 0; if ($byPhone) { $by = 'id'; $order = 'desc'; $rsUser = CUser::GetList($by, $order, array( 'UF_USER_PHONE' => $_REQUEST['PHONE'], 'ACTIVE' => 'Y', )); } else { $rsUser = CUser::GetByLogin(trim($byPhone ? $_REQUEST['PHONE'] : $_REQUEST['LOGIN'])); } if ($arUser = $rsUser->GetNext()) { $newPass = generate_password(6, true); $obUser = new CUser(); $obUser->Update($arUser['ID'], array('PASSWORD' => $newPass, 'CONFIRM_PASSWORD' => $newPass)); $arFields = array( 'USER_ID' => $arUser['ID'], 'LOGIN' => $arUser['LOGIN'], 'EMAIL' => $arUser['EMAIL'], 'NAME' => $arUser['NAME'], 'LAST_NAME' => $arUser['LAST_NAME'], 'CHECKWORD' => $newPass, ); if ($byPhone) { $url = 'https://rest.nexmo.com/sms/json?'.http_build_query( [ 'api_key' => 'c6565829', 'api_secret' => '6ecc07d0342a4e0b', 'to' => '+'.$_REQUEST['PHONE'], 'from' => 'port4lio', 'type' => 'unicode', 'text' => GetMessage('SEND_PASSWORD_SMS').$newPass, ] ); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); // $arResult['APP_RESULT']['ERROR_MESSAGE'] = $response; } else { $event = new CEvent(); $event->SendImmediate('USER_PASS_REQUEST', SITE_ID, $arFields); } $arResult['APP_RESULT']['OK'] = true; } else { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('FORGOT_PSW_LOGIN_NOT_FOUND'); } } else { // Проверка наличия данных if (0 == strlen($_REQUEST['EMAIL']) || 0 == strlen($_REQUEST['NAME']) || 0 == strlen($_REQUEST['LAST_NAME'])) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('REGISTER_FIELD_REQUIRED'); } else { // Проверка уникальности e-mail $res = CUser::GetList($b = '', $o = '', array('=EMAIL' => $_REQUEST['EMAIL'])); if ($res->Fetch()) { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= GetMessage('REGISTER_USER_WITH_EMAIL_EXIST'); } else { // Регистрация пользователя $isPassGen = false; // Генерация пароля if ('Y' == $_REQUEST['GENERATE_PASSWORD']) { $isPassGen = true; $_REQUEST['PASSWORD'] = generate_password(6); } $user = new CUser(); $result = $user->Register( $_REQUEST['EMAIL'], $_REQUEST['NAME'], $_REQUEST['LAST_NAME'], $_REQUEST['PASSWORD'], $_REQUEST['PASSWORD'], $_REQUEST['EMAIL'] ); if ('OK' == $result['TYPE'] && intval($result['ID']) > 0) { $userID = $result['ID']; $user->Update($userID, array('PERSONAL_MAILBOX' => $_REQUEST['EMAIL'])); $arResult['APP_RESULT']['ID'] = $userID; $arResult['APP_RESULT']['PROFILE']['NAME'] = $_REQUEST['NAME']; $arResult['APP_RESULT']['PROFILE']['LAST_NAME'] = $_REQUEST['LAST_NAME']; $arResult['APP_RESULT']['PROFILE']['AVATAR'] = ''; $arResult['APP_RESULT']['PROFILE']['TYPE'] = 'FREE'; $arResult['APP_RESULT']['PROFILE']['BDATE'] = time(); $arResult['APP_RESULT']['OK'] = 'OK' == $result['TYPE']; $arResult['APP_RESULT']['ERROR_MESSAGE'] .= $result['MESSAGE']; $arResult['APP_RESULT']['PHPSESSID'] = session_id(); } else { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] = GetMessage('UNKNOW_USER_REG_ERROR'); } } } } } else { $arResult['APP_RESULT']['OK'] = false; $arResult['APP_RESULT']['ERROR_MESSAGE'] = GetMessage('ONLY_POST_REQUEST_SUPPORTED'); } $this->IncludeComponentTemplate();