- Модуль: 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;
}