- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/webform/options/integration.php
- Класс: Bitrix\Crm\WebForm\Options\Integration
- Вызов: Integration::save
public function save(): Result
{
$integrationSaveOperationResult = new Result;
/** if integration is empty skip save operation*/
if (!is_array($integrationOptions = $this->form->get()['INTEGRATION'] ?? null))
{
return $integrationSaveOperationResult;
}
$checkBeforeSave = $this->checkData();
if (!$checkBeforeSave->isSuccess())
{
return $checkBeforeSave;
}
$linksDb = AdsFormLinkTable::query()
->setSelect(["ID","ADS_FORM_ID","ADS_ACCOUNT_ID","ADS_TYPE","LINK_DIRECTION"])
->where("WEBFORM_ID", $this->form->getId())
->where("LINK_DIRECTION",AdsFormLinkTable::LINK_DIRECTION_IMPORT)
->exec();
/** form hash-array with key 'formId/accountId/formId' and dblink and delete flag*/
for ($links = [];$link = $linksDb->fetchObject();)
{
$key = "{$link->get("ADS_TYPE")}/{$link->get("ADS_ACCOUNT_ID")}/{$link->get("ADS_FORM_ID")}";
$links[$key] = $link;
}
$formsLinkResults = [];
foreach ($integrationOptions as $key => $integration)
{
/**chek if form link has export type*/
if (AdsFormLinkTable::LINK_DIRECTION_IMPORT !== (int)$integration["LINK_DIRECTION"])
{
continue;
}
$formsLinkResults[$key] = new Result();
/**form key to find links */
$origin = "{$integration['ADS_TYPE']}/{$integration['ADS_ACCOUNT_ID']}/{$integration["ADS_FORM_ID"]}";
/**if form unknown link it*/
if (!array_key_exists($origin,$links))
{
$linkFormResult = $this->linkForm($integration);
if (!$linkFormResult->isSuccess())
{
$formsLinkResults[$key]->addErrors(
$linkFormResult->getErrors()
);
break;
}
["LINK_ID" => $linkId] = $linkFormResult->getData();
}
/**if form was linked DELETE current mappings*/
else
{
/**@var EO_AdsFormLink $link*/
$link = $links[$origin];
$formMappingDeleteResult = FormFieldMappingTable::delete($linkId = $link->getId());
unset($links[$origin]);
if (!$formMappingDeleteResult->isSuccess())
{
$formsLinkResults[$key]->addErrors(
$formMappingDeleteResult->getErrors()
);
break;
}
}
foreach ($integration['FIELDS_MAPPING'] as $mapping)
{
$mappingSaveResult = WebForm\Internals\FormFieldMappingTable::add(
array(
'FORM_LINK_ID' => $linkId,
'CRM_FIELD_KEY' => $mapping['CRM_FIELD_KEY'],
'ADS_FIELD_KEY' => $mapping['ADS_FIELD_KEY'],
'ITEMS' => $mapping['ITEMS'] ?? [],
)
);
$this->prepareResult($formsLinkResults[$key],$mappingSaveResult);
}
}
$this->prepareResult($integrationSaveOperationResult, ...$formsLinkResults);
if (!$integrationSaveOperationResult->isSuccess())
{
return $integrationSaveOperationResult;
}
/**delete unused form links */
$linksDeleteResult = $this->unlinkForms($links);
return $this->prepareResult(
$integrationSaveOperationResult,
$linksDeleteResult
);
}