• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/controller/form.php
  • Класс: Bitrix\Crm\Controller\Form
  • Вызов: Form::checkAction
public function checkAction(array $options)
{
	if (!$this->checkFormAccess())
	{
		return [];
	}

	if ($options['templateId'] && !$options['id'])
	{
		return Main\DI\ServiceLocator::getInstance()
			->get('crm.service.webform.scenario')
			->check($options['templateId'])
		;
	}

	$schemeId = (int) $options['document']['scheme'] ?? null;
	if (!$schemeId || empty($options['data']['fields']) || !is_array($options['data']['fields']))
	{
		return [];
	}

	$fieldNames = [];
	foreach ($options['data']['fields'] as $field)
	{
		if (!is_array($field) || empty($field['name']))
		{
			continue;
		}

		$fieldNames[] = $field['name'];
	}


	if(!in_array($schemeId, WebForm\Entity::getSchemesCodes()))
	{
		return [];
	}

	$syncErrors = [];
	$syncFields = [];
	$fieldNames = (new WebForm\FieldSynchronizer())->getSynchronizeFields($schemeId, $fieldNames);
	foreach ($options['data']['fields'] as $field)
	{
		if ($field['type'] === 'resourcebooking' && !WebForm\Entity::isSchemeSupportEntity($schemeId, (int) $field['editing']['entityId']))
		{
			$syncErrors[] = Main\Localization\Loc::getMessage(
				'CRM_WEBFORM_FIELD_SYNCHRONIZER_ERR_RES_BOOK',
				[
					'%fieldCaption%' => $field['label'],
					'%entityCaption%' => implode(
						', ',
						array_map(
							function ($entityName)
							{
								return \CCrmOwnerType::getCategoryCaption(\CCrmOwnerType::resolveID($entityName));
							},
							WebForm\Entity::getSchemes($schemeId)['ENTITIES'] ?? []
						)
					),
				]
			);
			continue;
		}

		if (!is_array($field) || empty($field['name']) || !in_array($field['name'], $fieldNames))
		{
			continue;
		}

		$syncFields[] = $field;
	}

	return [
		'sync' => [
			'errors' => $syncErrors,
			'fields' => $syncFields,
		],
	];
}