...Человеческий поиск в разработке...
- Модуль: 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 ); }