- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/webform/resultentity.php
- Класс: Bitrix\Crm\WebForm\ResultEntity
- Вызов: ResultEntity::add
public function add($schemeId, $fields)
{
$this->entityMap = Entity::getMap();
$this->scheme = $schemeId;
$this->fields = $this->prepareFields($fields);
$this->selector = $this->createSelector();
$this->performTrace();
$results = $this->fireEvent('onSiteFormFill', [
'id' => $this->getFormId(),
'fields' => $this->fields,
'properties' => $this->placeholders,
'assignedById' => $this->assignedById,
]);
foreach ($results as $result)
{
if ($result->getType() === \Bitrix\Main\EventResult::ERROR)
{
continue;
}
$resultData = $result->getParameters();
if (isset($resultData['assignedById']) && $resultData['assignedById'] > 0)
{
$this->assignedById = $resultData['assignedById'];
}
}
try
{
switch($schemeId)
{
case Entity::ENUM_ENTITY_SCHEME_CONTACT:
$this->addClient();
break;
case Entity::ENUM_ENTITY_SCHEME_LEAD:
$this->addLead();
break;
case Entity::ENUM_ENTITY_SCHEME_LEAD_INVOICE:
$this->addLead(['ADD_INVOICE' => true]);
break;
case Entity::ENUM_ENTITY_SCHEME_DEAL:
$this->addDeal();
break;
case Entity::ENUM_ENTITY_SCHEME_QUOTE:
$this->addQuote();
break;
case Entity::ENUM_ENTITY_SCHEME_DEAL_INVOICE:
$this->addDeal(['ADD_INVOICE' => true]);
break;
case Entity::ENUM_ENTITY_SCHEME_QUOTE_INVOICE:
$this->addQuote(['ADD_INVOICE' => true]);
break;
case Entity::ENUM_ENTITY_SCHEME_CONTACT_INVOICE:
$this->addClient(['ADD_INVOICE' => true]);
break;
default:
$scheme = Entity::getSchemes($schemeId);
if (!$scheme)
{
return;
}
$dynamicTypeId = null;
$hasInvoice = false;
foreach ($scheme['ENTITIES'] as $entityTypeName)
{
$entityTypeId = \CCrmOwnerType::resolveId($entityTypeName);
if (\CCrmOwnerType::isUseDynamicTypeBasedApproach($entityTypeId))
{
$dynamicTypeId = $entityTypeId;
}
elseif ($entityTypeId === \CCrmOwnerType::Invoice)
{
$hasInvoice = true;
}
}
if ($dynamicTypeId)
{
$this->addDynamic([
'DYNAMIC_TYPE_ID' => $dynamicTypeId,
'ADD_INVOICE' => $hasInvoice
]);
}
break;
}
$this->fillTrace();
$this->addActivity();
$this->addConsent();
$this->runAutomation();
WebFormTrigger::onFormFill($this);
if(count($this->resultEntityPack) > 0)
{
ResultEntityTable::addBatch($this->formId, $this->resultEntityPack);
}
$eventData = [
'id' => $this->getFormId(),
'fields' => $this->fields,
'properties' => $this->placeholders,
'result' => [
'entities' => $this->getResultEntities(),
],
];
$eventNamePostfix = $this->placeholders['eventNamePostfix'] ?? '';
if ($eventNamePostfix && preg_match('/\w+/', $eventNamePostfix))
{
(new Main\Event('crm', 'onSiteFormFilled' . $eventNamePostfix, $eventData))->send();
}
(new Main\Event('crm', 'onSiteFormFilled', $eventData))->send();
}
catch(\Exception $e)
{
throw $e;
}
}