%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/local/components/p4/user.registration/
Upload File :
Create Path :
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();

Zerion Mini Shell 1.0