• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Model/FieldContentTypeTable.php
  • Класс: Bitrix\Crm\Model\FieldContentTypeTable
  • Вызов: FieldContentTypeTable::prepareChangedObjects
static function prepareChangedObjects(
	ItemIdentifier $item,
	EO_FieldContentType_Collection $oldObjects,
	array $newMap
): array
{
	$fieldNameToOldEntityObjectMap = [];
	foreach ($oldObjects as $entityObject)
	{
		$fieldNameToOldEntityObjectMap[$entityObject->getFieldName()] = $entityObject;
	}

	$objectsToSave = [];
	$objectsNotChanged = [];
	foreach ($newMap as $fieldName => $newContentTypeId)
	{
		if (!isset($fieldNameToOldEntityObjectMap[$fieldName]))
		{
			// add new
			$objectsToSave[$fieldName] =
				self::createObject()
					->setEntityTypeId($item->getEntityTypeId())
					->setEntityId($item->getEntityId())
					->setFieldName($fieldName)
					->setContentTypeId((int)$newContentTypeId)
			;
		}
		elseif ((int)$newContentTypeId !== (int)$fieldNameToOldEntityObjectMap[$fieldName]->getContentTypeId())
		{
			// update existing
			$objectsToSave[$fieldName] =
				$fieldNameToOldEntityObjectMap[$fieldName]
					->setContentTypeId((int)$newContentTypeId)
			;
		}
		else
		{
			$objectsNotChanged[$fieldName] = $fieldNameToOldEntityObjectMap[$fieldName];
		}
	}

	$objectsToDelete = [];
	foreach ($fieldNameToOldEntityObjectMap as $fieldName => $entityObject)
	{
		if (!isset($objectsToSave[$fieldName]) && !isset($objectsNotChanged[$fieldName]))
		{
			$objectsToDelete[] = $entityObject;
		}
	}

	return [$objectsToSave, $objectsToDelete];
}