• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/options/integration.php
  • Класс: Bitrix\Crm\WebForm\Options\Integration
  • Вызов: Integration::checkData
public function checkData(): Main\Entity\Result
{
	$integrationResult = new Main\Entity\Result;

	if (!$integrationOptions = $this->form->get()['INTEGRATION'])
	{
		return $integrationResult;
	}

	/** type control array */
	$typesCheck = array_combine(
		$types = AdsForm::getServiceTypes(),
		array_fill(0, count($types), true)
	);

	self::clearNotExistsFormIntegrationLinks();

	foreach ($integrationOptions as $integration)
	{
		if (AdsFormLinkTable::LINK_DIRECTION_IMPORT !== (int)$integration["LINK_DIRECTION"])
		{
			continue;
		}

		if (!in_array($type = $integration["ADS_TYPE"], $types, true))
		{
			$integrationResult->addError(
				new Error(Loc::getMessage("CRM_WEBFORM_OPTIONS_LINK_WRONG_TYPE"))
			);

			continue;
		}

		if (!$typesCheck[$type])
		{
			$integrationResult->addError(
				new Error(Loc::getMessage("CRM_WEBFORM_OPTIONS_LINK_TYPE_DUPLICATE"))
			);

			continue;
		}

		if (!isset($integration['FIELDS_MAPPING']))
		{
			$integrationResult->addError(
				new Error(Loc::getMessage("CRM_WEBFORM_OPTIONS_LINK_EMPTY_FIELD_MAPPING"))
			);

			continue;
		}

		$duplicates =
			AdsFormLinkTable::query()
				->setSelect(['ID'])
				->where('ADS_TYPE',$integration['ADS_TYPE'])
				->where('ADS_FORM_ID', $integration['ADS_FORM_ID'])
				->where('ADS_ACCOUNT_ID', $integration['ADS_ACCOUNT_ID'])
				->whereNot('WEBFORM_ID', $this->form->getId())
				->exec()
		;
		if ($duplicates->getSelectedRowsCount() > 0)
		{
			$integrationResult->addError(
				new Error(Loc::getMessage('CRM_WEBFORM_OPTIONS_LINK_FORM_DUPLICATE_ERROR'))
			);

			continue;
		}

		AdsFormLinkTable::checkFields(
			$integrationResult,
			null,
			array(
				'LINK_DIRECTION' => $integration['LINK_DIRECTION'],
				'WEBFORM_ID' => $this->form->getId(),
				'ADS_TYPE' => $integration['ADS_TYPE'],
				'ADS_ACCOUNT_ID' => $integration['ADS_ACCOUNT_ID'],
				'ADS_FORM_ID' => $integration['ADS_FORM_ID'],
				'ADS_ACCOUNT_NAME' => $integration['ADS_ACCOUNT_NAME'] ?? '',
				'ADS_FORM_NAME' => $integration['ADS_FORM_NAME'],
			)
		);

		foreach ($integration['FIELDS_MAPPING'] as $mapping)
		{
			Webform\Internals\FormFieldMappingTable::checkFields(
				$integrationResult,
				null,
				array(
					'FORM_LINK_ID' => self::FAKE_ID_VALUE,
					'CRM_FIELD_KEY' => $mapping['CRM_FIELD_KEY'],
					'ADS_FIELD_KEY' => $mapping['ADS_FIELD_KEY'],
					'ITEMS' => $mapping['ITEMS'] ?? [],
				)
			);
		}

		$typesCheck[$integration['ADS_TYPE']] = false;

	}

	return $integrationResult;
}