Form::copy

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Form
  4. copy
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/form.php
  • Класс: Bitrix\Crm\WebForm\Form
  • Вызов: Form::copy
static function copy($formId, $userId = null)
{
	// copy form
	$form = Internals\FormTable::getRowById($formId);
	if(!$form)
	{
		return null;
	}

	unset($form['ID'], $form['DATE_CREATE'], $form['ACTIVE_CHANGE_DATE'], $form['SECURITY_CODE'], $form['XML_ID']);
	$form['NAME'] = Loc::getMessage('CRM_WEBFORM_FORM_COPY_NAME_PREFIX') . ' ' . $form['NAME'];
	$form['ACTIVE'] = 'N';
	$form['IS_SYSTEM'] = 'N';
	$form['ACTIVE_CHANGE_BY'] = $userId;
	$form['DATE_CREATE'] = new Main\Type\DateTime();
	$resultFormAdd = Internals\FormTable::add($form);
	if(!$resultFormAdd->isSuccess())
	{
		return null;
	}
	$newFormId = $resultFormAdd->getId();

	// copy fields
	$fieldDb = Internals\FieldTable::getList(array(
		'filter' => array('=FORM_ID' => $formId)
	));
	while($field = $fieldDb->fetch())
	{
		unset($field['ID']);
		$field['FORM_ID'] = $newFormId;
		Internals\FieldTable::add($field);
	}

	// copy field dependencies
	$fieldDepGroupMap = [];
	$fieldDepGroups = Internals\FieldDepGroupTable::getList(array(
		'filter' => array('=FORM_ID' => $formId)
	));
	foreach ($fieldDepGroups as $fieldDepGroup)
	{
		$fieldDepGroupId = $fieldDepGroup['ID'];
		unset($fieldDepGroup['ID']);
		$fieldDepGroup['FORM_ID'] = $newFormId;
		$fieldDepGroupMap[$fieldDepGroupId] = Internals\FieldDepGroupTable::add($fieldDepGroup)->getId() ?: 0;
	}

	$fieldDeps = Internals\FieldDependenceTable::getList(array(
		'filter' => array('=FORM_ID' => $formId)
	));
	while($fieldDep = $fieldDeps->fetch())
	{
		unset($fieldDep['ID']);
		$fieldDep['FORM_ID'] = $newFormId;
		$fieldDep['GROUP_ID'] = $fieldDepGroupMap[$fieldDep['GROUP_ID']] ?? 0;
		Internals\FieldDependenceTable::add($fieldDep);
	}

	// copy preset fields
	$presetFieldDb = Internals\PresetFieldTable::getList(array(
		'filter' => array('=FORM_ID' => $formId)
	));
	while($presetField = $presetFieldDb->fetch())
	{
		$presetField['FORM_ID'] = $newFormId;
		Internals\PresetFieldTable::add($presetField);
	}

	// copy agreements
	$agreements = Internals\AgreementTable::getList(array(
		'filter' => array('=FORM_ID' => $formId)
	));
	while($agreement = $agreements->fetch())
	{
		unset($agreement['ID']);
		$agreement['FORM_ID'] = $newFormId;
		Internals\AgreementTable::add($agreement);
	}

	// copy assigned by
	$queue = Internals\QueueTable::getList(array(
		'filter' => array('=FORM_ID' => $formId)
	));
	while($queueRow = $queue->fetch())
	{
		unset($queueRow['ID']);
		$queueRow['FORM_ID'] = $newFormId;
		Internals\QueueTable::add($queueRow);
	}


	return $newFormId;
}

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