• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/controller/activity/todo.php
  • Класс: Bitrix\Crm\Controller\Activity\ToDo
  • Вызов: ToDo::saveFilesToStorage
private function saveFilesToStorage(
	int $ownerTypeId,
	int $ownerId,
	array $fileUploaderIds,
	?int $activityId = null,
	array $currentStorageElementIds = []
): array
{
	if (!Loader::includeModule('disk'))
	{
		$this->addError(new Error('"disk" module is required.'));

		return [];
	}

	$idsOfNewFiles = array_values(
		array_unique(
			array_filter(
				array_map(static function($item) {
					if (is_numeric($item))
					{
						return (int) $item;
					}

					if (is_string($item))
					{
						return $item;
					}
				}, $fileUploaderIds)
			)
		)
	);
	$idsNotChanged = [];
	$hiddenStorage = (new HiddenStorage())->setSecurityContextOptions([
		'entityTypeId' => $ownerTypeId,
		'entityId' => $ownerId,
	]);

	$currentFileIds = $hiddenStorage->fetchFileIdsByStorageFileIds(
		$currentStorageElementIds,
		HiddenStorage::USE_DISK_OBJ_ID_AS_KEY
	);
	if (!empty($currentFileIds))
	{
		$idsOfNewFiles = array_values(array_diff($fileUploaderIds, $currentFileIds));
		$idsToRemove = array_diff($currentFileIds, $fileUploaderIds);
		$idsNotChanged = array_keys(array_diff($currentFileIds, $idsToRemove));

		$hiddenStorage->deleteFiles(array_keys($idsToRemove));
	}

	$fileUploader = new FileUploader(
		new TodoActivityUploaderController([
			'entityTypeId' => $ownerTypeId,
			'entityId' => $ownerId,
			'activityId' => $activityId,
		])
	);
	$fileIds = $fileUploader->getPendingFiles($idsOfNewFiles);
	$hiddenStorageFiles = $hiddenStorage->addFilesToFolder($fileIds, HiddenStorage::FOLDER_CODE_ACTIVITY);
	$hiddenStorageFileIds = array_map(fn(File $file) => $file->getId(), $hiddenStorageFiles);
	$fileUploader->makePersistentFiles($idsOfNewFiles);

	return array_values(array_merge($idsNotChanged, $hiddenStorageFileIds));
}