- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/counter/monitor.php
- Класс: Bitrix\Crm\Counter\Monitor
- Вызов: Monitor::loadEntitiesDataForBindings
protected function loadEntitiesDataForBindings(array $bindings): array
{
if (empty($bindings))
{
return [];
}
$loadedEntitiesData = $this->loadedEntitiesData;
/** @var ItemIdentifier $binding */
foreach ($bindings as $binding)
{
$value = $loadedEntitiesData[$binding->getEntityTypeId()][$binding->getEntityId()] ?? null;
if (!is_array($value))
{
$loadedEntitiesData[$binding->getEntityTypeId()][$binding->getEntityId()] = [];
}
}
// get fields from entities changes
/** @var EntityChange $entityChange */
foreach ($this->entitiesChangesCollection->getValues() as $entityChange)
{
$entityTypeId = $entityChange->getIdentifier()->getEntityTypeId();
$entityId = $entityChange->getIdentifier()->getEntityId();
if (isset($loadedEntitiesData[$entityTypeId][$entityId]))
{
$loadedEntitiesData[$entityTypeId][$entityId] = [
'assignedBy' => $entityChange->getActualAssignedById(),
'categoryId' => $entityChange->getActualCategoryId(),
];
}
}
// load fields for not modified entities
foreach ($loadedEntitiesData as $entityTypeId => $entityTypeBindings)
{
$factory = Container::getInstance()->getFactory($entityTypeId);
if (!$factory)
{
unset($loadedEntitiesData[$entityTypeId]);
continue;
}
$entitiesToLoad = [];
foreach ($entityTypeBindings as $entityId => $entityData)
{
if (empty($entityData))
{
$entitiesToLoad[] = (int)$entityId;
}
}
if (!empty($entitiesToLoad))
{
$assignedByFiledName = $factory->getEntityFieldNameByMap(Item::FIELD_NAME_ASSIGNED);
$categoryIdFieldName = $factory->getEntityFieldNameByMap(Item::FIELD_NAME_CATEGORY_ID);
$select = [
Item::FIELD_NAME_ID,
];
if ($factory->isFieldExists(Item::FIELD_NAME_ASSIGNED))
{
$select[] = $assignedByFiledName;
}
if ($factory->isFieldExists(Item::FIELD_NAME_CATEGORY_ID))
{
$select[] = $categoryIdFieldName;
}
$entitiesData = $factory->getDataClass()::query()
->setSelect($select)
->whereIn('ID', $entitiesToLoad)
->fetchAll()
;
foreach ($entitiesData as $entityData)
{
if (isset($loadedEntitiesData[$entityTypeId][$entityData['ID']]))
{
$loadedEntitiesData[$entityTypeId][$entityData['ID']] = [
'assignedBy' => $entityData[$assignedByFiledName] ?? null,
'categoryId' => $entityData[$categoryIdFieldName] ?? null,
];
$this->loadedEntitiesData[$entityTypeId][$entityData['ID']] = $loadedEntitiesData[$entityTypeId][$entityData['ID']];
}
}
}
}
return $loadedEntitiesData;
}