1
0
Fork 0
mirror of synced 2025-04-20 01:21:01 +00:00

addpart of postreg checking

This commit is contained in:
Sergey Chazov 2020-10-26 16:15:09 +03:00
parent 910aa28c4f
commit 3610fdf1f9
6 changed files with 468 additions and 338 deletions

View file

@ -2,6 +2,8 @@
use Intaro\RetailCrm\Component\ServiceLocator;
use Intaro\RetailCrm\Service\CollectorCookieExtractor;
use Intaro\RetailCrm\Service\LoyaltyService;
use Intaro\RetailCrm\Service\UserAccountService;
use Intaro\RetailCrm\Service\UserVerificationService;
use Intaro\RetailCrm\Vendor\Doctrine\Common\Annotations\AnnotationReader;
use Intaro\RetailCrm\Vendor\Doctrine\Common\Annotations\AnnotationRegistry;
@ -29,5 +31,7 @@ ServiceLocator::registerServices([
Logger::class,
AnnotationReader::class,
CollectorCookieExtractor::class,
UserVerificationService::class
UserVerificationService::class,
UserAccountService::class,
LoyaltyService::class
]);

View file

@ -15,7 +15,7 @@ $arResult['LOYALTY_STATUS'] = ConfigProvider::getLoyaltyProgramStatus();
global $USER;
//Активна ПЛ ?
if ($arResult['LOYALTY_STATUS'] === 'Y' && $USER->IsAuthorized()) {
$service = new LoyaltyService();
$service = new LoyaltyService();
$arResult['LP_REGISTER'] = $service->checkRegInLp();
}

View file

@ -1,37 +1,37 @@
<?
/**
* Bitrix Framework
* @package bitrix
* @package bitrix
* @subpackage main
* @copyright 2001-2014 Bitrix
* @copyright 2001-2014 Bitrix
*/
/**
* Bitrix vars
* @global CMain $APPLICATION
* @global CUser $USER
* @param array $arParams
* @param array $arResult
* @param array $arParams
* @param array $arResult
* @param CBitrixComponentTemplate $this
* @global CUser $USER
* @global CMain $APPLICATION
*/
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
die();
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
die();
}
if($arResult["SHOW_SMS_FIELD"] == true)
{
CJSCore::Init('phone_auth');
if ($arResult["SHOW_SMS_FIELD"] == true) {
CJSCore::Init('phone_auth');
}
?>
<?php CUtil::InitJSCore( array('ajax' , 'jquery' , 'popup' )); ?>
<?php CUtil::InitJSCore(['ajax', 'jquery', 'popup']); ?>
<div id="uf_agree_pl_intaro_popup" style="display:none;">
<?= $arResult['AGREEMENT_LOYALTY_PROGRAM']?>
<?=$arResult['AGREEMENT_LOYALTY_PROGRAM']?>
</div>
<div id="uf_pd_proc_pl_intaro_popup" style="display:none;">
<?= $arResult['AGREEMENT_PERSONAL_DATA']?>
<?=$arResult['AGREEMENT_PERSONAL_DATA']?>
</div>
<script>
BX.ready(function(){
BX.ready(function() {
const lpAgreementPopup = new BX.PopupWindow('lp_agreement_popup', window.body, {
autoHide: true,
offsetTop: 1,
@ -45,15 +45,15 @@ if($arResult["SHOW_SMS_FIELD"] == true)
});
lpAgreementPopup.setContent(BX('uf_agree_pl_intaro_popup'));
BX.bindDelegate(
document.body, 'click', {className: 'lp_agreement_link' },
BX.proxy(function(e){
if(!e)
document.body, 'click', {className: 'lp_agreement_link'},
BX.proxy(function(e) {
if (!e)
e = window.event;
lpAgreementPopup.show();
return BX.PreventDefault(e);
}, lpAgreementPopup)
);
const personalDataAgreementPopup = new BX.PopupWindow('personal_data_agreement_popup', window.body, {
autoHide: true,
offsetTop: 1,
@ -68,8 +68,8 @@ if($arResult["SHOW_SMS_FIELD"] == true)
personalDataAgreementPopup.setContent(BX('uf_pd_proc_pl_intaro_popup'));
BX.bindDelegate(
document.body, 'click', {className: 'personal_data_agreement_link'},
BX.proxy(function(e){
if(!e)
BX.proxy(function(e) {
if (!e)
e = window.event;
personalDataAgreementPopup.show();
return BX.PreventDefault(e);
@ -79,332 +79,339 @@ if($arResult["SHOW_SMS_FIELD"] == true)
</script>
<div class="bx-auth-reg">
<?if($USER->IsAuthorized()):?>
<p><?php echo GetMessage("MAIN_REGISTER_AUTH") ?></p>
<?php if ($arResult['LOYALTY_STATUS'] === 'Y'): ?>
<?php $this->addExternalJs(SITE_TEMPLATE_PATH . '/script.js'); ?>
<?php if ($USER->IsAuthorized()): ?>
<?php if ($arResult['LP_ERRORS']): ?>
<p><?php echo GetMessage("MAIN_REGISTER_AUTH") ?></p>
<?php if ($arResult['LOYALTY_STATUS'] === 'Y'): ?>
<?php $this->addExternalJs(SITE_TEMPLATE_PATH . '/script.js'); ?>
<?php if (isset($arResult['LP_REGISTER']['msg'])) { ?>
<div id="lpRegMsg"><?=$arResult['LP_REGISTER']['msg']?></div>
<?php } ?>
<?php if (isset($arResult['LP_REGISTER']['form']['fields'])) { ?>
<div id="lpRegForm">
<div id="lpRegFormInputs">
<?php
foreach ($arResult['LP_REGISTER']['form']['fields'] as $key => $field){
?>
<label>
<input
name="<?=$key?>"
type="<?=$field['type']?>"
<?php if (isset($field['value'])) { ?>
value="<?=$field['value']?>"
<?php } ?>
>
</label>
</div>
<?php } ?>
<input type="button" onclick="<?=$arResult['LP_REGISTER']['button']['action']?>()">
<?=GetMessage('REG_LP_ERROR')?>
<?php else: ?>
<!--елси регистрация в программе лояльности прошла успешно-->
<?php if (isset($arResult['USER_FIELDS']['UF_EXT_REG_PL_INTARO']) && $arResult['USER_FIELDS']['UF_EXT_REG_PL_INTARO'] === 1): ?>
<b><?=GetMessage('SUCCESS_PL_REG')?></b>
<?php elseif ((int)$arResult['USER_FIELDS']['UF_EXT_REG_PL_INTARO'] === 0): ?>
<div id="regbody">
<b><?=GetMessage('REG_LP_MESSAGE')?></b><br>
<input type="tel" id="loyaltyRegPhone" placeholder="+7 (900) 000-00-00">
<br>
<input type="text" id="loyaltyRegCard" placeholder="<?=GetMessage('LP_CARD_NUMBER')?>">
<input type="button" onclick="addTelNumber(<?=$USER->GetID()?>)" value="<?=GetMessage('SEND')?>"/>
<br>
<div id="verificationCodeBlock" style="display: none;">
<b><?=GetMessage('SEND_VERIFICATION_CODE')?></b><br>
<input type="text" id="verificationCode" placeholder="<?=GetMessage('VERIFICATION_CODE')?>">
<input type="button" onclick="sendVerificationCode()" value="<?=GetMessage('SEND')?>"/>
</div>
<div id="msg"></div>
</div>
<?php endif; ?>
<?php } ?>
<?php endif; ?>
<?php endif; ?>
<?php else: ?>
<?
if (count($arResult["ERRORS"]) > 0):
foreach ($arResult["ERRORS"] as $key => $error) {
if (intval($key) == 0 && $key !== 0) {
$arResult["ERRORS"][$key] = str_replace("#FIELD_NAME#", "&quot;" . GetMessage("REGISTER_FIELD_" . $key) . "&quot;", $error);
}
}
ShowError(implode("<br />", $arResult["ERRORS"]));
<?php else:?>
<?
if (count($arResult["ERRORS"]) > 0):
foreach ($arResult["ERRORS"] as $key => $error)
if (intval($key) == 0 && $key !== 0)
$arResult["ERRORS"][$key] = str_replace("#FIELD_NAME#", "&quot;".GetMessage("REGISTER_FIELD_".$key)."&quot;", $error);
elseif ($arResult["USE_EMAIL_CONFIRMATION"] === "Y"):
?>
<p><? echo GetMessage("REGISTER_EMAIL_WILL_BE_SENT") ?></p>
<? endif ?>
<? if ($arResult["SHOW_SMS_FIELD"] == true): ?>
ShowError(implode("<br />", $arResult["ERRORS"]));
<form method="post" action="<?=POST_FORM_ACTION_URI?>" name="regform">
<?
if ($arResult["BACKURL"] <> ''):
?>
<input type="hidden" name="backurl" value="<?=$arResult["BACKURL"]?>"/>
<?
endif;
?>
<input type="hidden" name="SIGNED_DATA" value="<?=htmlspecialcharsbx($arResult["SIGNED_DATA"])?>"/>
<table>
<tbody>
<tr>
<td><? echo GetMessage("main_register_sms") ?><span class="starrequired">*</span></td>
<td><input size="30" type="text" name="SMS_CODE" value="<?=htmlspecialcharsbx($arResult["SMS_CODE"])?>" autocomplete="off"/></td>
</tr>
</tbody>
<tfoot>
<tr>
<td></td>
<td><input type="submit" name="code_submit_button" value="<? echo GetMessage("main_register_sms_send") ?>"/></td>
</tr>
</tfoot>
</table>
</form>
elseif($arResult["USE_EMAIL_CONFIRMATION"] === "Y"):
?>
<p><?echo GetMessage("REGISTER_EMAIL_WILL_BE_SENT")?></p>
<?endif?>
<script>
new BX.PhoneAuth({
containerId: 'bx_register_resend',
errorContainerId: 'bx_register_error',
interval: <?=$arResult["PHONE_CODE_RESEND_INTERVAL"]?>,
data:
<?=CUtil::PhpToJSObject([
'signedData' => $arResult["SIGNED_DATA"],
])?>,
onError:
function(response) {
var errorDiv = BX('bx_register_error');
var errorNode = BX.findChildByClassName(errorDiv, 'errortext');
errorNode.innerHTML = '';
for (var i = 0; i < response.errors.length; i++) {
errorNode.innerHTML = errorNode.innerHTML + BX.util.htmlspecialchars(response.errors[i].message) + '<br>';
}
errorDiv.style.display = '';
}
});
</script>
<?if($arResult["SHOW_SMS_FIELD"] == true):?>
<div id="bx_register_error" style="display:none"><? ShowError("error") ?></div>
<form method="post" action="<?=POST_FORM_ACTION_URI?>" name="regform">
<?
if($arResult["BACKURL"] <> ''):
?>
<input type="hidden" name="backurl" value="<?=$arResult["BACKURL"]?>" />
<?
endif;
?>
<input type="hidden" name="SIGNED_DATA" value="<?=htmlspecialcharsbx($arResult["SIGNED_DATA"])?>" />
<table>
<tbody>
<tr>
<td><?echo GetMessage("main_register_sms")?><span class="starrequired">*</span></td>
<td><input size="30" type="text" name="SMS_CODE" value="<?=htmlspecialcharsbx($arResult["SMS_CODE"])?>" autocomplete="off" /></td>
</tr>
</tbody>
<tfoot>
<tr>
<td></td>
<td><input type="submit" name="code_submit_button" value="<?echo GetMessage("main_register_sms_send")?>" /></td>
</tr>
</tfoot>
</table>
</form>
<div id="bx_register_resend"></div>
<? else: ?>
<script>
new BX.PhoneAuth({
containerId: 'bx_register_resend',
errorContainerId: 'bx_register_error',
interval: <?=$arResult["PHONE_CODE_RESEND_INTERVAL"]?>,
data:
<?=CUtil::PhpToJSObject([
'signedData' => $arResult["SIGNED_DATA"],
])?>,
onError:
function(response)
{
var errorDiv = BX('bx_register_error');
var errorNode = BX.findChildByClassName(errorDiv, 'errortext');
errorNode.innerHTML = '';
for(var i = 0; i < response.errors.length; i++)
{
errorNode.innerHTML = errorNode.innerHTML + BX.util.htmlspecialchars(response.errors[i].message) + '<br>';
}
errorDiv.style.display = '';
}
});
</script>
<form method="post" action="<?=POST_FORM_ACTION_URI?>" name="regform" enctype="multipart/form-data">
<?
if ($arResult["BACKURL"] <> ''):
?>
<input type="hidden" name="backurl" value="<?=$arResult["BACKURL"]?>"/>
<?
endif;
?>
<div id="bx_register_error" style="display:none"><?ShowError("error")?></div>
<div id="bx_register_resend"></div>
<?else:?>
<form method="post" action="<?=POST_FORM_ACTION_URI?>" name="regform" enctype="multipart/form-data">
<?
if($arResult["BACKURL"] <> ''):
?>
<input type="hidden" name="backurl" value="<?=$arResult["BACKURL"]?>" />
<?
endif;
?>
<table>
<thead>
<tr>
<td colspan="2"><b><?=GetMessage("AUTH_REGISTER")?></b></td>
</tr>
</thead>
<tbody>
<?foreach ($arResult["SHOW_FIELDS"] as $FIELD):?>
<?if($FIELD == "AUTO_TIME_ZONE" && $arResult["TIME_ZONE_ENABLED"] == true):?>
<tr>
<td><?echo GetMessage("main_profile_time_zones_auto")?><?if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"):?><span class="starrequired">*</span><?endif?></td>
<td>
<select name="REGISTER[AUTO_TIME_ZONE]" onchange="this.form.elements['REGISTER[TIME_ZONE]'].disabled=(this.value != 'N')">
<option value=""><?echo GetMessage("main_profile_time_zones_auto_def")?></option>
<option value="Y"<?=$arResult["VALUES"][$FIELD] == "Y" ? " selected=\"selected\"" : ""?>><?echo GetMessage("main_profile_time_zones_auto_yes")?></option>
<option value="N"<?=$arResult["VALUES"][$FIELD] == "N" ? " selected=\"selected\"" : ""?>><?echo GetMessage("main_profile_time_zones_auto_no")?></option>
</select>
</td>
</tr>
<tr>
<td><?echo GetMessage("main_profile_time_zones_zones")?></td>
<td>
<select name="REGISTER[TIME_ZONE]"<?if(!isset($_REQUEST["REGISTER"]["TIME_ZONE"])) echo 'disabled="disabled"'?>>
<?foreach($arResult["TIME_ZONE_LIST"] as $tz=>$tz_name):?>
<option value="<?=htmlspecialcharsbx($tz)?>"<?=$arResult["VALUES"]["TIME_ZONE"] == $tz ? " selected=\"selected\"" : ""?>><?=htmlspecialcharsbx($tz_name)?></option>
<?endforeach?>
</select>
</td>
</tr>
<?else:?>
<tr>
<td><?=GetMessage("REGISTER_FIELD_".$FIELD)?>:<?if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"):?><span class="starrequired">*</span><?endif?></td>
<td><?
switch ($FIELD)
{
case "PASSWORD":
?><input size="30" type="password" name="REGISTER[<?=$FIELD?>]" value="<?=$arResult["VALUES"][$FIELD]?>" autocomplete="off" class="bx-auth-input" />
<?if($arResult["SECURE_AUTH"]):?>
<span class="bx-auth-secure" id="bx_auth_secure" title="<?echo GetMessage("AUTH_SECURE_NOTE")?>" style="display:none">
<table>
<thead>
<tr>
<td colspan="2"><b><?=GetMessage("AUTH_REGISTER")?></b></td>
</tr>
</thead>
<tbody>
<? foreach ($arResult["SHOW_FIELDS"] as $FIELD): ?>
<? if ($FIELD == "AUTO_TIME_ZONE" && $arResult["TIME_ZONE_ENABLED"] == true): ?>
<tr>
<td><? echo GetMessage("main_profile_time_zones_auto") ?><? if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"): ?><span class="starrequired">*</span><? endif ?></td>
<td>
<select name="REGISTER[AUTO_TIME_ZONE]" onchange="this.form.elements['REGISTER[TIME_ZONE]'].disabled=(this.value != 'N')">
<option value=""><? echo GetMessage("main_profile_time_zones_auto_def") ?></option>
<option value="Y"<?=$arResult["VALUES"][$FIELD] == "Y" ? " selected=\"selected\"" : ""?>><? echo GetMessage("main_profile_time_zones_auto_yes") ?></option>
<option value="N"<?=$arResult["VALUES"][$FIELD] == "N" ? " selected=\"selected\"" : ""?>><? echo GetMessage("main_profile_time_zones_auto_no") ?></option>
</select>
</td>
</tr>
<tr>
<td><? echo GetMessage("main_profile_time_zones_zones") ?></td>
<td>
<select name="REGISTER[TIME_ZONE]"<? if (!isset($_REQUEST["REGISTER"]["TIME_ZONE"])) echo 'disabled="disabled"' ?>>
<? foreach ($arResult["TIME_ZONE_LIST"] as $tz => $tz_name): ?>
<option value="<?=htmlspecialcharsbx($tz)?>"<?=$arResult["VALUES"]["TIME_ZONE"]
== $tz ? " selected=\"selected\"" : ""?>><?=htmlspecialcharsbx($tz_name)?></option>
<? endforeach ?>
</select>
</td>
</tr>
<? else: ?>
<tr>
<td><?=GetMessage("REGISTER_FIELD_" . $FIELD)?>:<? if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"): ?><span class="starrequired">*</span><? endif ?></td>
<td><?
switch ($FIELD) {
case "PASSWORD":
?><input size="30" type="password" name="REGISTER[<?=$FIELD?>]" value="<?=$arResult["VALUES"][$FIELD]?>" autocomplete="off" class="bx-auth-input"/>
<? if ($arResult["SECURE_AUTH"]): ?>
<span class="bx-auth-secure" id="bx_auth_secure" title="<? echo GetMessage("AUTH_SECURE_NOTE") ?>" style="display:none">
<div class="bx-auth-secure-icon"></div>
</span>
<noscript>
<span class="bx-auth-secure" title="<?echo GetMessage("AUTH_NONSECURE_NOTE")?>">
<noscript>
<span class="bx-auth-secure" title="<? echo GetMessage("AUTH_NONSECURE_NOTE") ?>">
<div class="bx-auth-secure-icon bx-auth-secure-unlock"></div>
</span>
</noscript>
<script type="text/javascript">
document.getElementById('bx_auth_secure').style.display = 'inline-block';
</script>
<?endif?>
<?
break;
case "CONFIRM_PASSWORD":
?><input size="30" type="password" name="REGISTER[<?=$FIELD?>]" value="<?=$arResult["VALUES"][$FIELD]?>" autocomplete="off" /><?
break;
</noscript>
<script type="text/javascript">
document.getElementById('bx_auth_secure').style.display = 'inline-block';
</script>
<? endif ?>
<?
break;
case "CONFIRM_PASSWORD":
?><input size="30" type="password" name="REGISTER[<?=$FIELD?>]" value="<?=$arResult["VALUES"][$FIELD]?>" autocomplete="off" /><?
break;
case "PERSONAL_GENDER":
?><select name="REGISTER[<?=$FIELD?>]">
<option value=""><?=GetMessage("USER_DONT_KNOW")?></option>
<option value="M"<?=$arResult["VALUES"][$FIELD] == "M" ? " selected=\"selected\"" : ""?>><?=GetMessage("USER_MALE")?></option>
<option value="F"<?=$arResult["VALUES"][$FIELD] == "F" ? " selected=\"selected\"" : ""?>><?=GetMessage("USER_FEMALE")?></option>
</select><?
break;
case "PERSONAL_COUNTRY":
case "WORK_COUNTRY":
?><select name="REGISTER[<?=$FIELD?>]"><?
foreach ($arResult["COUNTRIES"]["reference_id"] as $key => $value) {
?>
<option value="<?=$value?>"<? if ($value
== $arResult["VALUES"][$FIELD]): ?> selected="selected"<? endif ?>><?=$arResult["COUNTRIES"]["reference"][$key]?></option>
<?
}
?></select><?
break;
case "PERSONAL_PHOTO":
case "WORK_LOGO":
?><input size="30" type="file" name="REGISTER_FILES_<?=$FIELD?>" /><?
break;
case "PERSONAL_NOTES":
case "WORK_NOTES":
?><textarea cols="30" rows="5" name="REGISTER[<?=$FIELD?>]"><?=$arResult["VALUES"][$FIELD]?></textarea><?
break;
default:
if ($FIELD == "PERSONAL_BIRTHDAY"):?><small><?=$arResult["DATE_FORMAT"]?></small><br/><?endif;
?><input size="30" type="text" name="REGISTER[<?=$FIELD?>]" value="<?=$arResult["VALUES"][$FIELD]?>" /><?
if ($FIELD == "PERSONAL_BIRTHDAY") {
$APPLICATION->IncludeComponent(
'bitrix:main.calendar',
'',
[
'SHOW_INPUT' => 'N',
'FORM_NAME' => 'regform',
'INPUT_NAME' => 'REGISTER[PERSONAL_BIRTHDAY]',
'SHOW_TIME' => 'N',
],
null,
["HIDE_ICONS" => "Y"]
);
}
?><?
} ?></td>
</tr>
<? endif ?>
<? endforeach ?>
<? // ********************* User properties ***************************************************?>
<? if ($arResult["USER_PROPERTIES"]["SHOW"] == "Y"): ?>
<tr>
<td colspan="2"><?=strlen(trim($arParams["USER_PROPERTY_NAME"])) > 0 ? $arParams["USER_PROPERTY_NAME"] : GetMessage("USER_TYPE_EDIT_TAB")?></td>
</tr>
<? foreach ($arResult["USER_PROPERTIES"]["DATA"] as $FIELD_NAME => $arUserField): ?>
<tr>
<td><?=$arUserField["EDIT_FORM_LABEL"]?>:<? if ($arUserField["MANDATORY"] == "Y"): ?><span class="starrequired">*</span><? endif; ?></td>
<td>
<? $APPLICATION->IncludeComponent(
"bitrix:system.field.edit",
$arUserField["USER_TYPE"]["USER_TYPE_ID"],
["bVarsFromForm" => $arResult["bVarsFromForm"], "arUserField" => $arUserField, "form_name" => "regform"], null, ["HIDE_ICONS" => "Y"]); ?></td>
</tr>
<? endforeach; ?>
<? endif; ?>
<?php if ($arResult['LOYALTY_STATUS'] === 'Y'): ?>
<tr>
<td></td>
<td>
<div class="fields boolean" id="main_UF_REG_IN_PL_INTARO">
<div class="fields boolean">
<input type="hidden" value="0" name="UF_REG_IN_PL_INTARO">
<label>
<input type="checkbox" value="1" name="UF_REG_IN_PL_INTARO" onchange="lpFieldToggle()" id="checkbox_UF_REG_IN_PL_INTARO"> <?=GetMessage("UF_REG_IN_PL_INTARO")?>
</label>
</div>
</div>
</td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td><?=GetMessage("BONUS_CARD_NUMBER")?></td>
<td><input size="30" type="text" name="UF_CARD_NUM_INTARO" value=""></td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td>
<?=GetMessage("REGISTER_FIELD_PERSONAL_PHONE")?>
</td>
<td>
<input size="30" type="text" name="REGISTER[PERSONAL_PHONE]" value>
</td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td>
<div class="fields boolean" id="main_UF_AGREE_PL_INTARO">
<div class="fields boolean">
<input type="hidden" value="0" name="UF_AGREE_PL_INTARO">
<label>
<input class="lp_agree_checkbox" type="checkbox" value="1" name="UF_AGREE_PL_INTARO"> <?=GetMessage("YES")?>
</label>
</div>
</div>
</td>
<td>
<?=GetMessage("I_AM_AGREE")?> <a class="lp_agreement_link" href="javascript:void(0)"><?=GetMessage("UF_AGREE_PL_INTARO")?></a>
</td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td>
<div class="fields boolean" id="main_UF_PD_PROC_PL_INTARO">
<div class="fields boolean"><input type="hidden" value="0" name="UF_PD_PROC_PL_INTARO">
<label>
<input class="lp_agree_checkbox" type="checkbox" value="1" name="UF_PD_PROC_PL_INTARO"> <?=GetMessage("YES")?>
</label>
</div>
</div>
</td>
<td>
<?=GetMessage("I_AM_AGREE")?> <a class="personal_data_agreement_link" href="javascript:void(0)"><?=GetMessage("UF_PD_PROC_PL_INTARO")?></a>
</td>
</tr>
<?php endif; ?>
<? // ******************** /User properties ***************************************************?>
<?
/* CAPTCHA */
if ($arResult["USE_CAPTCHA"] == "Y") {
?>
<tr>
<td colspan="2"><b><?=GetMessage("REGISTER_CAPTCHA_TITLE")?></b></td>
</tr>
<tr>
<td></td>
<td>
<input type="hidden" name="captcha_sid" value="<?=$arResult["CAPTCHA_CODE"]?>"/>
<img src="/bitrix/tools/captcha.php?captcha_sid=<?=$arResult["CAPTCHA_CODE"]?>" width="180" height="40" alt="CAPTCHA"/>
</td>
</tr>
<tr>
<td><?=GetMessage("REGISTER_CAPTCHA_PROMT")?>:<span class="starrequired">*</span></td>
<td><input type="text" name="captcha_word" maxlength="50" value="" autocomplete="off"/></td>
</tr>
<?
}
/* !CAPTCHA */
?>
</tbody>
<tfoot>
<tr>
<td></td>
<td><input type="submit" name="register_submit_button" value="<?=GetMessage("AUTH_REGISTER")?>"/></td>
</tr>
</tfoot>
</table>
</form>
case "PERSONAL_GENDER":
?><select name="REGISTER[<?=$FIELD?>]">
<option value=""><?=GetMessage("USER_DONT_KNOW")?></option>
<option value="M"<?=$arResult["VALUES"][$FIELD] == "M" ? " selected=\"selected\"" : ""?>><?=GetMessage("USER_MALE")?></option>
<option value="F"<?=$arResult["VALUES"][$FIELD] == "F" ? " selected=\"selected\"" : ""?>><?=GetMessage("USER_FEMALE")?></option>
</select><?
break;
<p><? echo $arResult["GROUP_POLICY"]["PASSWORD_REQUIREMENTS"]; ?></p>
<? endif //$arResult["SHOW_SMS_FIELD"] == true ?>
case "PERSONAL_COUNTRY":
case "WORK_COUNTRY":
?><select name="REGISTER[<?=$FIELD?>]"><?
foreach ($arResult["COUNTRIES"]["reference_id"] as $key => $value)
{
?><option value="<?=$value?>"<?if ($value == $arResult["VALUES"][$FIELD]):?> selected="selected"<?endif?>><?=$arResult["COUNTRIES"]["reference"][$key]?></option>
<?
}
?></select><?
break;
case "PERSONAL_PHOTO":
case "WORK_LOGO":
?><input size="30" type="file" name="REGISTER_FILES_<?=$FIELD?>" /><?
break;
case "PERSONAL_NOTES":
case "WORK_NOTES":
?><textarea cols="30" rows="5" name="REGISTER[<?=$FIELD?>]"><?=$arResult["VALUES"][$FIELD]?></textarea><?
break;
default:
if ($FIELD == "PERSONAL_BIRTHDAY"):?><small><?=$arResult["DATE_FORMAT"]?></small><br /><?endif;
?><input size="30" type="text" name="REGISTER[<?=$FIELD?>]" value="<?=$arResult["VALUES"][$FIELD]?>" /><?
if ($FIELD == "PERSONAL_BIRTHDAY")
$APPLICATION->IncludeComponent(
'bitrix:main.calendar',
'',
array(
'SHOW_INPUT' => 'N',
'FORM_NAME' => 'regform',
'INPUT_NAME' => 'REGISTER[PERSONAL_BIRTHDAY]',
'SHOW_TIME' => 'N'
),
null,
array("HIDE_ICONS"=>"Y")
);
?><?
}?></td>
</tr>
<?endif?>
<?endforeach?>
<?// ********************* User properties ***************************************************?>
<?if($arResult["USER_PROPERTIES"]["SHOW"] == "Y"):?>
<tr><td colspan="2"><?=strlen(trim($arParams["USER_PROPERTY_NAME"])) > 0 ? $arParams["USER_PROPERTY_NAME"] : GetMessage("USER_TYPE_EDIT_TAB")?></td></tr>
<?foreach ($arResult["USER_PROPERTIES"]["DATA"] as $FIELD_NAME => $arUserField):?>
<tr><td><?=$arUserField["EDIT_FORM_LABEL"]?>:<?if ($arUserField["MANDATORY"]=="Y"):?><span class="starrequired">*</span><?endif;?></td><td>
<?$APPLICATION->IncludeComponent(
"bitrix:system.field.edit",
$arUserField["USER_TYPE"]["USER_TYPE_ID"],
array("bVarsFromForm" => $arResult["bVarsFromForm"], "arUserField" => $arUserField, "form_name" => "regform"), null, array("HIDE_ICONS"=>"Y"));?></td></tr>
<?endforeach;?>
<?endif;?>
<?php if ($arResult['LOYALTY_STATUS'] === 'Y'): ?>
<tr>
<td></td>
<td>
<div class="fields boolean" id="main_UF_REG_IN_PL_INTARO">
<div class="fields boolean">
<input type="hidden" value="0" name="UF_REG_IN_PL_INTARO">
<label>
<input type="checkbox" value="1" name="UF_REG_IN_PL_INTARO" onchange="lpFieldToggle()" id="checkbox_UF_REG_IN_PL_INTARO"> <?=GetMessage("UF_REG_IN_PL_INTARO")?>
</label>
</div>
</div>
</td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td><?=GetMessage("BONUS_CARD_NUMBER")?></td>
<td><input size="30" type="text" name="UF_CARD_NUM_INTARO" value=""></td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td>
<?=GetMessage("REGISTER_FIELD_PERSONAL_PHONE")?>
</td>
<td>
<input size="30" type="text" name="REGISTER[PERSONAL_PHONE]" value>
</td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td>
<div class="fields boolean" id="main_UF_AGREE_PL_INTARO">
<div class="fields boolean">
<input type="hidden" value="0" name="UF_AGREE_PL_INTARO">
<label>
<input class="lp_agree_checkbox" type="checkbox" value="1" name="UF_AGREE_PL_INTARO"> <?=GetMessage("YES")?>
</label>
</div>
</div>
</td>
<td>
<?=GetMessage("I_AM_AGREE")?> <a class="lp_agreement_link" href="javascript:void(0)"><?=GetMessage("UF_AGREE_PL_INTARO")?></a>
</td>
</tr>
<tr class="lp_toggled_block" style="display: none">
<td>
<div class="fields boolean" id="main_UF_PD_PROC_PL_INTARO">
<div class="fields boolean"><input type="hidden" value="0" name="UF_PD_PROC_PL_INTARO">
<label>
<input class="lp_agree_checkbox" type="checkbox" value="1" name="UF_PD_PROC_PL_INTARO"> <?=GetMessage("YES")?>
</label>
</div>
</div>
</td>
<td>
<?=GetMessage("I_AM_AGREE")?> <a class="personal_data_agreement_link" href="javascript:void(0)"><?=GetMessage("UF_PD_PROC_PL_INTARO")?></a>
</td>
</tr>
<?php endif; ?>
<?// ******************** /User properties ***************************************************?>
<?
/* CAPTCHA */
if ($arResult["USE_CAPTCHA"] == "Y")
{
?>
<tr>
<td colspan="2"><b><?=GetMessage("REGISTER_CAPTCHA_TITLE")?></b></td>
</tr>
<tr>
<td></td>
<td>
<input type="hidden" name="captcha_sid" value="<?=$arResult["CAPTCHA_CODE"]?>" />
<img src="/bitrix/tools/captcha.php?captcha_sid=<?=$arResult["CAPTCHA_CODE"]?>" width="180" height="40" alt="CAPTCHA" />
</td>
</tr>
<tr>
<td><?=GetMessage("REGISTER_CAPTCHA_PROMT")?>:<span class="starrequired">*</span></td>
<td><input type="text" name="captcha_word" maxlength="50" value="" autocomplete="off" /></td>
</tr>
<?
}
/* !CAPTCHA */
?>
</tbody>
<tfoot>
<tr>
<td></td>
<td><input type="submit" name="register_submit_button" value="<?=GetMessage("AUTH_REGISTER")?>" /></td>
</tr>
</tfoot>
</table>
</form>
<p><?echo $arResult["GROUP_POLICY"]["PASSWORD_REQUIREMENTS"];?></p>
<?endif //$arResult["SHOW_SMS_FIELD"] == true ?>
<p><span class="starrequired">*</span><?=GetMessage("AUTH_REQ")?></p>
<?endif?>
<p><span class="starrequired">*</span><?=GetMessage("AUTH_REQ")?></p>
<? endif ?>
</div>

View file

@ -0,0 +1,6 @@
<?php
$MESS["REG_COMPLETE"] = 'Аккаунт в программе лояльности создан и активирован';
$MESS["ACTIVATE_YOUR_ACCOUNT"] = 'Аккаунт в программе лояльности создан, но не активирован. Для активации заполните форму.';
$MESS["ACTIVATE"] = 'Активировать';
$MESS["SMS_VERIFICATION"] = 'Для активации аккаунта необходимо ввести код верификации, который был отправлен на ваш телефон';
$MESS["SEND"] = 'Отправить';

View file

@ -24,6 +24,8 @@ use Bitrix\Sale\Order;
use CUser;
use Exception;
use Intaro\RetailCrm\Component\Factory\ClientFactory;
use Intaro\RetailCrm\Component\ServiceLocator;
use Intaro\RetailCrm\Model\Api\Request\Loyalty\Account\LoyaltyAccountActivateRequest;
use Intaro\RetailCrm\Model\Api\Request\Loyalty\LoyaltyCalculateRequest;
use Intaro\RetailCrm\Model\Api\Request\Order\Loyalty\OrderLoyaltyApplyRequest;
use Intaro\RetailCrm\Model\Api\SerializedOrderProduct;
@ -36,6 +38,14 @@ use Intaro\RetailCrm\Repository\PaySystemActionRepository;
*/
class LoyaltyService
{
const STANDART_FIELDS = [
'UF_REG_IN_PL_INTARO_TITLE' => 'checkbox',
'UF_AGREE_PL_INTARO_TITLE' => 'checkbox',
'UF_PD_PROC_PL_INTARO_TITLE' => 'checkbox',
'UF_CARD_NUM_INTARO' => 'text',
'PERSONAL_PHONE' => 'text',
];
/**
* @var \Intaro\RetailCrm\Component\ApiClient\ClientAdapter
*/
@ -160,7 +170,11 @@ class LoyaltyService
global $USER;
$rsUser = CUser::GetByID($USER->GetID());
$userFields = $rsUser->Fetch();
$regInLp = [];
$regInLp = [];
if (!$userFields) {
return [];
}
//Изъявлял ли ранее пользователь желание участвовать в ПЛ?
if (isset($userFields['UF_REG_IN_PL_INTARO'])
@ -168,7 +182,7 @@ class LoyaltyService
) {
//ДА. Существует ли у него аккаунт?
if (isset($userFields['UF_LP_ID_INTARO'])
&& $userFields['UF_LP_ID_INTARO'] === '1'
&& !empty($userFields['UF_LP_ID_INTARO'])
) {
//ДА. Активен ли его аккаунт?
if (isset($userFields['UF_EXT_REG_PL_INTARO'])
@ -177,18 +191,106 @@ class LoyaltyService
//ДА. Отображаем сообщение "Вы зарегистрированы в Программе лояльности"
$regInLp['msg'] = GetMessage('REG_COMPLETE');
} else {
//НЕТ. Отображаем форму для активации
$regInLp['msg'] = GetMessage('ACTIVATE_YOUR_ACCOUNT');
//НЕТ. Акаунт не активен
/** @var \Intaro\RetailCrm\Service\UserAccountService $userService */
$userService = ServiceLocator::get(UserAccountService::class);
$extFields = $userService->getExtFields($userFields['UF_EXT_REG_PL_INTARO']);
//Есть ли обязательные поля, которые нужно заполнить для завершения активации?
if (!empty($extFields)) {
//Да, есть незаполненные обязательные поля
$regInLp = [
'msg' => GetMessage('ACTIVATE_YOUR_ACCOUNT'),
'form' => [
'button' => [
'name' => GetMessage('ACTIVATE'),
'action' => 'activateAccount',
],
'fields' => $extFields,
],
];
} else {
//НЕТ. Обязательных незаполненных полей нет. Тогда пробуем активировать аккаунт
$activateResponse = $userService->activateLoyaltyAccount($userFields['UF_EXT_REG_PL_INTARO']);
if ($activateResponse !== null
&& isset($activateResponse->loyaltyAccount->active)
&& $activateResponse->loyaltyAccount->active === true) {
$regInLp['msg'] = GetMessage('REG_COMPLETE');
}
//нужна смс верификация
if (isset($activateResponse->verification, $activateResponse->verification->checkId)
&& $activateResponse !== null
&& !isset($activateResponse->verification->verifiedAt)
) {
$regInLp = [
'msg' => GetMessage('SMS_VERIFICATION'),
'form' => [
'button' => [
'name' => GetMessage('SEND'),
'action' => 'sendSmsCode',
],
'fields' => [
'smsVerificationCode' => [
'type' => 'text',
],
'checkId' => [
'type' => 'hidden',
'value' => $activateResponse->verification->checkId,
],
],
],
];
}
}
}
} else {
//НЕТ. Выясняем, каких полей не хватает для СОЗДАНИЯ аккаунта, выводим форму
$regInLp['msg'] = GetMessage('COMPLETE_YOUR_REGISTRATION');
$regInLp['msg'] = GetMessage('COMPLETE_YOUR_REGISTRATION');
$regInLp['form'] = [
'button' => [
'name' => GetMessage('CREATE'),
'action' => 'createAccount',
],
'fields' => $userFields,
];
}
} else {
//НЕТ. Отображаем форму на создание новой регистрации в ПЛ
$regInLp['msg'] = GetMessage('INVITATION_TO_REGISTER');
$regInLp['msg'] = GetMessage('INVITATION_TO_REGISTER');
$regInLp['form'] = [
'button' => [
'name' => GetMessage('CREATE'),
'action' => 'createAccount',
],
'fields' => $this->getStandartFields(),
];
}
return $regInLp;
}
/**
* @param bool $userFields
* @return array
*/
private function getStandartFields(bool $userFields)
{
$resultFields = [];
foreach (self::STANDART_FIELDS as $key => $value) {
if ($value === 'text' && empty($userFields[$key])) {
$resultFields[$key] = [
'value' => $value,
];
}
if ($value === 'checkbox' && $userFields[$key] !== '1') {
$resultFields[$key] = [
'value' => $value,
];
}
}
return $resultFields;
}
}

View file

@ -119,6 +119,17 @@ class UserAccountService
return $this->client->createLoyaltyAccount($createRequest);
}
/**
* @param $ufExtRegPlIntaro
* @return array
*/
public function getExtFields($ufExtRegPlIntaro): array
{
//узнаем, какие поля не заполненые у этого пользователя
//если все заполнено, то пытаемся активировать
//если в ответ получаем номер кода подтверждения, то отдаем два поля: скрытое с номером отправки и инпут для ввода кода проверки
}
/**
* @throws \Exception
*/