%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();