Your IP : 3.15.181.250
<?php
namespace Webprofy;
use Bitrix\Main\Loader;
use Webprofy\CRM\Lead;
class FormEvent
{
function OnAfterResultAdd($WEB_FORM_ID, $RESULT_ID)
{
if(!Loader::includeModule('form')){
return;
}
if($WEB_FORM_ID <= 0 || $RESULT_ID <= 0){
return false;
}
$dbRes = \CFormCrm::GetByFormID($WEB_FORM_ID);
$arLink = $dbRes->Fetch();
if(!$arLink || !$arLink['CRM_ID']){
return false;
}
//
$ob = new \CFormCrmSender($arLink['CRM_ID']);
$arCrmF = $ob->GetFields();
$arCrmFields = array();
foreach($arCrmF as $ar){
$arCrmFields[$ar['ID']] = $ar;
}
$dbRes = \CFormCrm::GetFields($arLink['ID']);
$arFormFields = array();
while($arRes = $dbRes->Fetch()){
$arFormFields[] = $arRes;
}
$arLeadFields = self::prepareData($RESULT_ID, $arFormFields, $arCrmFields);
if(!Loader::includeModule('webprofy.crm')){
return;
}
if($arLeadFields['PHONE_MOBILE']){
$lead = new Lead();
$leadExists = $lead->getLeadByPhone($arLeadFields['PHONE_MOBILE']);
}
if($leadExists){
//update call
$arLead = array_shift($leadExists);
$res = $lead->createCall($arLead['ID'], $arLeadFields['PHONE_MOBILE']);
}else{
//create lead
$res = $lead->addLead($arLeadFields);
}
if($res['result']){
return \CFormResult::SetCRMFlag($RESULT_ID, 'Y');
}
}
/**
* @param $RESULT_ID
* @param $arFormFields
* @param $arCrmFields
* @return array
*/
protected static function prepareData($RESULT_ID, $arFormFields, $arCrmFields)
{
$arResultFields = array();
$arAnswers = array();
$arLeadFields = array();
\CFormResult::GetDataByID($RESULT_ID, array(), $arResultFields, $arAnswers);
//Добавление client-id, если есть в настройках формы
if($arAnswers['CLIENT_ID'] && is_array($arAnswers['CLIENT_ID']) && function_exists('gaParseCookie')){
foreach($arAnswers['CLIENT_ID'] as $key => $arAnswer){
$arAnswers['CLIENT_ID'][$key]['USER_TEXT'] = gaParseCookie();
break;
}
}
//Добавление PHPSESSID, если есть в настройках формы
if($arAnswers['BitrixSessionID'] && is_array($arAnswers['BitrixSessionID'])){
foreach($arAnswers['BitrixSessionID'] as $key => $arAnswer){
$arAnswers['BitrixSessionID'][$key]['USER_TEXT'] = $_COOKIE['PHPSESSID'] ? $_COOKIE['PHPSESSID'] : "";
break;
}
}
//Добавление WebProfySessionID, если есть в настройках формы
if($arAnswers['WebProfySessionID'] && is_array($arAnswers['WebProfySessionID']) && $_COOKIE["WebProfySessionID"]){
foreach($arAnswers['WebProfySessionID'] as $key => $arAnswer){
$arAnswers['WebProfySessionID'][$key]['USER_TEXT'] = $_COOKIE["WebProfySessionID"] ? $_COOKIE["WebProfySessionID"] : "";
break;
}
}
foreach($arFormFields as $arRes){
if(intval($arRes['FIELD_ID']) > 0){
$bFound = false;
foreach($arAnswers as $sid => $arAnswer){
foreach($arAnswer as $answer_id => $arAns){
if($arAns['FIELD_ID'] == $arRes['FIELD_ID']){
$bFound = true;
if($arCrmFields[$arRes['CRM_FIELD']]){
$value = '';
switch($arCrmFields[$arRes['CRM_FIELD']]['TYPE']){
case 'enum':
$value = $arAns['ANSWER_TEXT'];
break;
case 'boolean':
$value = 'Y';
break;
default:
$value = (strlen($arAns['USER_TEXT']) > 0
? $arAns['USER_TEXT']
: (
strlen($arAns['ANSWER_TEXT']) > 0
? $arAns['ANSWER_TEXT']
: $arAns['VALUE']
)
);
break;
}
if($arCrmFields[$arRes['CRM_FIELD']]['MULTIPLE'] === "true"){
$arLeadFields[$arRes['CRM_FIELD']] .=
(empty($arLeadFields[$arRes['CRM_FIELD']]) ? '' : ',') . $value;
} else{
$arLeadFields[$arRes['CRM_FIELD']] = $value;
}
}
}
}
}
if(!$bFound && $arCrmFields[$arRes['CRM_FIELD']] && $arCrmFields[$arRes['CRM_FIELD']]['TYPE'] == 'boolean'){
$arLeadFields[$arRes['CRM_FIELD']] = 'N';
}
} elseif(strlen($arRes['FIELD_ALT']) > 0){
switch($arRes['FIELD_ALT']){
case 'RESULT_ID':
$arLeadFields[$arRes['CRM_FIELD']] = $arResultFields['ID'];
break;
case 'FORM_SID':
$arLeadFields[$arRes['CRM_FIELD']] = $arResultFields['SID'];
break;
case 'FORM_NAME':
$arLeadFields[$arRes['CRM_FIELD']] = $arResultFields['NAME'];
break;
case 'SITE_ID':
$arLeadFields[$arRes['CRM_FIELD']] = SITE_ID;
break;
default:
break;
}
}
}
return $arLeadFields;
}
}