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