Your IP : 3.15.181.250


Current Path : /home/bitrix/ext_www/rk_shared_core/local/classes/Webprofy/
Upload File :
Current File : /home/bitrix/ext_www/rk_shared_core/local/classes/Webprofy/FormEvent.php

<?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;
	}

}