...Человеческий поиск в разработке...
- Модуль: 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; }