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