Integration::save

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Integration
  4. save
  • Модуль: 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
	);
}

Добавить комментарий